Neato's LiDAR Module

Ever since the Neato Robotics XM-11 series of robotic vacuum cleaners came on the market, robotics tinkers such as myself have been intrigued with the spinning LiDAR module that helps it navigate.  However, as the XM-11 costs upwards of $400 retail, I wasn't ready to pony up the funds needed to experiment with one.  However, I recently managed to purchase the XM-11's LiDAR module from a seller on eBay and this page is about my experiences trying to make it work.  First, here's a photo of the LiDAR module as I received it from the seller:

Click photo for larger view

The underside of the LiDAR module looks like this:

Click photo for larger view

The design of the unit is very simple.  The small DC motor is designed to be driven with a PVM drive circuit so that the speed of rotation can be controlled using a RPM measurement sent over a serial connection from the rotating drum assembly.  The same serial like also sends ranging information.  How the LiDAR module is put together and how it works is described on other web sites, such as Neato XV-11 Disassembly, LIDAR Sensor and Neato XV-11 LIDAR Disassembled, so I won't repeat those details here.  However, I did find that the LiDAR module I received was substantially different from modules that others have documented, so I will describe how my module differs.

First, since I didn't purchase the module as part of functional XM-11 robot, I had no way to know what voltages were needed to drive the module.  From the references I linked above (especially this one) , I learned that there were at least two different versions of the Neato LiDAR module, each of which used a different serial protocol to send back the ranging information.  I was also unsure as to whether the unit required 5, or 3.3 volt DC to power it electronics.  So, I cautiously connected the red and black wires to my variable power supply, set the current limit to 200 ma, or so, and powered the module up at 3.3 volts while monitoring the serial output line (orange wire) at 115200 baud and was plesantly surprised when the module responded by printing:

 OK

 Piccolo Laser Distance Scanner

 Copyright (c) 2009-2010 Neato Robotics, Inc.

 All Rights Reserved

 

 Loader.V2.1.11383

 CPU.F2802x/cd00

 Serial.AAA36210AA-0003350

 LastCal.[2008311154]

 Runtime.V2.1.12813

Based on this, I could see that I had purchased an older model LiDAR module that used the 2.1 firmware, not the more recent 2.4 firmware documented on the "LIDAR Sensor" page linked above.  So, the next step was to write some software to read and display the ranging data on a graphical display of some sort.  I chose to write a simple Java app to so this, as I'm pretty fluent in writing Java code and it only took about an hour, or so to hack something out.  I've linked the code below but, if you want to try it out, you will need to download and install the RxTx serial library, as the code depends on this for serial communication.

By design, the Neato LiDAR module needs to be spinning approximately 5 RPM before it will report any ranging data.  I found my module to be rather finicky about this and the data stream would frequently send back errors codes (see the "LIDAR Sensor" page linked above) if the RPM value wasn't just right.  Part of the problem is that the slip ring assembly that feeds the signals to the rotating drum assembly is slightly out of round on my unit causing the whole thing to wobble sightly as it spins and make a rather loud "thumpa, thumpa" kind of sound as it spins.  I'm not sure if this means my module is defective, or if this is a typical for Neato's module.  

After some inspection, I finally discovered how to remove the rotating drum assembly from the base.  It requires removing the 6 screws on the bottom of the base and then simply pulling off the drum assembly, which is designed to snap into a large ball bearing, as shown in these two photos:

The problem turns out to be that the slip ring unit, which you can see in the center of the bottom photo, was not aligned precisely when it was screwed in place.  It's fits into a hexagon shaped hole in the base, which seems to have some clearance space added intentionally, so I suspect that some level of misalignment is expected.  But, in my unit, the hex end of the slip ring shaft wobbles around in the hex-shaped hole and the amount of wobble seems to exceed what the hole is designed to allow.  The fix, I suspect, will require me to unscrew the slip ring (4 screws) and try get it better aligned.  Or, alternately, I could perhaps enlarge the hex hole a bit.

However, once the spin rate stabilizes, the module does return data.  Here's a sample scan of what it sees sitting on my desktop:

Click for larger view

I'll post some additional scans in more controlled conditions when I have a chance to set up a proper test.