Let's Make Robots!

Small Quadruped Robot

Navigate around via ultrasound
AttachmentSize
Quadruped_Files.zip178.55 KB
Quadruped_Files_2.zip317.85 KB

UPDATE : October 23, 2012
Apparently some guys got trouble opening the CorelDraw files attached before. So I exported those files into various extension : cmx (to be opened in any CorelDraw version), pdf & eps (for Adobe Illustrator). They're attached as "Quadruped Files 2.zip"

UPDATE : October 15, 2012
Attached the arduino code, CorelDraw file for circuit board & laser cut acrylic.
Sorry for not attached these file before. The code is lame and very unprofessional, so you might want to use your own code.. :(


Hi, I'm new to LMR as a member. But I've been browsing around LMR to learn robotics.

First, sorry for my bad English.

I finished making my quadruped robot a couple weeks ago. It was my first robotic project using microcontroller. In fact, it was my first microcontroller project. Unfortunately it wasn't well documented during the making process since I didn't plan to publish it before. :( So here is what I can collect from scattered file in my PC..

 

 

It's a wandering quadruped robot with only one ultrasound sensor. Therefore I programmed the robot to rotate left then right (or opposite, randomly) when there's obstacle in front. Then the robot compare which direction has further distance to walk by.

 

 

 

I didn't use inverse kinematics for legs movement. Why? Because I hadn't learn it yet! :P See, I'm bad in mathematics.. :(
I don't know what kind of gait I used, but I have ever read somewhere that it called "crawl" gait (correct me if I'm wrong).
The microcontroller is ATmega328 with arduino bootloader. I'm very lucky there is this PCB maker in my town willing to make PCB without minimum order. So I ordered this custom arduino compatible board with extension pins for servos.
 

 

 

 

 

 

 

I use 12x HXT900 micro servo (3 DOF each leg). Body frame & legs built from laser cut acrylic board, some screw, bolt & spacer. I designed it with Corel Draw software, which I'm more expert using it than using microcontroller cause I'm a graphic designer. :P 
I haven't measure its weight yet, but dimensions are about 180 mm length & width, 140 mm height. 

 

 

So, there it is..
Just ask it if you have questions. Any suggesstions, critics or comments are apreciated. 
Thank you..

Comment viewing options

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

Thanks, I'll try it..

But try to ask someone skilled and experienced, because I'm not very good at programming honestly.

I won't need to if your code works in my bot :D
I'll try it tomorrow as soon as I return from my work..

I believe that jitter is caused by repeatedly sending same value to servo. It could be dealth with by this trick, which is lame :D or you can change your code to send servo positions only once.

Hi legwinskij .. 
I'm sorry, I've been busy with my work. 
Finally I have time to put your code in my bot. Unfortunately the servos don't have enough friction between their gears. 
Hence the bot wasn't able to stand. I think the code works in your bot because your bots construction make it possible. Your bot legs more verticaly designed that make the bot pretty much can handle its own weight without relying to the servos gears friction too much.

Nice and clean construction. Just a little shaky and that too probably because you are using micro servos :)

Thanks sanc04..

And it's not a little shaky, it's shaky very much.. :(
I've been struggling to find the solution. Someone told me to replace the arduino with picaxe.
If there any chance you know about this matter??

In my opinion, the problem is that while moving it needs to move some servos slowly and some at normal speeds. To overcome this problem, you must have written discrete values of the servo (slow ones) positions in your code and used small time delays inbetween these position values. This means that the servos (slow ones) are not moving 'continuously' but in steps. You need to work on lowering the servo speeds yet making them move continuously. I am more of a picaxe guy so i don't know if there is any straight command in arduino for doing this but i am sure other members at LMR can help you do this. Search google or post a forum on LMR for it

The thing is they're still jitter while in steady position (not moving). I guess I have to do more research about this problem.
But, thank you for your information sanc04, I really appreciate it..

Well I don't know wether if I do it correctly, but to avoid that jitter I use a little trick. I use Servo.attach(pin) <move commands here> and then Servo.detach().

to be more specific :

connect();    
     lifter[0].write(defaultLifter[0]+93+30);
     lifter[2].write(defaultLifter[2]+90+30);
     dataHandle();
     delay(walkDelay);
     rotator[1].write(defaultRotator[1]-50-30);
     rotator[3].write(defaultRotator[3]-50-30);
     dataHandle();
     delay(walkDelay);
     rotator[0].write(defaultRotator[0]+50+30);
     rotator[2].write(defaultRotator[2]+50+30);
     dataHandle();
     delay(walkDelay);
     lifter[0].write(defaultLifter[0]+93);
     lifter[2].write(defaultLifter[2]+90);
     dataHandle();
     delay(walkDelay);
     lifter[1].write(defaultLifter[1]-110-30);
     lifter[3].write(defaultLifter[3]-95-30);
     dataHandle();
     delay(walkDelay);
     rotator[0].write(defaultRotator[0]+50-30);
     rotator[2].write(defaultRotator[2]+50-30);
     dataHandle();
     delay(walkDelay);
     rotator[1].write(defaultRotator[1]-50+30);
     rotator[3].write(defaultRotator[3]-50+30);
     dataHandle();
     delay(walkDelay);
     lifter[1].write(defaultLifter[1]-110);
     lifter[3].write(defaultLifter[3]-95);
     dataHandle();
     delay(walkDelay);
disconnect();

this code makes it turn left and yes this is from bracerbot :D

and then i use two functions (voids)

void connect()
{
 rotator[0].attach(10);
 rotator[1].attach(8);
 rotator[2].attach(6);
 rotator[3].attach(3);
 lifter[0].attach(9);
 lifter[1].attach(7);
 lifter[2].attach(5);
 lifter[3].attach(4);
}

void disconnect()
{
 rotator[0].detach();
 rotator[1].detach();
 rotator[2].detach();
 rotator[3].detach();
 lifter[0].detach();
 lifter[1].detach();
 lifter[2].detach();
 lifter[3].detach();
}