Friday, December 31, 2010

Neato + SLAM

Here is yet another story for "the power of open source."

I've been spending quite a bit of time working on SLAM with the Neato XV-11 using both the built in laser and the Hokuyo URG-04LX-UG01. I had pretty much given up on gmapping working with the Neato -- until earlier today we found an issue with the scan angle increment computation in gmapping not working with the Neato laser specifications. I probably wouldn't have found this bug had it not been for a user of the Trossen Robotic Community pointing out some issues he was having with gmapping, as my version still had some modifications from my PML work earlier this year.

Anyways, for anyone wanting to use gmapping with the Neato robot, you can apply the following patch:

- gsp_laser_angle_increment_ = (angle_max - angle_min)/scan.ranges.size();
+ gsp_laser_angle_increment_ = scan.angle_increment;

to slam_gmapping.cpp. This uses the angle_increment from the laser scan, rather than the computed one, which is incorrect for full rotation scans. This will avoid issues with the scan being improperly inverted, and issues with scan matching.


Other SLAM Algorithms: CoreSLAM, Part 3

I've now got the build system working as well as fixing a number of parameter issues to be more ROS-compliant. Documentation for the package has been uploaded to

Here's another example map created (of the first floor of a home):

Next up on the docket of winter break projects: some updates to the ArbotiX ROS package, and a number of people perception algorithms.


Saturday, December 25, 2010

Other SLAM Algorithms: CoreSLAM, Part 2

I've now get the Monte Carlo Localization turned on, map publishing working in ROS, and a number of parameters defined. This required some hacking of the CoreSLAM library, in particular I removed all of the references to differential drive odometry, instead loading odometry externally from TF.

Here's an updated map using the 12-12-neato-ils bag file:

There's still some work to fix the way that the map->odom transform is handled, and allow a configurable map size and resolution (both of which will require reworking some more of the underlying library). I'm hoping to have the code released shortly.


Friday, December 24, 2010

SLAM Data Sets

Over the past semester I've been spending a lot of time working with low-cost SLAM. In doing so, I've collected a number of datasets around the Albany campus. I've uploaded a number of them (as ROS bag files), along with sample maps, to my server: All are free to use these datasets for whatever they please -- however, please post back maps and algorithms/parameters used to create them. Over time I would like to develop a set of best-known algorithms/parameters for low-cost SLAM.

These datasets were collected on iRobot Creates, the Neato XV-11, and the Vanadium Armadillo using the Neato Laser or the Hokuyo URG-04LX-UG01. In particular, I've recently collected a dataset I really am looking forward to working with: the 2010-12-23-double-laser.bag dataset, which consists of a long route around the ILS lab with a Neato XV-11. I mounted a second laser on the Neato for this run, a Hokuyo URG-04LX-UG01 sensor, which is aligned with the Neato laser from above:

And a picture of the Neato with second laser:


Thursday, December 23, 2010

Other SLAM Algorithms: CoreSLAM

gmapping is the map building (SLAM) software most commonly used in ROS. It works very well if you have a very high quality and long-range laser. The Neato laser is neither high quality nor long range (and the low-cost Hokuyos, while fairly accurate, are still near-sighted). There isn't a lot of academic literature that mentions low-cost lidars (unless it's a paper about building a low cost module).

One paper recently published that actually uses a short range Hokuyo is CoreSLAM, a SLAM implementation in under 200 lines of code. Well..., the map update/storage aspects are less than 200 lines of C code, however the complete system relies on a bit more, namely a particle filter for localization.

It looked good. So I integrated it into ROS:

This map is currently only using odometry, I'm going to try and get the MCL localization aspects working more tomorrow. I also need to get the map_saver to work with my ROS wrapper. I hope to have this on our SVN by the weekend.


Tuesday, December 14, 2010

Neato+ROS: Now With SLAM!

Here we go: I've got the Navigation stack working on a Neato XV-11

Code is now online in the ILS Social Robotics Lab (SUNY Albany) Repository.


Sunday, December 12, 2010


It's no secret that I'm a big fan of low-cost sensory. In fact, I'm a bit obsessed with it. And lately, we've been in cheap-sensor overload. Last month I picked up a Kinect, although I haven't had a ton of time to play with it yet. Luckily it looks as though the OpenNI+ROS drivers will be in good shape by the end of the week -- when our semester ends and I'll have a bit more free time.

On the subject of ROS, I'm also a big fan of that. Which brings us to the true reason for this post: I picked up a Neato XV-11 robotic vacuum this week (Thursday) and it arrived Friday (Amazon Prime $3.99 next-day shipping FTW). Friday night I spent about 4 hours getting the laser scanner and motor basics lined up, and then drove it around for a little while to discover numerous bugs. This afternoon I worked out most of the bugs, although I still need to work on the odometry calculations a bit more. Anyways, here's a quick video:

A couple of thanks to send out -- had it not been for this blog post by Hash79 of the Trossen Robotics Community, I probably wouldn't have even bought a Neato -- but all that data! The Neato looks like it could be a very interesting competitor for the iRobot Create -- hopefully I can get the odometry/laser data to work in gmapping (so far, I've had *no* luck).

More tomorrow -- as well as a code release (after cleaning things up).