A better navigation method
DiablodeMorte
Posts: 238
Greetings,
I have recently built a rather large robot that I eventually want to roam my house while I am away. The robot, so far, is constructed using a psuedo-erector's set and the motors are controlled via simply on-off motor control. I can "upgrade" the motor controllers to some parallax HB-25's that I have if I need to. My problem is this: Becuase I just wanted to get the robot moving quickly, the way it moves is very very simple: it waits for a command via serial and then executes that command(Forward,Backward,Left,Right,Stop). If there is no command within a 1 second window the unit stops. What I am looking for is a better navigation method. With the current: go forward for 1 second, stop, go left 1 second, stop method it is way way to jerky to be useful and is also not very accurate. Can anybody suggest a better way to naviate?I'd like to not have to put lines on my floor or set up beacons. For starters I would like to simply smooth out the movement and then maybe add some collision detection and then maybe blob tracking. I've included a picture of my robot for scale.
P.S. For the moment, the robot is actually remote controlled via skype and a webcamera.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Current Projects:
Robot Control Via Skype API - Dev Stage(50% Complete) - Total(25%)
Robot Localization Via Xbee's - Research Stage
IR Tracking with Propeller - Research Stage
I have recently built a rather large robot that I eventually want to roam my house while I am away. The robot, so far, is constructed using a psuedo-erector's set and the motors are controlled via simply on-off motor control. I can "upgrade" the motor controllers to some parallax HB-25's that I have if I need to. My problem is this: Becuase I just wanted to get the robot moving quickly, the way it moves is very very simple: it waits for a command via serial and then executes that command(Forward,Backward,Left,Right,Stop). If there is no command within a 1 second window the unit stops. What I am looking for is a better navigation method. With the current: go forward for 1 second, stop, go left 1 second, stop method it is way way to jerky to be useful and is also not very accurate. Can anybody suggest a better way to naviate?I'd like to not have to put lines on my floor or set up beacons. For starters I would like to simply smooth out the movement and then maybe add some collision detection and then maybe blob tracking. I've included a picture of my robot for scale.
P.S. For the moment, the robot is actually remote controlled via skype and a webcamera.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Current Projects:
Robot Control Via Skype API - Dev Stage(50% Complete) - Total(25%)
Robot Localization Via Xbee's - Research Stage
IR Tracking with Propeller - Research Stage
Comments
The key to your stated goal, having your bot wander around your home, is to add enough sensors for your bot to adequately sense it's environment and make decisions accordingly. The sensors you choose/require will solely dictate the next several abstraction layers. with the sensors in place you can then build code like look around and then turn to the most open area, go straight, follow a wall. So the next abstraction layer would be follow path, roam, guard etc.
they layers build on one another so you need to add your sensors and get them working at the basic abstraction layer and then build more complex layers until your sending commands or your bot is choosing commands at the highest layer, not the simple forward, back. I know your well accomplished so this might be stuff you already know, but it's something I've learned along the way so take from it what you will.
ok off of my soap box,
I have a large bot, started with basic commands (controlling relays), have upgraded to HB25's and added sensors. and I'm awaiting parts to add more, my best working roaming code is basically this:
look around with a ping
turn to the most open direction and then go forward
monitor the ping if it detects something less than 16 inches away stop and start over.
more goes on than this but this is the basics of what my current code does.
once I get off my lazy butt and get a little more free time I'm going to add encoders, I think this is the ultimate way to have a bot wonder a house and or be controlled.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
"A complex design is the sign of an inferior designer." - Jamie Hyneman, Myth Buster
DGSwaner
I considered building a robot with several different perimeters. The bumper would be the least distant, IR sensors would provide more intermediate navigation, and ultrasound would reach out to look for pathways. Also, it is important to have downward IR sensors to make sure the robot doesn't wander off a curb or down a stairwell.
The ultrasound could be mounted on a turret to reduce number of sensors. The robot could occasionally stop and pan the area with ultrasound, then continue to navagate.
All that will get your robot into wandering about an interior environment; but to find its way back home, it will need to map out where it has been. I am a bit stumped when it comes to mapping all that data and suspect you would need a Linux based SBC to co-process the robot's movements into some sort of grid.
Encoders would certainly be a significant source of raw data. But, you also might map the direction and intensity of light sources to provide funamental bearings. A magnetic compass is not really useful in an environment with steel desks, table legs and chairs.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
PLEASE CONSIDER the following:
Do you want a quickly operational black box solution or the knowledge included therein?······