Rovio to 3D Stereo Point Clouds

rovio_disparity

This disparity image was created using a single Rovio robot by taking pictures from two different locations.

I’m a bit late to the game of Rovio hacking, but here I am experimenting with using a Rovio I bought two years ago.  The Rovio by Wowwee is a remote control car that has a camera mounted on it that can be controlled over wireless web based interface.  When it was discontinued, the existing stock was liquidated in a fire sale, where they were sold for around $100 each.  You can still buy them now, for about $400, on Amazon. Keep in mind you might need to buy a new battery and power supply.

WowWee Rovio Wi-Fi Enabled Robotic WebCam

Picture of a Rovio

Picture of a Rovio

One of the things that makes Rovio so great, and more than a simple toy, is that it can move in any direction! Which means, that unlike your standard remote control car, it can move sideways. This is exactly what you need if you want to do stereo vision and create a point cloud.

The figure to the left shows a disparity image created using a single Rovio by driving it a few inches to the right.  In this disparity image warmer colors are closer and cooler colors are farther away.  See below for the input images.  From this disparity image you can create a point cloud, which can then be used for making 3D models or obstacle detection.  This process is entirely automated using BoofCV and the source code is available online on my Rovio Github project:

https://github.com/lessthanoptimal/rovio
So how does this work?  Well a full explanation would be quite detailed.  The image processing code is for the most part cut and pasted from examples on BoofCV’s website.  A list of relevant example is found below:

 Initial Setup

You will need to do the following once so that your camera is calibrated and that the software knows your robots parameters.

  1. Checkout source code from Github
  2. Calibrate the camera.
    1. Look at this first BoofCV Camera Calibration
    2. Collect images in 640×480 using ManualControlApp by pressing ‘m’
    3. Select good images, run calibration app.  Pixel error should be around 0.3
  3. Get your robots MAC address using ManualControlApp by pressing ‘a’
  4. Create directory for your robot in robots.  Place intrinsic.xml and file “mac” with the MAC address.  See existing examples

Creating Point Cloud

Once you have done all of that all you need to do now is place the Rovio in a well lit room in front of something with lots of texture and run AutoPointCloudApp.  That app will automatically figure out which robot it is controlling, loading calibration, collect and image, move the robot, and collect another image.  The two images are then processed and the results displayed.  Don’t forget to change the IP address in the main() function of AutoPointCloudApp.

 

rovio_associated

Associated points between the two views using SURF features.

rovio_rectification

Rectified Stereo Images from Rovio

 

rovio_3d_topview

Synthetic top view created using 3D points computed from the disparity image.

 

Leave a Reply

Your email address will not be published. Required fields are marked *