Technology for precise distance measure?

I want to create a system that's able to scan the environment around him and create a depth image of what's around it, like this image, where the color lightness is inversly proportional to the object distance, in this case cans.

I saw some infrared modules that will do the trick, but the distance it's too low for what I want (100cm top), and I prefer something that will have a range of 1m-10m. Is there any kind of technology that will do the trick?

The final goal it's to detect objects that could be far, so I need some precision both on short and long range.

There are two ways to determine the distance of an object:

• TRIANGULATION: You measure the angle that the point you are measuring with two or more sensors; this is what Russell told you, and used with compass for example;

• TRILATERATION: You measure the distance from the point to two or more sensors, without knowing the direction; this is the case of GPS tracking or ultrasonic sensors.

So basically, you can use lasers (or lights in general, that involves also image detection) with cameras to do triangulation, or range sensors like ultrasonic sensors (used in robotics too) and use trilateration. I think it depends by the properties of the objects you're measuring and also other things like precision, size and others.

If it can help I've seen that self-driving veichles like the ones that participate to DARPA Grand Challenge often use cameras, and since the distance is similar probably that's the best choice.

Using computer vision, a common approach is to project on the objects a pattern (there are studies about which is better for a specific task) and using disparity maps to find the differences between images (obviously you need stereo vision).

This last method is really powerful, and probably the image you posted comes from that (even though I cannot understand why the can seems flat; probably it's been flattened later). There is a Matlab toolbox and for sure there are functions ni the OpenCV library for C, C++, Python and Java. Probably the first is the best for embedded implementation.

There are many possibilities, each with their problems and advantages.

Here is one general method. This is the ages old range finder technique extended from a point to an area.

• From two locations on a baseline determine the angle to a grid of points in the target area.

• Determine the angle to each point from the two baseline positions.

• Use basic trigonometry to establish distance based on the angles and baseline separation.

There are a number of ways of doing this.eg
(1) Shine a spot (eg LASER) onto target area and detect spot location using a sensor. LASER could be X/Y tracked and sensor could be X/Y tracked or line scanned in X and then Y directions or ... . Using 3 or more basline points with a bas-area rather athn a base-line would help .

(2) Use two cameras (USB web cam on up) to create images from the two baseline locations and then locate equivalent points in each image by whatever means. If the image was flat the two pictures could be correlated simply by sliding sideways. For items with depth range infOrmation is provided by the subtended angles to each point.

On both examples above, some points will be hidden from some of the sensors. Multiple "cameras" of viewers will help but nothing can make the rear of 3D object visible.

=========

If this is for pigs and you use these ideas I want 10% :-)

• 9% (non-negotiable) :-). I'm still looking for some alternatives that doesn't need a camera but I can't find any. I've alreayd used ultrasounds and infrared with bounceback time measuring to do tricks like that, but that was for just one point, not for 3d models Jan 31, 2012 at 12:50

If you can do some intensive signal processing, then phased-array sonar, using an array of microphones, might be one potential solution. A scanning laser in conjunction with multiple cameras is reported to be a common robotic vehicle solution.