Tuxbot Mark I
This is my entry to the 2000 Trinity College Home Fire Fighting Robot Contest. It's main design features are:
- It runs uClinux on a uCsimm. This is overkill for the
control program I was running, but it made development really easy.
For instance, I can download a new flash image to the board in a few
seconds over an ethernet link, and I can run test code immediately
after it's compiled by nfs-mounting my working directory! I made two
modifications to the kernel - one to increase the system timer rate
from 10ms to 2ms, and I added a simple driver to count interrupts from
the flame sensor. Here's my kernel changes: uclinux.diff.gz, and my driver: mecflame.h mecflame.c.
- The very common two-wheel differential steering/drive technique
for motion. Basically there is one wheel on each side of the robot,
and a skidplate in the front and back. To go forward, both motors are
drivin forward, and to turn they are driven in opposite directions.
- Three Sharp GP2D02 distance sensors - one on the front, one on the
left, and another on the right. Tuxbot uses these to navigate around
the maze, and to sense distance to the candle.
- Hamamatsu UVTron flame
sensor & controller board. This is an extremely sensitive flame
sensor that I highly recommend. Tuxbot only had to sit in the doorway
of a room to know if the flame was anywhere in the room. I wrote a
kernel driver for this and wired the output of the sensor to an
interrupt line. The driver counts the number of ticks in a second and
maintains the count from the previous second that I can read in my
- R/C Servo to lower a "lid" over the flame sensor tube. The flame
sensor has a very wide detection angle, which is good for seeing if
the flame is in the room at all, but not for narrowing in on the flame
to put it out. To narrow the angle, a servo lowers a 35mm film
canister with a slit in it over the UVTron tube to narrow the
detection angle. Here's the code I use to drive the servo from the
PWM hardware in the uCsimm: servo.h servo.c.
- Vector X2 compass module. Tuxbot uses this to navigate around the
maze. This was used to tell when (due to the poor drive system)
Tuxbot had veered off course. It was also used in tracking down the
flame - Tuxbot spins & scans for the flame, and remembers the compass
reading where it sensed the highest reading from the flame sensor.
- All-LEGO mechanical
construction. No LEGO's were hurt in the making of this robot - all
circuit boards are just wedged in between LEGO's. The drive motors
are the geared-down motors from the Mindstorms Robotics Invention
- Powered by a battery from a 12V Black-and-Decker cordless drill.
- Automotive windshield-washer motor & spray nozzle from a 'personal
mister' to put out the candle.
- All the rest of my source code can be found here: tuxbot.tar.gz or tuxbot.zip. The code that runs the robot for the contest is in 'robot6.c'.
Here's some things I plan on doing different next year. Some are ideas I picked up from other contestants, and some are just things that went wrong with Tuxbot Mark I:
- Tighter drive train & mechanical structure. A lot of the problems I
had were due to the sloppy drivetrain of Tuxbot Mark I - a more
accurate drivetrain (less wobbly & perhaps with encoders) would help a
lot. I still don't want to do a total dead reckoning robot, though.
Tuxbot Mark I, being made of LEGO's, was very wobbly.
- Multiple flame sensors. If Tuxbot had two sensors to detect the
flame, it could simultaneously sense direction & distance to flame.
The current design depends on the flame sensor and distance sensor
lining up, which is not a sure thing.
- Pre-planned mechanical layout. Tuxbot Mark I evolved over 6
months, and didn't have a coherent mechanical design from the start.
This lead to such difficulties as difficult to remove boards, having
to disassemble half the robot to replace the battery, etc.
- No wires will be directly soldered to boards - all connections
will be via connectors. I started out with this goal this year, but
got lazy in the final stretch to the contest.
- Test more with the candle in the corners of the rooms. I tested
Tuxbot mainly with the candle in the middle of the room, but all the
candle placements at the contest were with the candle near the corner
of a room. I think this confused my hunt-and-extinguish algorithm.
Here's some pictures of Tuxbot Mark I:
Tuxbot in his natural environment - my test maze. I made my maze from
1/2" plywood. I cheated by making my outer walls less than 13" high
(so I could get all the outer walls from one 4'x8' sheet of plywood)
and by not painting my maze, since Tuxbot Mark I doesn't care about
the color of things.
Closeup of Tuxbot Mark I - left side. You can see one of the
GP2D02 distance sensors in the lower left, and you can almost see the
flame sensor tube. The controller boards are in the rear of the robot
(right side of picture).
Closeup of Tuxbot Mark I - rear. A better view of the
controller board. Below the controller board is the windshield washer
pump, and to the right of it is the water reservoir.
Closeup of Tuxbot mark I - top left. You can see the Hamamatsu driver
board and the compass board. The black thing directly on top of the
Hamamatsu board is the servo, and the black thing above that is the
35mm film canister that gets lowered over the flame sensor tube.
Tuxbot Mark I's main board. This is the uCsimm 'Gardener' base board
with a bunch of electronics hand-wired onto it. I programmed the
Lattice part to do PWM motor control; to the left of it is a 556 &
assorted parts that generate an input clock to the lattice part. To
the right of it are some debug LED's, and to the right of that is a
74ALS08 (quad dual-input AND gate) that I use to do some level
shifting from 5v logic to the 3.3v uCsimm. In the bottom right hand
corner of the board is a pushbutton wired to an input on the uCsimm
that is pressed to start Tuxbot looking for the candle.
Tuxbot Mark I's motor controller & power board. This board has a 7805
regulator that generates 5v from the 12v battery. This is passed to
the uCgardener board, where there is a 3.3v regulator for the uCsimm.
This board also has a relay to drive the windshield washer pump, and
the LMD18200 h-bridges that drive the two main motors.
maintained by Matt Cross - firstname.lastname@example.org