11 gram Arduino-powered laser rangefinder

I was pleased to see a cool laser rangefinding project on Kickstarter- I hope this project gets fully funded (and I'm a backer). I've actually been experimenting myself with structured light and laser rangefinding using our ArduEye hardware and thought I'd share it here.

The setup is very simple- An Arduino Pro Mini serves as the computing backbone of the device. Via a 2N2222 transistor (I know I know...) the Arduino can on and off a red laser module. The Arduino is connected to an ArduEye breakout board with one of Centeye's Stonyman image sensor chips and a cell-phone camera lens. The whole setup (excluding the red FTDI thing) weighs about 10.9 grams. I think we can reduce that to maybe 4 or 5 grams- the laser module weighs 1.9 grams and is the limiting factor.

The principle of operation is straight forward- the laser is mounted horizontally from the image sensor by a known baseline distance. The Arduino first turns off the laser and then grabs a small image (3 rows of 32 pixels in this implementation). Then the Arduino turns the laser on and grabs the same pixels. The Arduino then determines which pixel experienced the greatest increase in light level due to the laser- that "winning point" is the detected location of the laser in the image. Using this location, the baseline distance, the lens focal length, the pitch between pixels on the image sensor, and basic trigonometry, we can then estimate the detected distance. I haven't yet implemented this final distance calculation- my main interest was seeing if the laser could be detected. The above video shows the system in operation.

In practice, I've been able to pick up the laser point at a distance of up to about 40 feet- not bad for a 2 mW laser. In brighter lights you can put an optical bandpass filter that lets through only laser light- with this the system works at distances of say 10 feet even in 1 klux environments e.g. a sunlit room. If you are using this for close ranges, you can turn up the pulse rate and grab distances at up to 200Hz. How does an Arduino grab and process images at 200Hz? Easy- at 3x32 it is only grabbing 96 pixels!

Views: 35692

Tags: ArduEye, Arduino, Centeye, Laser, Stonyman, rangefinder

Comment by Jack Crossfire on June 29, 2012 at 2:26pm

How does it work when the surface is constantly changing?

Comment by Travis on June 29, 2012 at 3:20pm

FYI, this is the same principle as the Neato vacuum cleaner's ultra low-cost laser rangefinder:  http://www.hizook.com/blog/2009/12/20/ultra-low-cost-laser-rangefin...

Comment by Geoffrey L. Barrows on June 29, 2012 at 3:43pm

@Jack,

Good question- with my limited experiments it did fine, probably because the delta-intensity (laser on vs. laser off) was stronger than the background texture. But it might not work as well if the laser spot is near a bright light. Also when you crank up the speed to 200+ Hz you have to move it pretty fast for that type of interference to matter.

@Travis,

Thanks for the link! I did not know about that but I am not surprised. The concept is very simple. Did that laser rangefinder ever get turned into a proper product?

Comment by Bot Thoughts on June 29, 2012 at 4:16pm

Wow, this looks quite promising.

I would think one could do filtering of the data to deal with any texture-induced noise... ?

200hz isn't quite enough to do a fast updating, high resolution XV-11 style LIDAR but it's way, way better than nothing. :)

Comment by Marko Kleine Berkenbusch on June 29, 2012 at 6:58pm

Very interesting! Do you interpolate between pixels, or does it detect at most 32 depth levels (i.e. number of horizontal pixels)?
Marko


Developer
Comment by Rob_Lefebvre on June 30, 2012 at 4:13am

This is pretty neat, but IMO, severely limited if it can't work outside.  

Comment by Geoffrey L. Barrows on June 30, 2012 at 7:56am
@Bot- yes, there is a lot we can do with filtering. I only spent maybe 2hrs on the code so I didn't exactly exhaust possibilities. :)
@Marko- actually that is in the code and it works but I didn't report it here. I took the winning pixel, it's two neighbors, constructed a LaGrange polynomial with them, and computed the max. The only cost is that it works better if you blur the image slightly, which reduces the range and/or max light level the device can operate. Also the pixels have a log response so a different interpolation method might be better.
@Lefebvre- agreed. I think though with more tinkering I can prob get it working outside, certainly with a different image sensor or laser.
Comment by Bot Thoughts on June 30, 2012 at 10:56am
@glb So have you gotten with the guy to collaborate and/or share info? I would like to contribute as well. I am interested in jumping in throwing an mbed at the problem with the intent of building one with a bare m3 at some point later.
Comment by Geoffrey L. Barrows on July 1, 2012 at 11:38am
@bot- I'm happy to open source this. Will post basic details later.
Comment by Geoffrey L. Barrows on August 11, 2012 at 10:46am

@Monroe- I've never tinkered with LIDAR itself since it would involve accurate timing that I've never put into our chips. (I *could* do that, just *haven't* gone that direction yet.) But it is an interesting idea.

On the other hand, I've a few ideas for some low light sensors using SPADs (single photon detectors)...

Comment

You need to be a member of DIY Drones to add comments!

Join DIY Drones

© 2014   Created by Chris Anderson.

Badges  |  Report an Issue  |  Terms of Service