top of page

Personal Project: Caterpillar Robot

This project was inspired by the Carnegie Mellon annual Mobot competition. I intended to create a robot that mimicked animal locomotion. I settled on caterpillar/inchworms, as I was fascinated by the simple yet effective method of lifting and planting their body. I believed this would be useful for traversing diverse, uneven terrain.

I determined 5 servos to be sufficiently flexible for the locomotive tail, with 4 servos rotating along the x-axis to determine the shape of the tail, and 1 servo rotating in the y-axis to swing the tail for turning. The body and tail are constructed out of 3D printed components I designed in Solidworks.

​

To reduce friction of the head against the ground, I designed two spring-assisted “nub” feet under the feet; to increase the friction of the tail, I stuck a section of tennis racket grip tape unto the end.

​

The circuitry is an adapted, extended version of the Bluetooth Nerf Turret’s circuitry. The challenge of having an Arduino that uses 7-12V power and servos that use 4.8-6V persists. My solution from the previous project is to use two AA battery packs, one with 4 batteries (6V) and the other with 2 batteries (3V); the servos will draw power only from the 4-pack, while the Arduino draws from both packs. This necessitated that I use two switches to turn the robot on or off.

Circuit_bb.png

The component of this project I am most proud of is the programming, which I call the Pose System. In this system, each motion, such as forward movement or turning, is divided into significant “poses”, sets of angles for each servo. A challenge is ensuring that each servo arrives at their respective pose angles at the same time; otherwise, the movement cycle would be disrupted. This is overcome by having each servo rotate only an increment toward their target pose angle; this increment is determined by dividing the difference between the previous pose angle and the target pose angle with a common denominator (15 degrees); servos that must travel further to their next target pose have larger increments.

​

Once a pose is complete, the loop moves onto the next pose. Poses for all movements are stored in a long switch structure that assigns each pose an integer value. Each movement type is provided a range of integers. For example, turning right uses poses 4 through 7.

This system will be very useful for programming any robot that have multiple servos performing several different complex movements. I plan on using it for my next project.

​

I also developed a simple Android app to send Bluetooth commands to the robot. The app features 5 buttons (forward, backward, right, left, stop) that send a 1 byte number to the robot, allowing it to switch to that respective pose set. For example, pressing the Right button sends the number 9 to the robot, causing it to switch to poses 4 to 7.

​

For future improvement, I would find a material with great friction at the end of the tail. I would also try to distribute the battery weight across multiple tail sections and have a method of organizing the messy wires.

bottom of page