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.