Robotics: Low Cost LIDAR and Laser Range Finders: Where Are They?
The truth is, there aren't many options out there for low-cost 2D LIDAR systems. You basically have high-end sensor systems, like ones from the SICK Group
...which can easily run into the several thousand (USD) range (if you want to see real expense, check out the laser system the Google Self Driving Car uses). Or, you have lower-end sensors, like the Parallax Laser Range Finder
, at about $130.00 (USD), or you have homebrew DIY options. Where's the middle?
There really isn't one. The cost difference is mainly due to a number of reasons. For instance, the expensive sensors you see out there can scan very quickly, spit the data out quickly, work well in a variety of lighting conditions (up to and including daylight), use high-quality optics and lasers (plus IR filters and other systems to remove noise caused by other IR sources that can drown out the laser light), and they also generally use a form of interferometry to calc the distance (basically, you modulate the beam with a wave in the GHz range, and compare the outgoing beam with the reflected version - the difference between the waves is proportional to the distance measured - but you need really high speed timer circuitry for this). Some high-end sensors (so called LIDAR cameras) use time-of-flight and special high-speed optical sensors and timers to measure the time it takes from laser emission to reception of the reflected beam.
All other low-cost methods I've seen use triangulation (parallax) to measure the distance - because it is fairly easy and low-cost to implement (more on this later). The breakdown in costs on these methods, along with the high-end method, are summarized below (from greatest to least costly); What kind of LIDAR sensors can you buy with your hard-earned cash?
- A SICK, Hokuyo (or other expensive vendor) 2D LIDAR (~ $1000.00+ USD, depending on how you source it)
- Ripping the sensor out of a Neato XV-11 vacuum cleaner robot and "hacking it" (~$400.00 USD)
- The Parallax 1D LIDAR sensor (~$130.00 USD) - mount on a servo to pan it, for 2D sensing
- Homebrew (??? USD)
The first option is basically out of most hobbyist's budgets, so we won't talk about them much (except to say that if you plan on making a fast moving and/or large scale self-driving vehicle, or one that operates outdoors, that option may be your -only- option for now). So that leaves us with the last three options, all of which, as mentioned, use triangulation/parallax to determine distance. The way this works is basically as follows. You have a laser, and you have a sensor - usually a linear CCD or similar array, and the baseline (think of a triangle) between the two is known; using this information and some simple trigonometry, you can calculate how far away an object is by where the laser beam dot is detected on the linear array. Such a system has an inherently lower accuracy, because you can only get so many pixels in a linear CCD or similar array; they also don't generally use the higher quality optics nor the components to lower the noise from other IR sources (like the sun, for instance). So these systems suffer from poorer accuracy, smaller distances measured, and lower speed. So, what are the options?
Option 2 is not a bad option, provided your needs aren't extravagant, and your machine doesn't move fast and works indoors. There are a few sites out there that detail how to "hack" the sensor and use it with an Arduino and/or other microcontrollers:
Hack a Day - XV-11 Hacking Articles
You basically do some simple serial comms with them, and they spit out an approximate "360 degree" measurement list; whether the sensor works well in daylight is unknown (but I would guess not very likely). Unfortunately, to get this sensor, you have to buy an entire robot and rip it apart, making it useless for its intended purpose. So, think of it as a box of robot parts you are buying, with the LIDAR sensor being the main one. A little bit of interesting history: Neato, when they originally announced that they were coming out with this robot, made mention that the sensor was going to be made really cheaply, and sold to hobbyists for around $25.00 USD. Looking at it, I can easily see that with scaling of manufacturing, it could be made cheaply. Whether that cheap or not, I don't know - but it shouldn't cost much more than the Parallax sensor (discussed next). At any rate, they never did release it for sale to us, so it's a moot point.
Option 3 is a good deal because it basically does what most homebrew systems do: It uses a "parallax" method (as described earlier - no relation to the company), and does the processing of distance measured and such on-board (with it's own microcontroller), so you don't have to do much to interface to it. Add a nice servo to pan it around (mount it with the long-axis "up" to keep the servo mass down), and you can have a nice and fairly fast 2D LIDAR system (certainly at least as fast as an ultrasonic sensor with the NewPing library
- but probably much faster scanning is possible, maybe up to the limits of the speed of the servo).
Finally, Option 4: Homebrew methods...
Things are kinda wide-open here, but you are still (mainly - more on this in a moment) limited to the parallax method. One thing to try would be to hack a serial interface (or get one that already has such an interface) to a true laser-distance "tape measure" from the hardware store. These kinds of tape measures do exist, but they aren't real cheap. Most only have a laser for pin-pointing an ultrasonic sensor (and thus aren't much better than a Parallax Ping or SRF-04 module) - but there are a few that are true laser-distance measuring devices (whether they are cheaper than the Parallax LIDAR sensor is another matter). There are also similar devices for use on golf courses and for hunting...
Or - you can try full-on "homebrew"! Here are a few ways of doing it: The first method requires a PC and a webcam (and describes the parallax method well):
Todd Danko's Webcam Based DIY Laser Rangefinder
The second can be done (in theory) with an Arduino or similar, but is not for the faint of heart - it actually uses a video camera as the "scanning" device for the laser:
SRS: A Real-time Laser Range Finding Vision System by Kenneth Maxon
(you may have to refresh this one a couple of times to get it to fully load all the images)
The third can definitely be done with an Arduino:
Homemade Laser Rangefinder by OddBot
All use variations on the parallax geometry measurement methodology, in different forms (the second being the most complex - while the third is interesting in that it scans the laser, and keeps a single photo-transistor stationary; in effect giving you a virtual linear "ccd" array). Now - remember I said that you are "mainly" limited to this method? That might not necessarily be the case always - or even today! - depending on what resources you can muster up. Here are a couple of more interesting links, that detail some interesting ideas on how to use more advanced techniques to measure distance:
Is there a way to measure the distance a laser pointer is pointed at
Fast scanning camera and lidar
Lastly - I want to leave open the possibility of another option, which isn't LIDAR, but may be an inexpensive (though very difficult) system to give your robot the ability to get around in the world. That would be by using Machine Vision techniques. There are a few software packages out there to facilitate this. Cameras won't be cheap, but a lot can be done with one or two low-cost USB web cameras (a Logitech Orbit AF is a favorite of mine). What you'll be saving in hardware costs, though, will instead go into pulling your hair out implementing the software, most likely - but it can be an interesting diversion:
OpenCV (Open Source Computer Vision)
(for *nix, Windows, and Android)
Hope this article helps. I have attempted to answer this question multiple times on the Arduino forum, and I thought it was finally time to post something here on my site about it, since it is an interesting and often asked about topic. If you hear about anything new or want to pass something along to me in this field, let me know. Sooner or later, I hope I can write a follow-up article on some new and inexpensive LIDAR or vision system in the future...