Thursday, December 8, 2011

Vision system for Robot

It has been a while since I posted a status on the robot. I discovered very quickly that using just the ultrasonic ping modules would not be a very good idea – they may be good for detecting long solid objects but when it comes to cubicle walls, that are lined with sound absorbing fabric, they sort of fail. The sensors are also placed at 30 degree intervals so it was very easy to hit a table leg or a box while trying to avoid a bigger object and get stalled. As the robot also had casters in front and the back it was easy to get straddled on objects lying on the ground.

  
I switched focus and have been busy with the vision portion of the project for a few months. The vision portion consists of navigation and object detection/identification. In this post I discuss the navigation portion.

I have been exploring different technologies for depth detection for navigation. I tried the Microsoft Kinect adapter, which provides a decent depth camera and sells for about $150 – though a couple of places had it on special for $99 on Black Friday.
A number of projects are using the Kinect, and it is used in the reference platform design for the Microsoft Robotics Studio. The Kinect uses technology created by PrimeSense basically it consists of an Infra-Red laser that projects a pattern of dots on a scene – the PrimeSense system then uses an IR camera to calculate the distance. The PrimeSense processor calculates the time it takes for light to reach a point and then reflect back to the camera. This is called "time of flight" and works similar to sonar. The accuracy of this camera is about 1 cm. As the camera uses a  pattern of dots it does not provide a lot of acuracy as to the edges of objects either. If you look at the depth image of a static scene you will notice that the depth image is extremely noisy i.e. edges move.

As the first version of the Kinect SDK only had 32 bit libraries (the November release now supports 64 bit development) and has a non-commercial use license I decided to look elsewhere. Asus also released a camera called the Xtion which uses the same base technology from PrimeSense; it costs about $50-$70 more. The Xtion uses the OpenNi open source libraries which would be perfect for basic navigation.

However as neither of the depth cameras have a great acuracy they cannot be used for more detailed analysis required for the object detection portion of my project. I will go into using stereo cameras and scanning lasers in my next post.