ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Well, just adding my few cents here, indeed, you need to scan the environment that surrounds your robot in order to build a map, BUT, contrary to common sense the speed of this scanning depends on you robot's mission and expected performance.

In other words, you could try mounting the single point range finder on a servo or step motor, but keep in mind you will probably have to stop you robot frequently to update the map, or find a way of building and updating it accordingly. On top of that, not just the speed of a range find matters. Its resolution matters also.

Translating this to our hypothetical case of a servo-mounted range finder, the step of the motor will be your resolution, and, the farther an object is from you sensor, the greater the chance you either miss it completely, of just capture it partially.

Another way would be initializing your brobot, making it do a 360 deg spin around itself (if its mechanics allow for it, like in a turtle), map the initial environment and then start planning its path. Zig-zag it a little bit to cause the "scanning" effect, while it moves. BUT that is over-thinking this solution. Let's use another approach.

You might want to consider the (in)famous Microsoft Kinect from Xbox 360. It can be used for that as well; You will find many videos on youtube with ROS implementations of this device, with a very fair result. It has TWO cameras: an IR (monochromatic) one that works as the range finder, and the regular one for image. (Some ideas about it on youtube: https://www.youtube.com/watch?v=dRPEns8MS2o)

Now, there is more here. Thinking outside the box (an depending on what your robot will do) you could use the regular camera using an image filter called "edge find", combined with the IR range finder to fine-tune your mapped area. (Check some ideas here on youtube: https://www.youtube.com/watch?v=yQZISXIFjaQ )

Kinect's IR can only detect from 1.2 meters to 3.5 meters. You can use OpenCV to calculate distances smaller than 1 m and greater than 3.5m. There are some applications using Raspberry PI and OpenCV (not necessarily ROS) to implement dashcams that do this. No reason you could not hack it a bit and make a great robot for less money. (yet another example here: https://www.youtube.com/watch?v=dcm9NpMNi68 )

A few hints before you buy a Kninect:

-This thing is BIG and HEAVY. won't fly on a light quad, or, if you are planning on building a terrestrial bot, make sure to take its dimensions into consideration. For reference, it is almost as wide as a Roomba vacuum cleaner.

  • You want the "original" version, from Xbox 360. Until a few months ago, the new Kninect was not supported (no one found out the communication protocol)

  • Let's call this device the Kninect 360; It DOES NEED a special adapter: It powers the device with 12 Volts and also converts its special, proprietary, connector into USB. For you robot, you will have to provide 12 V and around 1.5 A to it. The best option is to either cut out the connector or strip down the cable and patch it to your circuits. You will find plenty of references on this cable pinout. (http://freneticrapport.blogspot.com/2011/04/kinect-cable.html)

  • There is a version of Kinect that was released for Windows development ONLY ! It does NOT work with the open source driver that we use on Linux. (According to some documents I found)

  • The Kinect 360 has MOTORS inside, that allow you some panning (and extra scanning, or even object tracking). If you do not use them, you may not need the hole 1.5 A.

  • Asus has a model that is said to be 100% compatible. Plug-and-play direct replacement: (http://www.asus.com/Multimedia/Xtion_PRO_LIVE/).

Happy hacking.