Kbot - now ROSBOT (bad with names)
Well after a long time away from this hobby I am back again.. I am trying to create a little hobby robot that will hopefully eventually be controlled by voice commands and possibly be able to navigate around my house and possibly pick up small objects (dog toys) based on recognition and move them to a specific location (back to toy box), in an effort to keep the floor clear.. This little guy will be outfitted with a Kinect sensor and using the very powerful ROS(robot operating system) and Arduino it will hopefully be able to leveage SLAM navigation to accomplish these tasks.. Anyway the project is pretty infant at this point.. Step 1 is just to learn a bit about the ROS operating system and possibly make it teleoperated..
Step 1 is accomplished.. I was finally able after ALOT of reading and playing able to get the ps3 controller connected into ROS and sending joystick commands.. I was also able to finally program up the arduino to subscribe to those commands and from that create speed and rotation..Next step will be to get the arduino code setup to talk to the Navigation Stack in ROS and then add in the Kinect sensor.. I will keep you posted, so please keep checking back..
Step 2 ... is accomplished now.. I again after a ton of reading and playing have finally got the ROS navigation stack up and running on this unit with the Kinect sensor.. It is really neat to set it up for SLAM and watch the screen while it drives around my living room and builds a map of the place.. I am out of town for a few days but I will do a video when I am back and post it.. There have been a few fairly major hurdles along the way..
1. Although the Arduino is my very favorite microcontroller I have had a lot of challenges with the amount and frequency of data required by the ROS stack.. I would be very open to suggestions of ways around this whether it is another type of controller for motor drivers or encoders or maybe a better way to send larger amounts of data faster back to the PC???
2. Encoder error and Kinect sensor data.. I am not sure yet if I will be able to completely solve this.. Bascially I had several problems with the type of wheel I was using(wheel slip) and also the fact that the kinect sensor is blind below about 0.2 meters.. Definitely for the latter a laser range finder would be 1000 times better but I don't believe that will be in my budget anytime soon.. If anyone knows of a cheaper alternative or some DIY thing that they have done by all means please pass along the info..
Step 3 .. IN PROGRESS.. I think I now have to go back and clean up several things. I ordered new wheels with soft rubber to keep them from slipping and a omni wheel for the back so it rotates smoother.. Then I am going to try and increase the resolution of the encoders since I really have too large of motors for this project but don't want to redo.. This will help keep ROS updated better for the pose of the robot. Once that is done I will play with some of the settings in ROS a bit to tune the whole thing and let you know what I have run into at that point..
***Step 3 continued*** Ok I did most of what was listed above.. Definitely the soft wheels help alot with odometry.. I actually made so many changes that I can't even remember them all at this point but I will say.. Odometry is a huge part, also when using the navigation stack for the first time you will need to make sure that the map size and resolution is kept LOW to assist with processing power on a standard laptop.. Once I figured out those big hurdles and found a couple of KEY bugs in my arduino sketch and syntax issues in ROS then it was up and running and actually I am really pleased with the performance..
Anyway check out the video and let me know what you think.. Sorry for the crappy lighting I always seem to do these late in the evening with my iphone and they turn out fairly crappy.. I guess I need a videographer.. hehehe..
One other quick note on the arduino stuff.. I purchased a new mega 2560 and a short USB cable.. I can't say for sure if those things were directly related but I have not had any problems with the arduino communication since..
Step 4.. Well I will likely play with the settings a bit more and tweak some settings for performance.. After that my goal will be to start to try and implement voice recognition to 'command' the robot into a certain area of room and as well to buld a charging base so it can return to the base when it needs a charge.. Again I will keep everyone posted as I progress..
Stay posted if you are interested..