Data Collected from the Scanning Laser Rangefinder

Clicking on the "save" or "save as..." menu item in the LaserCollect application pops up a file-dialog, which gives the user the opportunity to choose a "root" file name.  It uses this root to create 5 files, described as follows.  Assume the root is "laserscan".

laserscan.ivr

This is a text file that describes the scan.  It is usable with the LivePicture plug-in to view spherical projections in a browser.  All numbers are in radians.  It also specifies the source image as "laserscan-reflect.jpg" which doesn't exist, but can be created from laserscan-reflect.pgm.

laserscan.rtpi

This file includes the raw data as a quad-tuple of Range, Theta, Phi, and Intensity (RTPI).  This is the real data from which the other data is resampled.  Range is in inches, theta and phi are in degrees (theta is the angle around the equator, phi is the angle from the equator), and intensity is what the device returns (typically 0 or in the range 16-128). It has a text line for the header of the form "P9 x 255\n", where x is the number of columns of data. The header line is followed by x ints, in binary, that tell how many samples are in each column. After that come the rtpi quads, as binary floats. See the matlab files for more info.

laserscan-reflect.pgm

This pixmap has the return strength of laser light, resampled to fit the grid in the pixmap.  Values are 0 and 16-255 (everything from 15 down is considered to weak to be useful).  Most values are below 128, except for specular reflections or retroreflectors, which seem to be in the 200-225 range.

laserscan.pgm

A rendering of the depth.  This is a resampling of the depth, where a delta of one in the gray map represents 1 inch.

laserscan-range.pfm

This is a portable float map (an idea of Paul Rademacher's).  It is just like a binary ppm file, using floats instead of 3-byte values.  It has a header line like "P7 x-resolution y-resolution 255\n" followed by xres*yres floats.  The floats represent inches.

laserscan.xyz

This file isn't from the LaserCollect app, but represents a translation of the rtpi file to Cartesian coordinates.  The file has one point per line, with either 4 or 6 values on a line representing x, y, z, intesity, or x, y, z, r, g, b.  This file can be used as input to Chris McCue's integrator, as well as other point-cloud software, such as Raindrop Geomagic's Wrap.  The best way I know to read these files is to use a combination of fgets() and sscanf to disambiguate the 2 kinds of lines.

MATLAB Files to help in reading/writing these files.

Here are some links to various MatLab files for reading/writing these files.