Let's Make Robots!

How to build your first robot - Part II - navigation


Your browser is not able to display this multimedia content.

Your browser is not able to display this multimedia content.

clean_navigation.BAS6.17 KB

This is Part II of How to build your first robot - tutorial.

you can just take the cool navigation-code in here and have fun with it, or you can follow the whole instruction, or the parts that you like. I try to make it as general and open as possible.

Here is part III of this tutorial - I recomend that you browse this as well!


You have made a robot, something like this: How to build your first robot

You have read my deep thoughts on how to move on with the programming "Don't program your robot.. Teach it!", and you have made tricks with your robot, messed around with it, had some fun and is ready to move on.

Perhaps you have tried out this little trick of seeing what your robot sees.

You have seen on the video of "Making Skiwalker", and seen on the pictures of "Yellow Drum Machine" (the pics in the bottom) - that you do not need much for materials to make a robot; Melt-glue, double sided tape, sticks, and you are go!

If so, this part II should be a breeze! You can make this robot in 45 minutes, no sweat.


First, let's make the robot on the picture above. Try to duplicate the main parts, that is the main task here.

It shuld not need much explantion, it is excaxtly like the one from How to build your first robot - only differences:

  • Instead of Sharp sensor, I use SRF05
  • The servo is a smaller one, and a fast one - you can get these in any size and speed
  • The gearing on the motors is lower, so I have a faster robot (though it is not a speed-king, lol)
  • instead of just taping it all together, I have used 3 sticks to form some sort of a "chassis"

The closer you get to this, the easier it will be to follow the rest, but of course you can just do it your way, with whatever parts you have etc.

In the first tutorial I wrote that you could make some fancy code for the robot.

I now present you for some code that I have made, it is what is used on the video. It is an example, there are thousands and millions of ways to evolve, you should do it your way. This is just to try to open your eyes, and share what I have learned after countless hours of trial and error.

Try to alter some of the numbers to tune in to your setup, and read the guidelines in the code. That way you can get a robot like the one on the video, and we are going to use that as a base for Part III in this tutorial...

Find the attached code in the top of the post.

.. And the screwdriver-trick on the video?

Well.. Look for places where the code says

servo Servopin,head

and add, just after it

servo 1,head

If you are adding another servo on pin 1.

Think about what to attach instead of the screwdriver?

Something with an LED on? And insert some on/off in the code for the LED? Or a fan? or.. :D


Stay tuned. This bot is getting more enhancements now..

And if some of the comments below does not make sense, please understand that I am changing this over time, so the comments may have been for an earlier text here :)

Thanks, and do post what robots you make, to inspire back. Thank you.

/ Fritsl

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
I added some sharp sensors (in the "add extra stuff here" section and quickly found why you are looping back to the driveahead code... It seems that once the sharps were triggered (I was using them for side sensors) the robot would be stuck in a loop and just keep sliding the direction it was triggered!! The "goto driveahead" loopie-loop is to stop any turns from locking on. I added a gosub afterturn to my sharp sensor code and they worked great! So there you go. To be honest, yes I am working on some new autodrive code for walter but I am not cutting a pasting your stuff. I was just sorta "reverse engineering" it to see if what you did is any better than what I got. What I found is that we pretty much wrote the same code with just a few tiny differences. I'll check out the other code you suggest -- I am trying to write not only some very smooth code, but also trying to be a gentle as I can on my motor driver so I am going through as much drive code as I can to find all the good parts! --Thanks dude.

Hey Frits,

I am reworking your code here and noticed something I don't understand... This is in the "Tester" chunk of the code.

gosub puls
if range < Danger and head > ForwardLeft and head < ForwardRight then
gosub PHASEA2
end if

if range > ClearPathAhead and head > ForwardRight and head <= 225 then
gosub PHASEA2
end if

if range > ClearPathAhead and head < ForwardLeft and head >= 75 then
gosub PHASEA2
end if

it seems like no matter what the sonar is sending back, you are still heading back to the Driveahead subroutine (by way of afterturn). I.e. if range is < danger and the head is basically centered, you still go fwd. Or if you have "clearpathahead" and the head is to either side you still go fwd. After that you go back to phasea2 which makes sense, I just don't get the fwd part. Did you include this just so you could add a "totalhalt" if you wanted? Explain this if you would.

You evil person!

You are asking me to justify / explain code I made one year ago!?

Heck. This take s a second reply.

Hey, Chris,

Just a note before I answer your question:

Have you seen how the bot @ http://letsmakerobots.com/node/5751 is navigating?

I think this is way more walter-style! Check the moves, the personality in the slowing down, reversing etc..

You are having such nice PWM-options, so even though I use servos, you should be able to copy what I did.

Also, I know it's an omni wheeler that I made, but 2 wheels and a tail would be the same, code-wise, I only work with 2 "axles".

That code is much smaller, more recent, the next thing.. You just need 2 sensors - static - to make it work. And with your wide front, also one to clear the front.. which is walters head!

With the old code you are on here, you would need to shake he's head so violently, not nice!


http://letsmakerobots.com/node/5751 to control the basics, and he's head to add in with extra is what I'd go for!

The answer:

Hey Chris, I have looked at the code and your question.

Yes, aparently it is strange. Yes, perhaps it is a leftover from some debugging. And yes, sometimes I make strange code, because I think it is fun to make something that is not really logic at first sight, but when diving into it, it is pure logic. Sort of like easter eggs.

Weather this one is a bug, a debuging option, or an easter egg, I really cannot tell, as my brain only allows me to look at old stuff in a very limited time - it simply halts and start inventing new, so I cannot go deeper into it, sorry.

Have you seen the new omni-code? It is cool!

Frits-Is it possible to fry just the pins on a chip? I cant get pins 1-3 to work at all ive built a very similar robot to yours and used your exact code with slight modifications but i cant even get a servo to work on Digi out pins 1-3?

It may be possible, but I have never done it. And I have always ben very rude to my chips. They never took any offence, as far as I knw, a Picaxe is very hard to fry!

I am pretty sure you will find the error somewhere else, check one thing at a time, make sure it works..

uhm frits...u used 6v as a power supply right?4 AA batteries?  doesnt that fry the picaxe and srf05? what if i was to add 2 LEDs and 1 superbright LED..im kinda scared i might fry the board..


I use rechargables, they are not 1.5V, perhaps 1.2V, so it's close to 5V, all is cool with Picaxe & SRF :)

On LED's I usually insert one 330 Ohm resistor.. but apart from that I have no clue, I burn them all the time, or they are dim because I feed them too litle, don't ask me about electronics ;)

The red and yellow LEDs are used to slide on only. It might be cool to connect them to have them light up as the robot moves, nut they have no use other than as a slide.