Let's Make Robots!

Rosalinda - 3 servo hexapod

noise0's picture
walk and avoid obstacles
Weight: 
144 grams

 

  • Lenght: 10.5 cm
  • Width: 7.5 cm
  • Height: 8 cm
  • Weight: 144 g


Components

  • 1x Picaxe 18X
  • 4x AAA 800mAh NiMh cell
  • 3x Hitec HS-55 servo
  • 1x Sharp GP2D120 IR Sensor

 





















 


Schmatics

schema_1.jpg



Source code

'pin
symbol pinServoL=2
symbol pinServoR=3
symbol pinServoC=1
symbol pinAdcIr=0
symbol pinOutLed=6

'servopos
symbol servoLF=175
symbol servoLB=100
symbol servoLN=145

symbol servoRF=125
symbol servoRB=175
symbol servoRN=150

symbol servoCR=170
symbol servoCL=140
symbol servoCN=157

symbol servoT=150
symbol warn=60

'brain
symbol irReadM=b13
symbol irRead=b12
symbol prefSide=bit0
symbol leftSide=0
symbol rightSide=1

'init brain
prefSide=leftSide

'init robot
servo pinServoL, servoLN
servo pinServoR, servoRN
servo pinServoC, servoCN
high pinOutLed
pause 2000

'shakedown
for b2=0 to 20
servo pinServoC, servoCL:pause 50
low pinOutLed
servo pinServoC, servoCR:pause 50
high pinOutLed
next

'init robot
servo pinServoL, servoLN
servo pinServoR, servoRN
servo pinServoC, servoCN
high pinOutLed
pause 200

 

walk_forward:'walk forwart till obsta
servopos pinServoC,servoCR:pause servoT
servopos pinServoR,servoRF:pause servoT
do
servopos pinServoC,servoCL:pause servoT 'right legs on the ground
servopos pinServoR,servoRB: servopos pinServoL,servoLF: pause servoT 'left forward - right backward
servopos pinServoC,servoCR:pause servoT 'left legs on the ground
servopos pinServoR,servoRF: servopos pinServoL,servoLB: pause servoT 'right forward - left backward
'chk ir
readADC pinAdcIr,irReadM
if irReadM>warn then
low pinOutLed
if prefSide=leftSide then
goto try_left
else
goto try_right
end if
else
high pinOutLed
end if
loop
end

 

 

try_left:'step left then compare readings
servopos pinServoC,servoCL:pause servoT
servopos pinServoL,servoLF:pause servoT
for b2=0 to 2
servopos pinServoC,servoCR:pause servoT 'left legs on the ground
servopos pinServoR,servoRF: servopos pinServoL,servoLF: pause servoT 'left forward - right forward
servopos pinServoC,servoCL:pause servoT 'right legs on the ground
servopos pinServoR,servoRB: servopos pinServoL,servoLB: pause servoT 'left backward - right backward
next
readADC pinAdcIr,irRead
if irRead<warn then
prefSide=leftSide
goto walk_forward'clear -> ok go forward
else
if irRead<irReadM then
goto go_left 'left is better -> go left at will
else
goto go_right 'right is better -> go right at will
end if
end if
end

 

 

go_left:'rotate left till clear
servopos pinServoC,servoCL:pause servoT
servopos pinServoL,servoLF:pause servoT
do
servopos pinServoC,servoCR:pause servoT 'left legs on the ground
servopos pinServoR,servoRF: servopos pinServoL,servoLF: pause servoT 'left forward - right forward
servopos pinServoC,servoCL:pause servoT 'right legs on the ground
servopos pinServoR,servoRB: servopos pinServoL,servoLB: pause servoT 'left backward - right backward
readADC pinAdcIr,irRead
if irRead<warn then
prefSide=leftSide
goto walk_forward'clear-> ok goforward
end if
loop
end

 

 

try_right:'step right then compare readings
servopos pinServoC,servoCR:pause servoT
servopos pinServoL,servoRF:pause servoT
for b2=0 to 2
servopos pinServoC,servoCL:pause servoT 'right legs on the ground
servopos pinServoR,servoRF: servopos pinServoL,servoLF: pause servoT 'left forward - right forward
servopos pinServoC,servoCR:pause servoT 'left legs on the ground
servopos pinServoR,servoRB: servopos pinServoL,servoLB: pause servoT 'left backward - right backward
next
readADC pinAdcIr,irRead
if irRead<warn then
prefSide=rightSide
goto walk_forward'clear-> ok goforward
else
if irRead<irReadM then
goto go_right 'right is better -> go right at will
else
goto go_left 'left is better -> go left at will
end if
end if
end

 

 

go_right:'rotate right till clear
servopos pinServoC,servoCR:pause servoT
servopos pinServoL,servoRF:pause servoT
do
servopos pinServoC,servoCL:pause servoT 'right legs on the ground
servopos pinServoR,servoRF: servopos pinServoL,servoLF: pause servoT 'left forward - right forward
servopos pinServoC,servoCR:pause servoT 'left legs on the ground
servopos pinServoR,servoRB: servopos pinServoL,servoLB: pause servoT 'left backward - right backward
readADC pinAdcIr,irRead
if irRead<warn then
prefSide=rightSide
goto walk_forward'clear-> ok goforward
end if
loop
end

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

pretty cool :D

patrickmccabe's picture

 been studying it, but i cant figure out how it goes backwards. I know the servos dont move 180 the way you have them setup. So what is it doing to move backwards? is it actually moving the servo backwards or is the servo going to the same position it does when walking forward? i do notice both legs move at the same time when reversing. 

Prettybird's picture
Very impressive. Simple small and compact. Great mechnical engineering feat.
Very cool !
Hi sir. can you pls indicate the pin numbers for the servos, led, and the sensor. Thanx..
andyQ's picture
So cute...
Nicolas's picture
this is awesome:)
droidbuilder's picture
Very nice! Reminds me of another hexapod posted here awhile ago. LOL! :-)
noise0's picture
heheehheh thank you for inspiration... :D
Very nice!