QuadBot - The Walking Robot
For this assignment, we were instructed to build a robot that walks. The robot could use any walking mechanism we wished, so long as it did not roll. Once constructed, we needed to demonstrate that our robot could move both forwards and backwards at variable speed.
To accomplish the objectives above, we decided to go with a six-legged robot, of which four legs would move. The four mobile legs were placed in the for corners of the robot, and moved by the rotation of a gear to which they were fixed by a pin (see images below). This pin introduced the necessary cyclical motion for walking, while another pin, halfway down the leg, connected the leg to a stationary part of the robot via a linkage. This linkage constrained the motion of the leg so that its end could only move through an elliptical path, much like a foot on an animal. We built four of these legs, two front legs and two back legs. Each set of legs was actuated by one motor.
Initially, our robot only had these four legs, but when it came time to make the robot walk, we found it merely undulated in a semi-disturbing way, but could not go anywhere. We tried changing offsets between front and back legs, and between both legs in front or back, though nothing could make the robot travel. Finally, we decided to add a peg leg in the front, to help left the moving legs off the ground during their recovery swing. This turned out to be the key to achieving forward motion, so we added a second peg in the back to perform the same function for the back pair of legs. Our hexapod robot was complete.
The programming of this robot was exceedingly simple, involving only a command to move in one direction or the other at a predetermined speed. We accomplished this by creating a speed variable entitled “MotorSpeed,” and assigned it a value -100 to 100. By passing this variable to both motor drive commands, we were easily able to drive our robot forwards and backwards. Changing speed was only a matter of changing the MotorSpeed variable.
Testing this robot revealed problems with our design. Initially, it highlighted the need to give the robot something to sit on during its recovery swing, leading us to add the peg legs. Later testing became revealed that our robot did not increase its speed linearly with increases in the MotorSpeed variable. Since we were using lego pieces as legs, the robot lacked traction on the ground, and increasing MotorSpeed led to decreased contact time with the ground during each step cycle, creating more slippage. We found that increasing the motor speed paradoxically slowed down our robot’s travel speed. In order to fix this, we did two things. First, we adjusted the speeds at which we would drive the robot. Above 60% of the possible motor output, the robot could not maintain a gait that was conducive to forward motion. Too much undesired flexion in the gear shafts and resistance in the linkage system led to changes in the forward/backward offset, as one motor was slowed when the other was not. Driving the motors below 60% reduced this phenomenon a great deal, making it manageable. The second thing we did was add rubber bands to each of the legs, giving the robot a miniscule amount of traction. This greatly aided the robot’s forward motion, preventing backsliding almost altogether.
With these changes in place, our robot was able to drive both forwards and backwards at the changing speed (still limited to 60%) successfully.