"Frogger" Walking Robot
Brian Reaney, Julia Noble

First video: robot walking at high motor speed. Successful except that uneven motor power causes it to turn right.
Second video: robot "walking backwards" (reverse motor speed). Unsuccessful.
Third video: robot walking at low motor speed. Unsuccessful.

We synchronized the motors on our robot so that it would leap forward rather than trot, kind of like a frog. This only ended up working at medium to high motor speeds (above 500 power) and it didn't work for walking backward. This kind of makes sense since it was optimized for a dynamic gait that is more similar to running (you don't have the same gait when you run backward). One problem with our robot is that the motor on the left was more powerful than the motor on the right, so when it leaps forward it tends to turn right (when we ran the motors at the same power with no load the left one spun faster). The idea for the leg mechanism came from a particular kind of 6-bar linkage we learned about in machine design that has linear motion along part of its cycle and then lifts up for the other part. We figured this would be ideal for walking motion, although it ended up requiring the motors to run fast enough that the robot jumped in order to actually get the foot to lift. Alternating the left and right sides might have worked better if our motors were able to supply equal power, but keeping each side in phase helped the motors maintain the same rate of rotation.
We made many adjustments during the construction and testing of this robot, playing around with the lengths of mechanical links, experimenting with different "feet," testing different gait patterns, adjusting the position of the brick to control center of mass. If we were to keep iterating our design or build another walking robot, there are clearly many more details we could consider and adjust.

CODE:

!/usr/bin/env python3

def main():

ev3 = Device('this')

Connect the Large motor to port A

speed = -300

motor = ev3.LargeMotor('outA')

motor2 = ev3.LargeMotor('outD')

a = motor.position

print(a)

b = motor2.position

print(b)

motor.run_to_abs_pos(position_sp=(a-b))

motor.run_forever(speed_sp=speed)

motor2.run_forever(speed_sp=speed)

sleep(60)

motor.stop()

motor2.stop()

if name == 'main':

main()