Aria  2.8.0
Laser Scan Log File Format

A log of raw laser and robot data can be created using an ArLaserLogger object and driving the robot manually with a joystick or other means.

This log file can then be futher processed, for example by loading it into Mapper3 or MobilePlanner, which corrects errors and creates a more accurate map suitable for navigation and localization. Laser log file names conventionally end in ".2d" and are sometimes referred to as ".2d files" or "2d files".

The log file is a text file, and can be opened in any text editor. The format is as follows. First, general information about the scan appears:

The file starts with the word "LaserOdometryLog", followed on each line by either a comment, or a tag and a space separated list of data values. The tag that starts a line of data is followed by a colon character (:). A comment line starts with a # character, and should be ignored. A program should also ignore any lines that start with tags not described here.

LaserOdometryLog
#Created by ARIA's ArLaserLogger
version: 3
useEncoderPose: 1|0
sick1pose: X Y Theta
sick1conf: LeftFOV RightFOV Samples 
locationTypes: robot robotGlobal robotRaw

If useEncoderPose: is followed by 1, then only the robot's encoder-based position was used when scanning. If 0, then other sources such as gyroscopic correction may have been used.

sick1Pose: is followed by the position of the laser device in the horizontal plane, relative to the center of the robot. This provides an offset from laser readings' origin to robot position. X is the forward-back position (positive forward, negative backward), Y is the left-right position (positive right, negative left), Theta is the angle offset (counter-clockwise, usually it is 0). sick1conf: is followed by some operating parameters of the laser device itself. Left FOV and Right FOV indicate the total field of view or angle of sweep of the laser in degrees (typically they are equivalent in magnitude, since the field of view of the SICK LMS-200 is always centered). Samples is the number of samples taken per sweep within that field of view. The locationTypes line, if present, lists what kinds of robot position data will be available in the log. Zero or more of the possible types may be listed. (If locationTypes is not present, you may assume that robot is available, or just check for all types when parsing the file.)

If you are generating a laser scan log file with software other than ArLaserLogger, then you may replace the message in the comment in the second line, for example: #Created by my custom laser scan logger. This comment is for informational purposes only.

It is also possible for other metadata to appear following this initial block, with different initial tags. You can ignore these.

Then, as a scan is being recorded, the following lines are written when triggered by the robot having moved or turned by a certain amount:

scan1Id: N
time: t.tt
velocities: Vel RotVel LatVel
robot: X Y Theta
...
scan1: readings...

Where t.tt is the time in seconds since the start of scanning when this block was added to the scan log; X, Y and Theta is the position of the robot and Vel and RotVel are the velocities when these laser readings were taken; readings... is a list of space separated point pairs, a pair for the last point detected by each reading in the last sweep of the laser. Each pair defines a point relative to the robot, where a reading detected an obstacle. (Note, In old versions of the log format, sick1 was used instead of scan1.)

In addition to robot:, additional lines providing other measures of robot position may be present (these will be listed in the locationTypes: header.) robot: provides the encoder pose, robotGlobal: is a corrected global pose,

If use of special SICK laser reflectors is enabled (rare), then the following line is written before the scan1: line:

reflector1: levels...

Where levels... is a reflectance value for each reading in the scan1: line to follow.

If during the run, the 'g' key or the second joystick button is pressed, then the following lines are added:

time: t.tt
robot: X Y Theta Vel RotVel
cairn: GoalWithHeading "" ICON_GOALWITHHEADING "goal<i>N</i>"

Where the values after time:, #rawRobot: and robot: are as above, and N is incremented with each goal (i.e. goal0, goal1, goal2, etc.). This goal will be added to the final map at the position of the robot to define a goal or other point of interest in the map.