An autonomous robot built for UBC Engineering Physics' annual competition: it follows tape, reads infrared beacons, grabs "agents" with a crane and claw, and ziplines them home, all as a finite state machine on an Arduino-based TINAH board.
$ render article.mdx
Search glyn.dev
Search posts, research, projects and tags, or jump to a page.
CALVIN was built by three of us for the University of British Columbia
Engineering Physics robot competition. The course changes every year; ours
asked the robot to follow a taped path, stop at alarmed gates and read an
infrared beacon, circle a platform to collect toys we called "agents," and
finally load them into a bag and send it down a zipline back to the start. All
of it autonomous, with no remote control.
CALVIN runs as a finite state machine on a TINAH board, an Arduino variant with
an onboard LCD and tuning knobs. Each task on the course is a state, and the
robot moves through them in order:
Line Follow reads the front reflectance sensors to stay on the black tape.
Check Alarm stops at a gate and compares two infrared readings to decide when to move on.
Circle Agents loops the platform until it hits a stop line.
Pickup Agent drives the crane, arm, and claw to lift a toy off its platform.
Find Zipline and Attach Zipline carry the bag of agents to the wire and let go to finish the course.
The beacons emitted either a 1 kHz or a 10 kHz infrared sine wave, and CALVIN
had to tell them apart from a distance and at an angle. Instead of chasing an
absolute threshold, we built two analog band-pass filters, one tuned to each
frequency, and simply compared their outputs. When the robot turned or backed
away both signals dropped together, but the correct one stayed proportionally
larger, so the comparison held up even as the absolute voltages changed.
The chassis, crane, arm, and claw were laser-cut from hardboard and acrylic and
actuated by servos, with elastic-band mounts so a failed servo could be swapped
without cutting anything apart. Two custom H-bridges (zener diodes and MOSFETs,
with PWM speed control) drove the wheel motors at around 16.5 volts, well past
what the microcontroller could source on its own.