Let's Make Robots!

Super Brilliant Avoid Obstacle Strategies - Open Question

I have built a Bot with Arduino as MCU and wish to give it a life of its own.

Has anyone Created a "Super Brilliant" Strategy for avoiding obstacles ?.

So far my bot does this (rather On/Off control) :-

(1) When it detects an object Right it turns Left until the coast is clear and carries on with its original direction.

(2) When it detects an object Left it turns Right until coast is clear and carries on with its original direction.

(3) When it detects an object "Front on" it makes a 180° turn and carries on with its original direction.

This works fine however its a very basic solution - i am sure someone has a much more ingenious method. 

The Bot you see in the Video is still "Under the Cover" - soon to be posted.....

..... and yes a Custom Cardboard Spiderman is steering.


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
http://letsmakerobots.com/node/25 - Best basic principle I ever made :)

Brill link,

It got me thinking along the lines of ......if there is something left or right then "it could be of Passing Interest - lets stop and investigate"

If you see something straight on (danger zone) then either "stop and fight" (shoot a lazer) or take evasive action (run for it).

With Bot08M that I made around christmas time, he would seem curious and investigate things. It turned out this was a fault in my code that was causing him to turn towards an object instead of away. When you watch the videos, the first video with the faulty code was better than the good code. He had a curiosity counter that stopped him travelling in a straight line too long.

By having a counter that counts program loops and working off different bits you can get some interesting behaviour happening as you have bits turning on or off at different rates. I now use the 2 least significant bits for a random turn in cul de sac situations. Other bits can be used to show boredom or curiosity after say 128 program loops depending on your clock speed.

I like the angry idea.

Another way to avoid obstacles is not to move at all.

When an antelope sees a lion - it freezes - "does not move at all" - not even the wink of the eye.

Then when by luck or good fortune the lion does not see it, and passes by - the Antelope begins shaking its whole body for a couple of minutes too "de-stress".

Moral :- If Your bot stops and shakes for a few minutes its liable to "Burn-Out" its LM7805 regulator  :-)

Though coming to think about it - this "shake" idea would be add quite an interesting meaningfull "Soul" response

as u know this basic strategy may be prone to failure when the robot encounter a cul-de-sac...

 bacause it may start to bounce left - right - left - right.. and never exit

i have found a solution that avoid this problem and make the robot more "biological"

simplay i handle a varibale which i call "angry" 

every time the robot is free to run / do not see obstable  the angry is decremented of a certain value  

every time the robot have obstacle insight and can not run freely,  the angry is incremented 

this variable represent the frustration level of the robot...

this variable can be used in many ways

for example:

when angry reach a certain threshold make a 180 turn


when angry reach a certain threshold start a 360 precise scan to determine the best direction


it can be used as multiplier (prameter)  of the normal algorithm: if left object is detected then turn right or an amout proportional to angry, in this way when the robot is stuk in a corner, it start to oscillate left and right with increasing amplitude till it leave the corner at his back


that's funny. I thought i was being original when I programmed that in one of my bots. I had one throw a tantrum if it made 3 turns without going anywhere. It would spin in circles. Once the kids figured that out, that became its primary function.

Yes the cul-de-sac syndrome i well know - thats what i admired about your Tank1 bot - he could easily find his way out .

The Idea of "Weighting" the parameters appeals to me and gives it a ----- lets explore some more of this environment --- type feel - very progressive. 

The Angry mode is also a good strategy. very Rebelistic......cool

The 360° scan in angry mode will be tryed in next program session - by my initial strategy i was only thinking On/Off or run in any direction - with the 360° scan before - its a better senario of lets check for clear space first.....

nice one..

Just throw in a few random decisions. For fun only. It does not make your bot smarter or look more ingenious. But is is interesting.

In case (3)  for example: which direction do you want your bot to turn? Let rand() decide. And as soon as it turned a little bit, let it decide if (1) or (2) is applicable again.

Another way to advance your strategy (AFTER you've mastered all the stupid strategies first), would be to introduce proportion into it. When the bot sees something far away in the corner of its eye, let it steer away from that, just a little bit. With obstacles getting closer, let the correction get bigger. Voilá: proportionality.

This implies that sensors and actuators all can deal with more than just two values. More than just on and off, 1 and zero.

And after all that, consider if you really want your creature to steer away from objects. Browse around for examples of bots that (randomly or otherwise) decide to seek them out at times. Voilá: behaviour.

The rand() idea was in the back of my mind - but more like after 1min "do something completly different" (good old montyP) this would help in extream cornered conditions. What you suggest is more fitting and more in the soul dirrection i am aiming.

Yes this bot is based on On/Off control at present - proportional control with some form of intergration will follow.

I found a problemo when using infrared bar type sensors ..... there is a min detect level (3cm or so) so if the bot goes to close then it is effectively "Blind" ..... so you have to detect and alter course sooner rather than later.

Thanks for your input.