Using my C# Rovio library I wrote an autonomous room mapping application that randomly sends one of my Rovio’s around the room plotting data as it goes.  The application uses the Rovio’s Northstar data to fetch the current x/y/theta of the robot and it then plots any obstruction at that location.  (I also went ahead and start plotting both the wifi and Northstar signal strengths on separate images that I can use as overlays.)

I currently sample the Rovio status every 100ms, and process movement commands once every 5 seconds.  This gives me a sample size of 50 points per stop helping to eliminate any sensor errors.  (It also helps correct errors caused by a curious cat.)  The movement is rather silly right now and it simply rotates 2 degrees to the left if it sees an obstacle., but it works for a starter set of data.  After taking a quick 10 minute run which included about 3 laps around my computer room I ended up with the following dataset.

Rovio Map Data

This is a one to one visual display of the actual dataset, but I found that it was a bit busy to really understand what was going on there.  By blurring the image in Paint.net I came up with an image that starts to make sense, as definitive walls and edges begin to form.

 Rovio Map Data Blur

I then highlighted the assumed edges with a red line and it gives me a pretty good representation of my upstairs computer room.  Some of the walls seem to be a bit conservative, but I am sure with further runs the data will correct itself over time.

Rovio Map Data Overlay

The next step will involve improvements to the scanning and movement routines.  When I detect an obstacle I plan on having the Rovio rotate left and right in 2 degree increments for scans, and then use the blended data to determine a new heading, with a bailout 180 degree turn if no new heading can be determined.  Hopefully this will keep the Rovio moving along the walls a bit closer.  I also need to add battery checking so that when the Rovio starts getting low on power I halt processing and issue the return home command.  Docked detection will also be needed, since when the Rovio is docked it detects a collision due to the sensor being pointed at the carpet while the robot is angled up at the rear on the dock.