In general, there are three main ways to create a LIDAR system:
- Reflection Trigonometry
- Phase-relation comparison
- Time-of-flight
Most of the commercial LIDAR systems you see out there use either methods 2 or 3; both are extremely difficult to implement as a hobbyist, requiring very high-speed counters or other interesting/complex circuitry. I barely understand them myself; the phase relation method involves modulating the laser beam, then detecting the reflected beam using a PIN avalanche diode or similar (as mentioned), and comparing the differences in phase relation, which corresponds to the distance. The time-of-flight method is just that: You start a high-speed counter (ghz) when you fire the laser and stop it when you detect the bounce; the faster your counter, the better accuracy you get (because light travels very fast over short distances).
Commercial version of these devices are extremely expensive.
For the hobbyist, that leaves the first option. How this works is that you have a laser and a sensor (a linear CCD or a web camera) set at a certain known distance apart, with both the laser and the sensor-at 90 degrees (perpendicular) to this baseline. When the laser is on, the sensor can "see" the laser dot, but where it perceives the dot horizontally will vary based on the distance to the object it reflects off of. This change in distance, once you know the baseline measurement between the sensor and the laser, can be used to calculate, via some simple trigonometry, the distance to the dot.
Now - of course the Arduino can't read a web camera directly, but a PC can - so there have been homebrew devices built that show you how this is done; this has already been posted.
You could modify this kind of system, though, to use a linear CCD sensor (maybe from an old scanner?). This is essentially what this recently released sensor from Parallax does:
http://www.parallax.com/Store/Sensors/ObjectDetection/tabid/176/ProductID/774/List/0/Default.aspx?SortField=ProductName,ProductName
Also - this kind of "reflection measurement" is done by the Sharp IR sensors (although I don't know if they use a linear array, or if they use a linear photo-sensor). I've wondered if one could "hack" a Sharp IR sensor, and use an IR laser, maybe with some extra lenses or something, and make a cheap laser distance sensor with such a device. Just an idea...
Another option (again homebrew) is this one:
http://letsmakerobots.com/node/2651
It again uses trig to measure the distance, but rather than a CCD, it uses a phototransistor that is fixed, and looks for the "pulse" of the laser (peak value) as it is "scanned" over the area via a motorized mirror scanner; by timing the mirror, one knows the angle of the mirror at the time of the pulse, and then bob's your uncle.
Here's another interesting way to make a low-cost laser rangefinder; again it uses trig - but also uses a camera, and some custom processing of the video image, by a CPLD and some other custom parts, to ultimately get 3D information out:
http://www.seattlerobotics.org/encoder/200110/vision.htm
...probably a bit complex, and I'm not sure such a thing could be ported to the Arduino - but it is interesting.
Finally - look into this option - which isn't cheap, but cheaper than all other 2D laser scanners: The Neato Robotics XV-11 vacuum cleaning robot has a spinning 2D LIDAR sensor that has been hacked (you can google for the various links); you can purchase an XV-11 for about $4-500.00 USD now. Believe me when I say that's the cheapest 2D LIDAR sensor you will find anywhere (think of it as purchasing a sensor that comes with extra robot parts attached). It uses a form of the reflection trigonometry method, but spins the entire module 360 degrees with a motor to scan a 2D circle, outputting the distance measurements.