44
EECS 498 MAIZE TEAM Edward Chakmakian, Kurt Lundeen, Daniel Morizio, Deepak Sharma Project 1: Final Report “PP for P-Day”

Hands-on Robotics_Way Point Navigation

Embed Size (px)

Citation preview

EECS 498

MAIZE TEAM

Edward Chakmakian, Kurt Lundeen, Daniel Morizio, Deepak Sharma

Project 1: Final Report

“PP for P-Day”

CONTENT

1. Background

1.1. Project Introduction

1.2. Equipment Involved

1.2.1. Computer Vision System

1.2.2. Dynamixel RX-64 and EX-106 Servo Motors

1.3. Design brainstorming

1.3.1. Hardware

1.3.1.1. Walker Robot

1.3.1.2. Crane Robot

1.3.1.3. Adaptation to Red teams (2014) Project 0 robot

1.3.1.4. Revolute-Revolute Manipulator Robot

1.3.1.5. Prismatic-Prismatic Robot

1.3.2. Software

2. Implementation

2.1. Initial Concept

2.2. Robot Design and Construction

2.3. Design Considerations

2.3.1. Sources of Error

2.3.2. Re-evaluation and Modifications

2.4. Motion Algorithm

2.4.1. Robot

2.4.2. Manual Controller

2.4.3. Autonomous Controller

3. Expected Performance

3.1. Modelling Software

3.2. Calibration and Modification

4. Results

4.1. P-Day Results

4.2. Observations

5. Discussion

5.1. Discussion of Other Teams

5.2. Reflection on Current Design

5.2.1. Mechanical Design

5.2.2. Software

5.3. Future Modifications

5.3.1. Mechanical Design

5.3.2. Software

6. References

7. Appendix

1. Background

1.1 Project Introduction

The project task is to develop a robot which could reach a sequence of waypoint

tags in a specific order while always pointing a laser mounted on the robot in +y

direction (red line as shown in Figure 1 (Fig. 1)).

Figure 1: Schematic diagram of the 2D tags (grey boxes) and robot with red laser in the

arena.

The details of the project (as discussed in Project 1 Task Specification file [1]) is

mentioned the following four points:

● Trajectory defined by waypoints: The four waypoints enveloped by the corner

tags (as shown in Fig. 1) define the overall path that robot has to take to

complete the task. The location of a waypoint, indicated by tag, is the centroid of

the corners recovered by the vision system. The robot also carries a tag, which

defines the location of the robot. A waypoint is reached when the center of the

robot tag is within the tag diameter of the waypoint tag on the plane of the

waypoint.

● Simulated sensor readings: The project also includes an optional aid provided

by the vision system to help with the navigation of the bot. The vision system

simulates two sensors (cyan and magenta circle markers in Fig. 1). It measures

the perpendicular distance between each sensor and the line segment

connecting previous and next waypoint (tag). If these perpendicular distances fall

outside the segment between the waypoints, or the sensor is too far away from

the line segment, the sensor value is 0.

● Information available to robot: Messages are sent to the robot controller when

the robot tag is observed. This message contains two sets of data. First, the

sensor measurements (as discussed above) in form of a dictionary of key-value

pairs, where keys ‘f’ and ‘b’ indicate the “front” and “back” sensors and have 8-bit

values. Second is the waypoint information; which consists of key ‘w’, which is

part of the aforementioned dictionary, containing a list of waypoints with each

waypoint containing two integers (global x and y coordinates of waypoints). The

waypoints list is sent periodically and when a waypoint is reached. The list keeps

on reducing as the waypoints are reached. Before P-Day trials, coordinates of

four corners of the arena will be given to make safety checks of keeping robot in

the arena. Also, apart from the arena dimensions, another important

measurement consideration is to keep the laser dot projected on the whiteboard

at a distance of at least 25 cm above arena.

● Objective and Pass-Fail criterion: On P-Day, teams will be given 15 minutes to

transverse the waypoints and will be scored on the basis of the RMS (root-of-

mean-of-squares) of the “tracking error”. This error is defined as the difference

between the x-Coordinate of laser dot on screen (whiteboard) and the robot tag’s

projected x-Coordinate (as shown in Fig. 2). After setting the bot in behind the

arena in 1 meter deep area, team can manually drive the bot to the first waypoint.

Upon reaching this waypoint, bot has to automatically navigate through the

remaining three waypoints. To pass the P-Day specification, robot (not just the

tag) has to remain in the arena, robot should reach the final waypoint within 15

minutes and laser should never illuminate in the negative y-direction. In the case

where any of these rules aren’t met, the team will be allowed to manually driving

the bot through remaining waypoints, forfeiting any chances of winning the

competition.

Figure 2: Schematic Representation of “tracking error”.

1.2 Equipment Involved

1.2.1 Computer vision system

To track the arena and robot barcode tags, computer-vision system was provided

that used a Logitech webcam. The software simulated the two aforementioned robot tag

sensors, in addition to mapping arena coordinates and noticing if the robot tag has

reached the next waypoint.

1.2.2 Dynamixel RX-64 and EX-106 Servo Motors

Servo motors were provided along with the python library. These motors allowed

both constant rotation and joint mode operations, where prescribed torque between -1 to

+1 or prescribed angles between -10000 to 10000 could be specified. Maximum of 6

servo motors (a combination of RX-64 and EX motors) were allowed in any suitable

configuration.

1.3 Design Brainstorming

1.3.1 Hardware

Group brainstorming meetings focused on making a design which is efficient and

avoids the usage of complex mechanical structures and mechanisms which could be

interfaced with robust and flexible code. The team came up with 5 designs satisfying the

constraints in the given problem statement. These robot ideas are as follows:

1.3.1.1 Walker Robot

At first, the team came up with an idea of a robot moving on wheels with a

“walker” attached to it. The walker pushes down each time the robot has to turn and

helps in turning of the wheels by lifting them. Walker also mounts the laser on it so that

laser doesn’t change direction each time the robot turns (see Fig. 3). This idea is

inspired from the Blue team’s bot from 2012. The idea was also implemented by Blue

team in this year’s project 1.

Pros and Cons: This bot solves the issue of laser always pointing in the Y-direction.

Also, it discretizes motion in x and y direction only and with good calibration, could lead

to very accurate 90 degree turns. But, on the downside, the robot includes complexity at

both hardware and software ends. Two complex mechanical mechanisms including

rotating wheels and walker are required on the same bot chassis which could hinder

with the laser projection.

Figure 3: Concept design of Walker Robot

1.3.1.2 Crane Robot

This robot uses a slider-linkage mechanism to cover the arena in y-direction by

moving robot in a guided rail. When the robot moves in x-direction, the robot is lifted

using the rope attached to the base of the robot (as shown in Fig. 4). This rope also

helps the bot in pushing and pulling it in y-direction.

Pros and Cons: The robot provides discrete x and y motions running on two different

rails. Also, the bot uses a slider-linkage mechanism which has well-documented

mathematical modeling. But, the bot is bulky in design and may threaten the design

parameters of having less complex design.

Figure 4: Concept design of Crane Robot

1.3.1.3 Adaptation of Red Team’s Project 0 Robot

Red team in project 0 made a robot which could make precise and repeatable

movements and could use a servo controlled turret style laser to adapt to this project.

Pros. and Cons: Fig. 5 shows the robot Red team made for project 0 which has an

advantage that it’s already made but it is susceptible to error accumulation.

Figure 5: Concept design of Adaptation Robot

1.3.1.4 Revolute-Revolute (RR) Manipulator Robot

This robot has two rotating links operated by controlling the joint angles as shown

in Fig. 6.

Pros. and Cons: The bot is able to orient laser quite accurately using synchronized

belt-pulleys as shown in Fig. 7 (side view) and Fig. 8 (top view). But, the bot may require

high torque motor to move the arms. Also, to avoid crossing out of the arena, the bot

may need a robust trajectory planning while reaching waypoints placed anywhere in the

arena.

Figure 6: End effector of R-R robot locating different points in arena (top view)

Figure 7: R-R Robot showing belts and pulley system (side view)

Figure 8: Belt-Pulley system (with constantly upward pointing arrows) of R-R Robot (top view)

1.3.1.5 Prismatic-Prismatic (P-P) Robot

This robot works with two prismatic links moving in both x and y directions. Being

inspired from a video [2] showing the usage of automatically controlled tape measure,

team came up with idea of using the “electric tape measure” to govern the movements

in y-direction. An extension-retraction system shown in Fig. 9. A guiding track made out

of belts, rails or rack and pinion could be used for the movements in x-direction as

shown in Fig. 10 using belt and pulley assembly (as shown in horizontal (x) direction).

Pros and Cons: This robot has a simpler design than that the aforementioned R-R

robot and will require easier to implement control system. But, this bot could be slower

than some of the aforementioned bot designs and will need a better consideration over

measuring the extension of robot tag in y-direction.

Figure 9: Concept for extension-retraction system for tape measure system in y-

direction

Figure 10: Top view of P-P Robot showing tape measure (vertical) and belt-pulley

(horizontal) design

After weighing all the aforementioned pros and cons for the 5 designs and reviewing the

capability of team members to build a design for P-Day, the team decided to go with P-P

Robot (5th design) and used rack and pinion instead of belt-pulley system for x-direction

motion.

1.3.2 Software

The 1996 paper by Borenstein et al [3] influenced the direction of our software

design. Knowing that the accumulating odometry error of buggy style robots was

unbounded, we quickly settled on a mechanical platform that avoided this movement

style. Initially a revolute-revolute planar manipulator was decided upon and software

development moved forward in this direction. If the team would have settled with this

design, a controller using the inverse kinematics described in Kucuk and Bingul’s Robot

Kinematics [4] would have been implemented in Python to calculate the necessary

servo angles to move to the waypoints. However a mechanical change to a prismatic-

prismatic manipulator changed the course of development.

The initial plan for the software controller was to first implement manual

controller based on the ShaveAndHaircut.py; included in the virtual machine

environment. This would help debug the mechanics of the robot before a final

automated controller was implemented. This manual controller would utilize a Korg MIDI

controller which included sliders, which could be used to fine tune arm speed and

buttons to activate movement.

Finally an autopilot would be implemented which would use the odometry with the

rack and pinion controlling movement in x-direction. A rack and pinion with the

Dynamixel MX-64 motor and its no dead-zone encoder controller was considered

adequately accurate to get our waypoint within the bounds of the target waypoints. This

assumption would need to be tested in system later on and if it fails, additional x-axis

sensors such as the Sharp GP2Y0A21YK0F could be implemented to increase the

accuracy. The flowchart shown in Fig. 11 shows the general outline of the vision for our

robots controller. It is based on the assumption that we would have MX-64 motor

modules and our odometry would be accurate enough to get us within the waypoint

perfectly.

Figure 11. Initial Controller Flowchart

2. Implementation

2.1 Initial Concept

A top view of the initial concept is shown in Fig. 10. The concept was inspired by

the recollection of the existence of electrically-driven tape measures during a

brainstorming discussion. The initial robot concept was drawn with a belt and pulley

system, but it was only meant to represent a generic mechanism for linear translation

along the x- direction.

2.2 Robot Design and Construction

The design process for the Prismatic-Prismatic (PP) Electric Tape Robot began

with a consideration of the robot’s x- and y- movements. The requirement that the robot

be able to reach any point in the arena, combined with the inherent nature of a

prismatic-prismatic manipulator, suggested that the tag should be capable of translating

the entire length of the arena in both the x- and y- directions (see Fig. 12). Such

prismatic motion is often accomplished mechanically by means of rails, guide ways, or

tracks. In some systems like gantry cranes and 3D printing machines, tracks span the

entire workspace and the end effector remains within the confines of the tracks. In other

prismatic systems like cabinet drawers and telescoping cranes, the end effector extends

beyond the limits of the track. In general, spanning tracks over the entire workspace

seemed to offer the benefits of increased position control and mechanical stability.

Figure 12: Competition Arena

The first decision confronting the design was whether to span tracks over the

entire arena, or to extend the robot beyond its tracks. Translations along the x-direction

were considered first. Although the robot is constrained to begin each competition run

inside the setup area, the setup area spans the entire x-dimension of the arena, so it

seemed sensible to span a track along the entire x-dimension of the arena. However,

translations along the y-direction are different. Since the robot is constrained to begin

each run inside the setup area, and since the setup area is outside the span of the

workspace, it follows that the robot must either extend into the arena or deploy a y-

displacement track system into the arena after the start of the run. While deployment of

a track system may have been a surmountable challenge, it seemed to add a level of

complexity to the system in terms of mechanical design and operation. Considering the

time constraints of the project, it was decided to sacrifice position control and

mechanical stability for simplicity in mechanical design and operation. Thus, it was

decided the robot would extend in the y-dimension of the arena, rather than deploying a

track system.

The specifics of the robot’s y-directional extension were considered next. Likely,

the simplest method for extending the robot may be to translate a single rigid member

relative to the main robot. One can imagine a long stick being moved across the robot to

reach long distances. However, such a solution was not pursued because the rigid

member would need to be at least 2 meters long to reach all points in the arena, while

the setup area is only 1 meter deep. Thus, it might be difficult to fit the rigid member in

the setup area at the start of the run, and the member would likely protrude from the

rear of the setup area during the run.

Possibly the next simplest method for extending the robot outward would be to

translate multiple rigid members relative to the robot, and relative to one another, i.e.,

the robot could extend along the y-direction by telescoping. As the setup area is 1 meter

deep and the arena is 2 meters long, the robot would require a minimum of two

telescoping members and one stationary member to reach every point in the arena.

However, the actuation of one member relative to another member, as well as a second

member relative to the first member, in both forward and reverse directions seemed to

present considerable challenges in terms of mechanical design. Thus, the telescoping

solution was not pursued.

Lastly, extending the robot could be accomplished by translating a member

having properties of both rigidity and flexibility. The member could sufficiently resist

compression, bending, and buckling while extending outward, but exhibit those

behaviors when retracted into the setup area. For example, one can think of a tape

measure. A tape measure can be extended out and support its own weight at some

distances, yet can also be retracted and coiled around a spool inside a compact

enclosure. Such a system offers the benefits of being both compact and requiring

actuation of only one member. This was the method selected for extending the robot in

the y direction.

Once it was determined that extension in the y-direction would be accomplished

by a member possessing both rigidity and flexibility, a further investigation of that

mechanism was in order. As previously mentioned, a tape measure is capable of

exhibiting both rigidity and flexibility by changing its cross sectional shape. The tape can

be thought of as a spring. In fact, one material commonly used to make tape measures

is spring steel. The tape is pre-stressed to form a cupped shape when relaxed, but can

be flattened when rolled against a flat spool. Due to the properties of spring material, the

tape will return to a cupped shape after leaving the spool. A comparison of a cupped

tape cross section versus a flattened tape cross section is shown in Fig. 12, where the

images represent the tape in extension from the robot. It can be seen that, in general,

the cupped cross-sectional area has shifted away from the neutral axis. In other words,

each infinitesimal area of the cross section has a greater y-displacement from the

neutral axis, and thus the squared sum of infinitesimal area centroid y-displacements

has increased. More concisely, the second moment of area, 𝐼, has increased (see the

equation below).

𝐼𝑥𝑥 = ∫ ∫ 𝑦2𝑑𝑥 𝑑𝑦𝐴

Material stress due to bending is related to the inverse of the second moment of

area, 𝐼. Thus, the internal stresses in the tape are less in the cupped shape, and the

material is better able to support the load of its own weight (with some deflection).

Figure 12: Cross Sections and Side Views of Extended Members

Although a tape measure is known to exhibit the desired characteristics of rigid

extension and flexible storage, a brainstorming of alternatives led to a counterpart

foamcore concept. In the foamcore concept, a piece of ½” or 1” thick foamcore is cut

into a beam. Then, transverse slits are cut through the foamcore at a fixed interval along

the length of the beam, leaving the upper skin intact (see Fig. 13). When the foamcore is

rolled on a spool, the slits open, and the foamcore beam bends into an arc. When the

foamcore is extended, the slits close, and the lower portions of the foamcore compress

against one another. The foamcore concept works in a similar manner to the tape (see

Fig. 12). If the foamcore is thick, its second moment of area will be large, its internal

stresses will be low enough to resist crushing or tearing, and the foamcore will stand

horizontally (with some deflection). The foamcore might be actuated by driving the spool

itself, or by driving the foamcore with smooth or toothed rollers. The foamcore concept

seemed like a viable solution, but was not pursued due to lack of familiarity with the

material’s characteristics and concerns about bulkiness.

Fig. 13: Foamcore Beam Concept

Having decided that a tape measure would be used for y-extension, actuation of

the tape was considered next. Brainstorming led to three primary options for actuating

the tape: drive the tape using toothed rollers, drive the spool directly, and drive the tape

using smooth rollers. Driving the tape using toothed rollers offers the benefits of

negligible accumulated slip and tracking error, but may require making numerous

precision cuts in the tape material. Additionally, such cuts may have the undesirable

effect of increasing the tape’s deflection. Driving the spool directly offers the benefits of

negligible accumulated slip and tracking error. However, in order for the system to

function properly, the tape measure would need a smooth outer track upon which to

slide as it is uncoiling from the spool. One can imagine attempting to drive a tape by

rotating a spool. When the spool is rotated backward, the tape is pulled firmly against

the spool, but when the spool is rotated forward, the tape may have a tendency to uncoil

itself from the spool. Thus, rotating the spool forward does not necessarily produce

forward motion of the tape out of the enclosure, but rather, might cause unspooling of

the tape inside the enclosure. The spool itself can be thought of as an inner track to

guide the tape as it is being drawn inside the enclosure, but tape measures, in general,

do not possess an outer track to guide the tape as it is being pushed out of the

enclosure. This is due to the fact that tapes are generally not pushed out of the

enclosure, but pulled out. Attempts were made to create a smooth outer track to allow

for a spool-driven system, but were unsuccessful. Based on observations, it seemed

likely that such an outer track could be successfully developed, if given more time. Thus,

it was decided the tape itself would be driven by smooth rollers. Despite the fact that

smooth rollers were expected to produce slip and tracking errors, they offered simplicity

in terms of mechanical design and fabrication.

A roller system was implemented using an inline skate wheel, bearing, and

adjustable axle, as shown in Fig. 14. The basis for selecting an inline skate wheel as the

driving roller did not result from experimentation or literature, but from intuition. It is

worth noting that alternative solutions with superior performance likely exist.

Nonetheless, intuition seemed to suggest that polyurethane inline skate wheels are

readily available and affordable in the marketplace, possess sufficiently uniform

roundness for this particular application, have a coefficient of friction with smooth

painted surfaces sufficient for this particular application, possess enough compliance to

compensate for misalignment errors during robot fabrication, and have a rounded profile

so as to not flatten the tape as it passes through the rollers.

Figure 14: Inline Skate Wheel Roller

Once a general plan had been established for the robot’s extension in the y-

direction, translation along the x-direction was considered. It was known that a system

was needed to drive and stabilize at least one servo, two rollers, and a tape measure

along the 2 meter length of the arena. Among others, brainstorming of the drive system

led to ideas like a chain and sprocket, timing belt and pulley, and rack and pinion.

Although all three systems seemed equally suitable for driving the robot along the 2

meter span, a search of sizes and pricing suggested that a nylon rack and pinion system

would likely be the most economical solution.

Not only was it important to consider the mechanism for driving the robot’s

translation along the x-direction, but also stabilizing such movements. For the case of

this particular robot, it was expected that control the robot’s Euler angles would be

critical to the robot’s performance due to the distance of the laser from the screen. For

example, with the tag fully retracted, the tag and laser pointer could be approximated as

being at the same location, roughly 3 meters from the projection screen. In such a case,

a 1 degree perturbation in the robot’s yaw angle could produce roughly a 5 centimeter

discrepancy between the tag’s x-location and the projected laser dot’s x-location.

Similarly, with the tag fully extended (2 meters from the robot), a perturbation in yaw

angle could initiate oscillations in the tape. The tape’s oscillations could potentially

continue after the main robot and laser have come to rest, thereby accumulating error

from discrepancies between the tag’s x-location and the projected laser dot’s x-location

until the oscillations dampen out.

The mechanism selected for achieving such stabilization was a track and loaded

roller system. By preloading the rollers against the track, especially with a viscoelastic

material, the robot is equipped with some ability to reject disturbances from such

sources as track irregularities, roller irregularities, friction between the tape and the

ground, and resistance between the tag and air. Similar to passive automobile

suspension systems, which consist of a spring and a damper, viscoelastic materials

naturally exhibit the properties of a spring and a damper. Thus, polyurethane inline

skate wheels were selected for the track rollers due to their perceived market availability

and affordability, uniform roundness, viscoelastic material properties, and rounded

profile. The reason for seeking a rounded profile was to provide the robot with

multidirectional support. As can be seen in Fig. 15, the combination of a rounded profile

roller and a v-grooved track allows for directional control of the contact forces. The

multidirectional, preloaded forces statically load the robot’s body in all degrees of

freedom (y, z, yaw, pitch, and roll) except along the x-direction. These forces, along with

the damping properties of the rollers, act to support the weight of the robot, reduce

impulse forces between the rollers and track that might otherwise occur if the rollers

were not statically loaded, and help to reject disturbances to the system.

Figure 15: Roller and Track Contact Forces

Proposed materials for the track system included aluminum, steel, and wood. In

general, wood is susceptible to warping, especially in conditions of varying temperature

and humidity. Metals, on the other hand, tend to provide smoother, straighter surfaces

and climate stability. However, since welding equipment is made virtually inaccessible to

the members of this institution, design decisions proceeded as if the technology were

nonexistent, and the track was made from plywood. Plywood was selected over

dimensional lumber, in part because it tends to be more resistant to warping than

softwoods, but mostly because appropriate sized scrap pieces of plywood happened to

be available.

After having selected the mechanisms and materials to perform the robot’s x- and

y-translations, a body was needed to tie the components together. Though many

materials, including foamcore, were considered for the robot’s body, plain steel sheet

metal was chosen on the basis of thickness, rigidity, and manufacturability. CAD models

were created for the tape measure, an inline skate roller, and a servo motor, as can be

seen in Fig. 16. The roller was aligned with the center of the tape, and the distance

between the servo and the tape measure was measured. There was little clearance

between the surface of the servo and the tape measure, which suggested use of a thin,

rigid material like sheet metal.

Figure 16: Clearance between Tape Measure and Servo Influences Material Selection

Another design concern was the potential for tracking error caused by

misalignment of the roller. It was anticipated that a high force would be required

between the roller and the tape to minimize tape slip, but that such a force might

inadvertently bend the body of the robot. As can be seen in Fig. 17 where the body of

the robot is represented by a green line, bending of the body can result in misalignment

of the roller, and therefore tracking error of the tape. Thus, rigidity was also an important

criteria for selection of the body material. Additionally, sheet metal was selected

because it was a material with which members of the team were familiar.

Figure 17: Potential for Body Bending to Produce Tracking Errors

Lastly, a guide way was incorporated in the design as a mechanism for limiting

the accumulation of tape tracking error. If the roller were to push the tape to the left or

right, the tape would track to that side until contacting the guide way. Upon contact,

forces exerted on the tape from the guide way would restrict the tape from tracking

further. Said another way, the slot’s edges would act to constrain the transverse motion

of the tape. The guide way was formed by cutting a rectangular slot in the robot body, as

shown in Fig. 18.

Figure 18: Tape Guide way to Limit Accumulation of Tape Tracking Error

More details regarding the specific dimensions, materials, hardware, costs, CAD

files, and manufacturing processes used to make the Prismatic-Prismatic (PP) Electric

Tape Robot can be found in the project construction document [5].

2.3 Design Considerations

2.3.1 Sources of Error

We identified three main potential sources of error for our robot: camera

projection, tape measure angle, and y-axis slip. Of the three errors, we concluded that y-

axis slip error caused by extending and retracting our tag would be the most problematic

for our design. Below is a more in depth description and our thoughts on each of these

errors.

Camera projection error is the error caused by having the tag off of the ground at

a certain height. Fig. 19 shows the physical set up of the arena how we can

conceptualize the projection error.

Figure 19: Arena and physical representation of camera projection error

The camera system used to track the location of our tag takes a 3D space and

maps it to a 2D plane. If the tag is on the ground you see no error since you are

mapping a 2D plane to another 2D plane, however the higher the tag is off of the

ground, the worse this error is. Using trigonometry, we can derive a set of equations that

represent the projection error 𝛥x. Fig. 20 shows for different fixed heights how the error

changes across the arena relative to the camera position. Error increases as distance

from the camera increases and as the height of the tag off of the ground increases.

Figure 20: The magnitude of error that occurs for different heights due to camera

projection at each point in the arena, relative to camera position located at 0,0.

The plots in Fig. 20 helped to show what kind of errors we would get using the

vision systems. With the initial uncertainty of the height of our tag off of the ground, we

decided to make this code [6] more robust and make it usable for our robot. The function

works by first providing a hard coded estimate of where the camera is located in arena

coordinates. Next, it takes in the current waypoint location in the 2D space and provides

a point in 3D space where the tag should be located in order to hit the waypoint directly.

This system ensures accurate transformation from the actual position of our tag to the

vision system.

Tape measure angle error is caused by the potential of our tape to extend at

some angle theta away from our desired path; our desired path is parallel with the laser

which is shown in Fig. 21. This deflection in theta could be caused by misalignment or a

force on the side of the tape measure. To gauge how bad of a problem this would be for

our robot, we applied a force to the tape while it was extended; we measured a

maximum deflection angle 𝜃=10°. Fig. 22 shows error with respect to the distance our

tape is extended and the angle 𝜃. It is easily seen that as both theta and the extended

distance increase, the error is very large.

Figure 21: Tape measure angle error caused by misalignment or force on the side of the

tape measure

Figure 22: Error of the tape measure as it extends out at different angles

This error can be related to the acceleration of the base in x-direction. Using the

first principles, this arrangement could be related to an accelerated pendulum where the

tape acts like a pendulum. Two forces (given air drag is assumed to be zero) acting on

the end of the hanging tape are surface friction (F) and tension force (T) caused by tape.

For an acceleration of “a”, there’s a deflection in tape by an angle theta when the end of

the tape moves with a velocity “v” (as shown in Fig. 23).

Figure 23: Schematic representation of accelerating robot (base) and deflecting tape

This system of forces could be resolved in x and y direction as follows:

X- Direction: 𝑇. 𝑐𝑜𝑠(𝜃) − 𝐹. 𝑠𝑖𝑛(𝜃) = 𝑚.𝑣2

𝐿

Y- Direction:𝑇. 𝑠𝑖𝑛𝜃) + 𝐹. 𝑐𝑜𝑠(𝜃) = 𝑚. 𝑎

where,

F= K.(Normal from ground)= K.m.g ;

K= Coefficient of rolling friction, m=mass of the end (clip) of measuring tape, g=gravitational force constant.

These equations give x-acceleration in terms of deflection angle error 𝜃 as:

𝑎 =𝑣2. 𝑡𝑎𝑛 (𝜃)

𝐿+ 𝐾. 𝑔. 𝑠𝑒𝑐( 𝜃)

Using this equation, for a given value of 𝜃, appropriate value of acceleration could be

obtained.

Y-axis slip error is caused by the slipping of the roller on the tape as it extends or

retracts. This is a problem because if there is a little bit of slippage, it goes unaccounted

for because there is no way to track it. This error is even more dangerous because it

will accumulate throughout the run. There is no way to accurately model y-axis slip error

for our system because it is based solely off physical design and performance of the

system. However, it is easy to conceptualize how to reduce this slippage; we can

increase the friction between the roller and the tap. This could be done by adding a

material with a high friction coefficient or by providing a large upward force on the tape.

2.3.2 Re-evaluations and Modifications

After looking at our potential errors and where our robot could fail, we made

several conclusions. The first, our robot’s tag should remain as close to the ground as

possible. Large errors in both finding the waypoints and laser tracking make us shy

away from having a tag high off the ground. Instead of angling our tape measure up in

the air so that when fully extend it does not hit the ground, we extend our tape out

straight with no angle compensation and allow it to hit the ground. The tag will hit the

ground when the tape is extended at a distance of approximately one meter. Once it hits

the ground, it will slide on a furniture slider that is placed at the end of the tape. After

looking at Fig. 20 and taking into account the low heights of our tag, the camera

projection error seems negligible. Also with this modification, it limits our movement in

the x-direction as the tape will be touching the ground producing friction force. Similar to

Fig. 21, the tape will experience some amount of angular deflection. Since the tape Is

subject to deflect up to 10° and causing a large error, we found it best not to translate in

the x-direction while the end of the tape was touching the ground.

The second conclusion we made is that a guardrail for the tape measure should

be in place to ensure the extension and retraction of the tape was inline with the laser.

Looking at Fig. 22, it is clear that if we can limit angle 𝜃 to less that 1.5°, the error will be

reduced for most of the points in the arena. But during testing, it was observed that even

with the guardrail in place, the tape still wobbled while translating in the x-direction as it

touched the ground. This leaves us with only one option of retracting the tape and tag in

the y-direction, before each x-direction movement from one tag to another. With this

being said, we no longer have to take into the x-acceleration error since we will be

moving with our tag fully retracted. Overall, this modification simplifies the movement of

our robot.

The last conclusion we made was that we would not be able to track the y-

position of our tag accurately if there is slip between the roller and the tape. If we tried to

match the tag position with the encoder in the motor and slip occurred, the encoder

value would not match up with tag position. Over time, this error would accumulate and

the tag would not be able to hit the waypoints and potentially go out of bounds. To

compensate for this, our plan is to fully extend our tag to the edge of the arena and then

retract it back to its original location based off of a manual time calibration. This

calibration will help to alleviate the uncertainties associated with the tape extension.

2.4 Motion Algorithm

2.4.1 Robot

Inside of Robot.py there are two implementations of a robot included. The first

class named Robot was designed under the assumption that we would be using MX-64

motors. These motors would be populated by the Cluster command in the logical.py

module and passed into the Robot instance. The original implementation of this robot

was designed with guiding idea that the rack which our robot rode on could be broken

up into integer N rotation chunks and then its location could be fine tuned using the no

deadzone encoder in the MX-64 motor controller. This was chosen as due to the

diameter of our pinion being 3.18 cm which led to the full rotation x-translation shown

below:

𝑑𝑒𝑛𝑐𝑜𝑑𝑒𝑟 ∗ 𝜋 = 9.99 𝑐𝑚

This nicely segmented the the arena into 20 equal chunks. Movement was

facilitated by the moveNRotationsForward and moveNRotationsBackward functions

inside the robot. These would move the robot approximately 10cm to the right or left

respectively and update the robots Xrotations variable by the amount of rotations

moved. Fine movement was handled by the move2EncoderPos and the

move2EncoderPosBack functions which when given an encoder position would move

the robot to within 1° or 0.028 of the desired location. Once the use of our two MX-64

modules was made impossible due to failure, development of this class was halted.

The second class in Robot.py named EXRobot was the class used for our robot

once we had made the switch to EX-106 motor modules and the one used in final

competetion. The deadzone in these modules was large and thus could not be used

reliably with the code developed for the MX-64 modules. The decision was made to

instead configure the EX-106 modules for multi-turn mode which reported encoder

positions from -13000 to 390000 in units of hundredths of a degree. Given this fact, an

incrementPosRegister was developed which, during movement would increment the

absPos instance variable to keep track of absolute position of the robot on the rack.

Next a function called calcTargetPos was developed to calculate the

corresponding absPos needed to line the robot tag with the next waypoint tag. This

value was stored in the targetPos member variable. This function along with checkPast

were the two functions that facilitated the logic of movement in the autopilot. The

function checkPast would return false unless absPos was greater or less than the

targetPos for forward and backward movement respectively.

The last base EXRobot function was the unfurl function. This facilitated the

expelling of the tape measure and its subsequent retraction. It based its timing using the

time library in Python, which was deemed sufficient as the only alternative was to

implement another sensor for control.

2.4.2 Manual Controller

The slider and buttons of the Korg MIDI controller made it easy to create a

manual controller that offered our team the ability to test our mechanical platform easily.

Our implementation is contatined in TagStreamer.py and used a joyApp subclass to

handle MIDI events; specifically, the slider was used to adjust the amount of torque

delivered by the motors. With the slider pushed all of the way up; it would deliver max

torque and when pushed all the way down, it would deliver no torque. The other 254

values that the slider could output were mapped linearly between these two bounds.

The buttons in the first MIDI slot controlled the xtranslation motor, with up being

movement in the positive x-direction and down being the negative x-direction, and the

second controlled the tape unfurling motor in a similar fashion.

During mechanical debugging, frequent event queue overflows were being

reported by TagStreamer.py. This pushed development of a keyboard based controller,

with the arrow keys being mapped to movement and a fixed torque, was implemented

which solved this problem.

2.4.3 Automated Controller

While mechanical characterization and verification was ongoing work begun on

the implementation of our automated controller. This was controlled first by setting a

zero point on the rack where all absPos measurements would be referenced from. For

this task, a zero point on the extreme left of the rack was chosen, and once the “\” was

pressed absPos logging began in the EXRobot instance being used.

Once set the user would move to the first waypoint using the controls in the

EXRobotApp class and press the “enter” key. This would first pull the waypoint back

based on a time that would be found during the calibration period. After the waypoint

was pulled back the EXRobotApp would ignore user input and call the EXRobot class’s

autoPilot class.

The initial autoPilot logic was the one diagramed in Fig. 24 which worked in

getting the robot within 10 cm of the desired waypoint. To help increase accuracy the

following calibration factor was multiplied to the X location of the next waypoint to

calibrate out the difference in our rack size and the real arena size:

𝐶𝑎𝑙𝐹𝑎𝑐𝑡𝑜𝑟 = 𝑑𝑖𝑠𝑡𝑋−𝐶𝑜𝑟𝑛𝑒𝑟 𝑇𝑎𝑔𝑠/𝑙𝑒𝑛𝑔𝑡ℎ𝑅𝑎𝑐𝑘

This decreased our X-location error to below 2 cm which given an ideal vision

system would have made this a complete controller. However because our robots

waypoint hung as high as 5 cm above the ground the projection error due to the camera

could still lead to missed tags. To rectify this a “wiggle” function was added to the

EXRobot class which changed the logical flow chart of automated movement as shown

in Fig. 25. 5 cm was chosen for the the wiggle distance as it roughly the size of the robot

tag and the max projection error we modeled was 2.5 cm. This was also the distance

used by the wiggle function in our final model.

Figure 24: Initial Controller Flowchart

Figure 25: Final Controller Flowchart

Wherever set_torque commands were sent to the two motors a value of .5 input.

This was decided because we verified that this was a torque high enough to ensure

movement both directions without being too fast for the camera system.

3. Expected Performance

3.1 Modeling Software

The modeling code for our robot was stored in simTagStreamer.py, robotSim.py,

robotFunctions.py and plotter.py. simTagStreamer.py holds both the manual controls

for the robot along with the mechanism by which the robots postion is reported to

waypointServer.py in the TestRobot class. The manual control was implemented with

the left and right arrow keys handling negative and positive x-axis translation and the up

and down arrow keys handling positive and negative y-axis translation. Two other

controls were also implemented. The first being a save function which is controlled by

the ‘s’ key and saves a log of the laser and tag position for plotting. The other control is

the autopilot controlled by the ‘a’ key. Once pressed the robot assumes full control of its

motions.

The error modeling is implemented in the robotFuncitons.py which includes

functions that handle the three sources of error: the tape being expelled at an angle, the

error induced by the camera and slip on the tape and rack and pinion. The function

tapeAngleError returns an array of the x-axis and y-Axis error induced by the measuring

tape being expelled at an angle relative to the laser pointer. These values are governed

by the following equations:

𝑥𝑒𝑟𝑟𝑜𝑟 = 𝑡𝑎𝑝𝑒𝐿𝑒𝑛𝑔𝑡ℎ ∗ 𝑠𝑖𝑛(𝜃𝑒𝑟𝑟𝑜𝑟)

𝑦𝑒𝑟𝑟𝑜𝑟 = 𝑡𝑎𝑝𝑒𝐿𝑒𝑛𝑔𝑡ℎ − 𝑡𝑎𝑝𝑒𝐿𝑒𝑛𝑔𝑡ℎ ∗ 𝑐𝑜𝑠(𝜃𝑒𝑟𝑟𝑜𝑟)

The function cameraProjectionError implements the error caused by the camera

not being positioned at the same x and y location of our robot. This error is implemented

as shown in the previous section and has a controllable height parameter referring to

the height of our robot’s tag off the ground.

Finally the slipError function takes in a given movement distance and returns a

movement distance that is subject to some slip in the actuation. We modeled slip as a

simple coefficient referring to the percentage of motor rotation that has no effect on

movement. As an example a movement distance of 1m and a slipCoef of 0.1 would be

returned as 99cm

The functional logic for our robot is held in robotSim.py, specifically in the

ppRobot class. This includes the horizTranslate and vertTranslate functions which

facilitate a horizontal or vertical translation respectively based on some input distance. A

save function is also implemented which pickles (a form of data serialization) a log of

laser location and waypoint location data for later plotting. Finally the autopilot and

wiggle functions handle autonomous motion using the same program flow as shown in

Fig. 25.

To get a better idea of robot performance relative to the task a plotting tool,

plotter.py, was also developed which unpickles the laser and waypoint location saved in

robotSim.py. After unpickling, it plots the values saved. Fig. 26 shows an example of a

run without any errors being modeled. Fig. 27 is an example of a worst case run: the

measuring tape came out at a 10° angle and the tag was 10 cm off the ground.

Obviously in the ideal case we saw no error, in the worst case an RMS error of 18.2

coordinates was calculated, which was deemed satisfactory for a worst case value.

Before P-Day a full successful run was recorded [7].

Figure 26: Ideal Case

Figure 27: Worst case

3.2 Calibration and Verification

3.2.1 Laser Calibration

In order to verify that our robot’s laser system, we used a long exposure camera.

During the test, we moved our robot from one end of the track to the other end and then

back to the original position, thus covering the full range of x-translation. Fig. 28 shows

that our laser tracks a horizontal line during the test. This is exactly what we expect with

our robot since our laser only moves along the x-axis. This laser tracking provides us

with a visual representation of what the camera system will see during P-Day.

Figure 28: Long Exposure Picture of Real Time Laser Tracking

3.2.2 Tape Angle Validation

In testing our measuring tape before its installation inside of the housing we

measured a maximum deflection angle of 10 degrees. This would lead to a maximum

tag to laser x-location error of 35 cm. This was deemed unacceptable so in the final

mechanical design a small output window 3 cms after the output of the measuring tape

was added to help keep the tape straight. Fig. 29 shows two images of the tape being

extended from the same location and an overlay showing the output angle. The output

angle is clearly smaller than the maximum of 10 degrees allowed for in our model. We

concluded that this error is negligible.

Figure 29: Tape Angle Validation

(The red line represents the initial axis of the measuring tape before extending it to a

length of 2 meters. After full extension, we can see that the red line deviates slightly

from the center of measuring tape. We found this error be negligible.)

3.2.3 X-Movement Slip Verification

Due to its rack and pinion design it was assumed before testing that the X-

translation would be very resistant to slip. This was validated using Fig. 30 below that

shows two images of the robot moving 5 rotations to the right and back taken from the

same position. No slip was observed.

Figure 30: x-translation Slip Validation

The red box represents the initial position of our tag. After moving 5 rotations and

coming back to the original position, we can see that the error is minimal.

3.2.4 Tape Extension Calibration

To ensure our robot would not be disqualified we calibrated the tape unfurling by

measuring the time it took to fully extend the tape and the time it took to completely

detract it. This measurement was required in both directions because we noticed after

repeated usage that the retracting slip was larger than the extending. In the end, values

of 10.5 seconds for unfurling and 12 seconds for retracting were decided upon.

3.2.5 X-Translation Calibration

The X-length of the arena could be variable and our rack is of constant length.

We established a scale factor by using the following expression:

(x-length of the arena)/(x-length of our rack)

This factor helps us to achieve the correct x-position on our rack in relation to the arena

coordinates.

4. Results

4.1 P-Day Results

Figure 31: P-Day results of laser tracking the x-position of robot for each team

On P-Day, each team was allowed two attempts to complete the course. For the

second attempt, the arena was modified and one waypoint was moved. Many teams

had issues on the first run and decided to run their robots manually to ensure course

completion. However, during a manual run, scores did not count toward the competition.

Fig. 31 shows each teams results during the second run of the competition.

Performance was ranked by the RMSE value calculated from the laser data and x-

position of our robot. Table 1 shows the ranking for each team during P-Day. Green

Team was the winner completing the course autonomously with a RMS value of 895.

The only other team to complete the task autonomously was Purple Team. It should be

noted that both of these teams used additional sensors to help with autonomous control.

All other teams successfully completed the task manually.

Ranking Team RMS

1 Green 895

2 Purple 1109

3 Blue 475

4 Maize 776

5 Red(R#3) 1418

Table 1: P-day Competition Rankings.

(Note: Teams highlighted in red were not eligible to win the competition due to only

completing the course manually.)

4.2 Observations

● Maize Team: Trial 1 ended in failure. After successfully moving to the first

waypoint, Maize Team’s robot malfunctioned and went out of bounds after

switching to autonomous mode. Trial two started much more promising, hitting

the second waypoint autonomously. However, after correctly translating to the

correct x-position of the third waypoint and extending the tag, the waypoint was

not picked up on the extension or retraction. At this point, the arm was extending

further than it was retracting; inevitably causing the tag to go out of bounds.

Before the tag could go out of bounds, Maize Team took manual control of the

robot and moved the tag to the final waypoint. On the way to the final waypoint,

the slider on the bottom of the tape got caught on the arena felt, causing the tag

to fly off. The run was deemed completed.

● Green Team: In trial 1, Green Team successfully navigated to the second

waypoint autonomously. However, an error in their code prevented them from

finishing the course autonomously and they were forced to manually finish the

run. During trial 2, they successfully completed the course autonomously. The

laser looked a little jumpy during the run, but based on Fig. 30 it was tracking the

x-position fairly well.

● Red Team: Started off having trouble with the calibration of their robot. During

trial 1, Red team was disqualified because the laser tracking system ended up

pointing in the -y-direction. For trial 2, Professor asked the team to finish a

manual run before attempting autonomous run. The team was able to

successfully complete a manual run and further, tried an autonomous run in trial

3 which was completed as a manual run.

● Blue Team: After an initial problem where their robot would not stop driving while

headed to the first waypoint, Blue Team completed trial 1 manually. Trial 2 for

Blue team was perhaps one of the biggest disappointments of the competition.

After successful autonomous navigation to the third waypoint and turning to hit

the final waypoint, Blue Team’s robot moved away from the last waypoint. They

were then forced to disconnect and manually drive their robot to final waypoint.

● Purple Team: Did not attempt an autonomous run in trial 1 Purple team did

complete the manual movement to each waypoint with ease. During the second

trial, Purple team had problems finding the first waypoint autonomously. After a

little bit of waiting and searching, the robot made it and then very quickly finished

the rest of the course, all autonomously.

5. Discussion

5.1 Discussion of Other Teams

Blue Team: Blue Team utilized a five section robot that used 3 servos and 2 continuous

rotation motors attached to wheels. Using the second to end servos on both sides the

robot could pick up the wheels which were used for translation. The center servo

allowed for rotation around a central base allowing the robot to make turns without

changing the position of the laser. This novel movement style was clearly very

successful leading to the lowest RMS error for Blue team amongst any team. On the

other hand perhaps the complicated mechanism proved difficult to control which lead to

the team not being able to complete an autonomous run.

Red Team: Red Team utilized a simple buggy style robot with a rotatable “mast” which

allowed them to decouple the rotation of the robot and the laser. This proved to be a

tough controls challenge. The Red Team scored highest RMS error in both of their trials.

This robot would have benefited considerably from another form of sensing such as the

ones implemented by Purple and Green as measuring rotations of a robot using only

odometry from the wheels according to works of Borenstein et al. [3].

Purple Team: The “Dorito” fared well in the task after some late game modifications. It

utilized a three omniwheel translation platform which allowed the base to move without

changing its angle relative to the positive-y direction. On top of that a vision system was

developed which improved the robots ability to compensate for minor rotation changes.

Their simple mechanical platform led to a completed autonomous run and the vision and

omniwheel aided laser position managed to score a fourth place error score. Future

refinements to the vision system could probably have cut this error but given the felt

surface of the challenge area its unlikely that the omniwheels could have performed

better.

Green Team: The Green team built a simply two wheel buggy platform with an elevated

laser platform which was controlled by a magnetometer. The simple buggy mechanism

proved to be easy to control leading to this team registering one of the two fully

autonomous runs. The feedback loop developed for the laser also scored a 3rd place

error score. This made the Green Team the overall champions. Further optimizations to

the laser control could have likely lowered the error score even more, also the robot

operated more slowly than it needed to and could have cut its run time significantly.

5.2 Reflection on Current Design

5.2.1 Mechanical Design

The mechanical system generally performed as anticipated, though some

subsystems exceeded expectations. For example, the fully extended tape measure was

not as susceptible to oscillations from x-directional accelerations as anticipated.

Similarly, the tape and marker were less affected by aerodynamic disturbances than

expected.

Conversely, some subsystems did not meet expectations. For example, tracking

error proved to be a greater challenge than anticipated. The tape was driven from the

robot at a slight yaw angle and forced to rub along the edges of the guide way slot.

Eventually, such rubbing distorted the edges of the tape and caused bouncing of the tag

as the tape extended from the robot. On the day of the competition, the roller system

was adjusted to reduce misalignment. In general, the system seemed more sensitive to

tracking error than expected.

Similarly, the accumulation of slip error between the roller and tape proved more

detrimental than anticipated. Though slip error was expected, it was thought its effects

could be mitigated through calibration to achieve acceptable system performance. In the

end, that was found to not be true. It is worth noting, however, that slip seemed to

increase on the day of the competition. It is also worth noting that the aforementioned

roller adjustments were made in the direction of decreasing pressure between rollers.

Therefore, one cause of tape slip could likely have been the adjustment of the rollers on

competition day.

5.2.2 Software

Our robot’s software performance held up in line with our model on two accounts,

namely that camera projection did not hurt autonomous performance and that angle

error would not be a problem. On the other hand we modeled tape slip insufficiently.

During early testing the tape was deemed a robust mechanical system, as the robot was

used this began to change.

The control software’s major strength is its relative simplicity. The autonomous

code is based off one simple loop which has only one branch, the wiggle system. This

allowed for quick prototyping and changes could be implemented quickly. On top of that

the simplicity kept the codebase small.

The performance of the autonomous controller allowed the robot to navigate to

two waypoints totally autonomously and the logic and proved the logic of the controller.

The robot was slow but finished the task in 2:20 which was well within the bounds of the

task. During the manual positioning portion of the run our manual controller was running

into an issue where the EX-106 servos were timing out while reading the position

register. This issue was likely due to the length of the CAT-5 cables used and wasn’t

worth the time it would have taken to mitigate.

5.3 Future Modifications

5.3.1 Mechanical Design

With proper design, it is believed many of the robot’s components could have

been built from less expensive, easier to manufacture materials like foamcore.

Fabrication of the rack and pinion system from foamcore, for example, could have

resulted in an overall cost savings of approximately 35 percent.

Similarly, the incorporation of modularity in the design could have helped save

time in development. On one occasion during the development process, both servos

needed replacement. Without modularity in the design, such servo replacement required

a near complete dismantling and reassembly of the robot.

Lastly, a more careful design of the tape guide way system might have helped

improve the robot’s overall performance. If the edges of the guide way slot had been

rounded or made from a smoother, softer material like plastic, they might not have worn

away the edges of the tape as quickly, and the system might have been more robust to

tracking errors. Similarly, applying greater pressure to the rollers might have helped

reduce slip between the rollers and tape. In that same regard, a more sophisticated

adjustment system might have helped to properly adjust roller pressure and tracking.

5.3.2 Software

The largest flaw in the software design for this robot stems from an inability to

compensate for fatigue on mechanical parts and the assumption that external sensors

were not a worthwhile addition to the design. The two teams who developed the best

autonomous platforms both relied heavily on sensing. The green team used a feedback

loop and a magnetometer to keep the laser aligned with the robot and the purple team

implemented a full vision system to again help with alignment. The benefit of sensing

systems and feedback loops in general is immunity to plant changes.

The most significant plant change our robot experienced was a large change in

performance of the measuring tape while being expelled and retracted. During testing it

was decided that a dead reckoning style time based controller would be able to control

the waypoint extending without problem but as more trials were put onto the tape it

became clear that this trend wouldn’t continue. By P-Day the performance of the tape

was erratic and hard to model which led to our robots near disqualification.

Had some sensing system been implemented to alert the robot controller when

the waypoint was fully extending, this issue could have been avoided. Something as

simple as a slack servo with a string attaching the servo horn to the end of the tape

could have accomplished this. While the tape was extending the string would have

pulled the servo horn up changing the encoder angle until some critical angle was

reached. After reaching this angle the tape could have been retracted without risking

disqualification.

Another improvement that could have been implemented was the inclusion of x-

axis location sensors. A simple IR distance sensor could have lessened our reliance on

servo odometry and made the x-axis location finding trivial. The obvious downside to

these solutions is the time required for implementation, but given another chance, they

would definitely improve autonomous performance.

6. References

[1] Project 1 Task Description:

https://wiki.eecs.umich.edu/hrb/index.php/File:2014Project1Task.docx

[2] Electric tape measure video (used as inspiration for the robot design):

http://www.youtube.com/watch?v=8QYbqkR2BgY

[3] Borenstein, J., & Feng, L. (1996). Measurement and Correction of Systematic

Odometry Errors in Mobile Robots. IEEE Transactions on Robotics and Automation,

12(5). Retrieved from

https://wiki.eecs.umich.edu/global/data/hrb/images/a/a6/Borenstein-1996.pdf

[4] Kucuk, S., & Bingul, Z. (n.d.). Robot Kinematics: Forward and Inverse Kinematics. In Robot

Kinematics.

[5] Chakmakian, E., Lundeen, K., Morizio, D., Sharma, D. (2014, Nov. 3). Construction,

Calibration & Validation, Project 1, Maize Team. Retrieved from https://wiki.

eecs.umich.edu/hrb/index.php/File:Fall2014_P1_Maize_ConstCalibValidDoc.pdf

[6] Error Modeling Code: mainly for camera projection

https://drive.google.com/open?id=0B65jDZ3dAk83aE5Ja0dYSHhEdms&authuser=0

[7] Practice run of our robot finishing the track autonomously:

https://www.youtube.com/watch?v=Q3oJIg4bsaY

7. Appendix

● Modeling Code

https://drive.google.com/a/umich.edu/folderview?id=0B65jDZ3dAk83ZEhfdjFtVG5

2LXc&usp=drive_web

● Robot Code

https://drive.google.com/a/umich.edu/folderview?id=0B65jDZ3dAk83dHZnMmJjT

GxRZkk&usp=drive_web

● Calibration Pictues

https://drive.google.com/a/umich.edu/folderview?id=0B65jDZ3dAk83RzFrTm96a

21URGs&usp=drive_web

● CAD (Computer Aided Design) Models

https://umich.box.com/s/0uy0m3k2qe48x2exn8l0

● Construction Photos

https://umich.box.com/s/aifpky8s7iufhl9y4yax

● Brainstorming Documents

https://umich.box.com/s/evehzociv3j8gdbztwr3