|
CS 154 - Lab Projects
Marissa Anderson . Matt Livianu . Eric Wu
Week 3 - Feb 17, 2003
Design Modifications
This week we refined the lego design even more, to make Flamebot travel in a more or less straight line and follow walls. The front bump sensor was inefficient, so we changed to a design with two bump sensors on the front, so we can follow walls more efficiently. The rear caster wheel's wobble and bumping into walls would shift the balance of the heavy handyboard, causing the 'bot to go in interesting directions. We think we've fixed that behavior by modifying the caster wheel and duct-taping the board to its base.
Unfortunately, we discovered (after an hour of trying to test it) that our first DC fan was broken, so we were unable to test with all our components. We have fried two 5V fans thusfar, only to find that the 12V fan we
thought was broken, actually functions just fine!
We discovered that the light sensors are wildly inaccurate and require quite a bit of calibration. Flamebot would often miss the candle completely and stop itself in a random patch of light. Sometimes it would find the candle, then lose it and stop itself, wondering what to do next. When we programmed it to try re-finding the candle once it lost its threshold, it started backing away from the candle rather than moving to extinguish it!
The light sensors are mounted on the front, allowing Flamebot to "home in" on the candle once it sees it. We found, as did Mayol, Tordoff and Murray, that "raising the sensor away from the body reduces the degree of occlusion" (3726). However, we couldn't raise the sensors too high, as they could break or tip Flamebot. If Flamebot thinks it has found light, then it tries to home in on it.
It realizes, usually, after some time moving towards the bright spot,
that it has not found the candle. Usually, the bright spot is a reflection
off of the table or from the overhead lights. When it realizes it has been
tricked, Flamebot continues its search for the holy candle.
Code Details
The robot is controlled by 2 processes running in parallel, runAround and
homeIn. runAround wanders the maze attempting to follow walls until
either of the light sensors finds an unusually bright spot. The average
brightness is determined by sampling the light sensors 10 times over the
course of the first 2 seconds it runs in the maze. Bright spots are areas
where the light sensors register readings under 0.8 times the average
brightness, where lower readings indicate brighter light.
homeIn works by trying to keep the candle centered between the two light
sensors, which both point forward about an inch apart. First, the robot
turns right until it thinks the left sensor is pointed directly at the
candle. Then, it turns left until the right sensor is pointed at the
candle. After measuring the time it takes to line up the right sensor
with the candle, it then turns right again for half that amount of time,
theoretically leaving the candle directly between the sensors. Flamebot
then advances a short amount and attempts to repeat the process until the
brightness level on both sensors is high enough that the fan can be
turned on. If the fan fails to extinguish the flame, then the robot
advances a small amount again and repeats the process. Occasionally in
the process of advancing towards the candle, the robot manages to turn far
enough away that both sensors or no longer below the threshold level
indicating the presence of the candle. In this case, the robot backs up
and looks for the candle again. If it fails to find it, then control
returns to the runAround function.
Problems
The environment is perhaps a bit more hostile than we had anticipated.
The crack between the tables and the wall occasionally cause Flamebot to
get hopelessly stuck. More interestingly, one of the walls of the maze is
reflective. If Flamebot has a dark enough threshold setting, then the
reflection of the candle on that wall occasionally is taken to be the real
thing.
The castor wheel still pulls to one direction or the other when we want it
to go straight. Over long distances, this isn't a big issue - after all,
since we're bumping into walls to navigate anyway, the difference between
bumping into a wall every foot or every 2 feet is pretty minor. However,
when trying to to minor adjustments, such as in the homeIn function when
advancing on the candle, the castor wheel becomes a major source of error.
Making turns of under 5 degrees with any degree of accuracy is pretty much
impossible with the castor wheel needing to turn entirely around. We've
made adjustments for this problem by using different speeds on the wheels
when advancing in order to turn slightly, in hopes of nullifying the tilt
from the castor wheel. From a distance, it looks just like it works, even
though the wheel's not right. From a bit closer, the other problems with
the wheels come into play.
We have finally scrapped the castor wheel, opting instead for the end of
a thin rod (3 mm in diameter) which drags along the surface. This
potentially could cause problems if the rod gets stuck in a small crack,
but flameBot now travels straight when both motors are powered equally and
homeIn works much more efficiently, especially in right and left
adjustments.
In retrospect, our gear ratio is too low, but it's too late now to really
rebuild the chassis. In the process of strengthening the chassis so the
robot doesn't fall apart every time it hits a wall, we've made it so that
minor adjustments are pretty much impossible. We still don't generate
enough torque to be able to make minor movements. The minimum speed on
Flamebot is about 10 (out of 100). Speeds lower than 10 aren't guaranteed
to turn the wheels at all, which is problematic when you're calculating
movement based on how long the motors run. Unfortunately, at speeds of 10
and more, short turns have a tendency to skid when they stop. The
corrective action for this was pretty much to use a nasty hack that
attempts to correct for the skidding that we expect to happen.
The fan has proven to be problematic through this entire project. The
first fan couldn't handle the 9.6V coming from the HandyBoard, and the
newer fan which can is also big enough to make the robot extremely
top-heavy. Weights need to be added to the rear of the chassis to keep
the robot from tipping forward each time it goes in reverse. This extra
weight probably messes up a lot of the nasty hacks used in the homeIn
function to keep some semblance of accuracy. Also, with the fan mounted
directly above the light sensors, we've had some trouble getting the angle
right for the candle to end up at the focus of both the light sensors and
the fan.
Finally, the light sensors aren't the most reliable in the world. Our
original plan to find the candle by minimizing the sum of the sensors (or
maximizing the brightness) failed because the two sensors give out wildly
different readings for the same light level. Also, the flickering candle
isn't the best target for these sensors, since the homeIn function counts
on a light source being consistently the same brightness, which clearly
isn't true. We've tried to make up for this by inching forward towards
the light slowly and trying to correct the orientation of the robot at
each step, as well as backing up when the robot turns too far.
It is also of utmost importance to remember that hot wax is liquid and
pours easily on to delicate fingers.
|
Testing the fan, but alas, it did not work.
|
|
Flamebot ready for action!
|
|
Isn't it cute.
|
|
We released it carefully into its new habitat.
|
|
It, of course, decided to miss the candle right away. Doh!
|
|
Finally we got the robot to find the candle, but part of its behavior made it back away from the candle too much, so it seemed to be "afraid" of the light.
|
|
|