Last week I finished some preliminary tests with the LIDAR Lite from Pulsed Light . The LIDAR Lite is a laser based distance sensor that can measure distance from 0-40m with 2.5cm accuracy. And it's only $89.00! This combination of performance and cost make it an amazing little sensor for robotics.
Inspired by this image on Pulsed Light's site, I thought it would be fun to try and create my own room scanner using a LIDAR lite. I'm sure other people have done similar demos, so I figured I'd do it using one of our InterbotiX Robot Turrets
InterbotiX Robot Turret
This demo works well with both AX and MX series DYNAMIXEL servos (that is with both the PhantomX Turret and the WidowX/ScorpionX Turret).The biggest difference is that the MX servos have a full 360° scanning range while the AX servos only have 300°. For the video I used a ScorpionX Turret, but its really overkill. For a mobile robot I'd use the PhantomX Turret. Just having the physical construction all done for me as well as great servos with positional feedback made the whole project a breeze.
I've been really interested in working with Chrome Apps for basic demos. I think HTML is a great way to create quick and easy user interfaces, and the Canvas element makes it easy to create custom elements like the room scan. Working with the chrome serial interface can be a little wonky - I had to spend a lot of time sorting the serial input to get it to line up correctly. But once I did, getting everything up and running was really fast. I really like being able to make changes on the fly and not have to worry about restructuring my entire GUI. Chrome Apps certainly aren't the best solutions for every problem out there, but for proof of concepts and demos, they're pretty great.
I started the project by having the turret auto-scan and then send a custom 7-byte packet (2 byte header/2 bytes of position / 2 bytes of distance / check sum) I eventually figured I needed a good way to start/stop the turret and set the speed. So I turned to the ArboitX Commander library - the same one we use in our other robots. That made it really easy to send commands out from the chrome app. In the future, I'd really like to upgrade the commander library to have a built in data-return packet.
This was very much a proof of concept, so I'm not looking to make many improvements on it anytime soon (I'd like to do a little bit of code cleanup and maintenance, but that's about it). But some ideas that I thought about working on are as follows:
- Using Slip Rings to allow the LIDAR lite to spin continuously instead of scanning back and forth.
- Alternatively, building a battery and wireless transceiver into the system to allow the entire rig to spin (though this has limited usefulness for mobile robots.
- Storing scan data for a robot to report back to the computer later. The MX servos have 4096 different positions, each position being a 2-byte value. Storing that in SRAM will max out the Arduino Uno's 2K and even the ArbotiX-M's 4K. You can lose some resolution and drop it down enough to get a scan or two, but really an SD card or other storage is necessary. Of course there are always chips like the Teensy3.1 with more storage, or you could integrate a Raspberry Pi or other SBC to just get the data on scan.
- Figuring out the maximum scan speed/bottle necks.
- Investigating a low cost alternative. I think that it might be possible to use standard hobby servos and a little bit of interpolation (or just speed measurements/prediction) could be used to make a servo perimeter scanner. The scan would be limited to 180 degrees and the resolution wouldn't be great, but this could be great for simple mobile robots.
- Looking at even lower cost systems like a DC motor with a cheap encoder.