[Documentation] [TitleIndex] [WordIndex


The code has been removed from the public domain. The technology is available as commercial produces from Kaarta.


Laser Odometry and Mapping (Loam) is a realtime method for state estimation and mapping using a 3D lidar. The program contains two major threads running in parallel. An "odometry" thread computes motion of the lidar between two sweeps, at a higher frame rate. It also removes distortion in the point cloud caused by motion of the lidar. A "mapping" thread takes the undistorted point cloud and incrementally builds a map, while simultaneously computes pose of the lidar on the map at a lower frame rate. The lidar state estimation is combination of the outputs from the two threads.

If an IMU is available, the orientation (integrated from angular rate) and acceleration measurements are used to deal with general motion of the lidar, while the program takes care of the linear motion.

The program is tested on a laptop with 2.5 GHz quad cores and 6 Gib memory (the program consumes two cores). It uses a Velodyne VLP-16 lidar (see following figure). Another two versions of the program using a back and forth spin lidar and a continuous spin lidar are available.



To run the program, users need to download the code from GitHub, or follow the link on the top of this page. The program can be started by ROS launch file (available in the downloaded folder), which starts four nodes and rivz:

roslaunch loam_velodyne.launch

Datasets are available for download from the bottom of this page. Please make sure the data files are for the Velodyne version (not back and forth spin or continuous spin version). With the program running (from the launch file), users can play the data file:

rosbag play data_file_name.bag

Note that if a slow computer is used, users can try to play the data file at a low speed, e.g. play the data file at half speed:

rosbag play data_file_name.bag -r 0.5


NSH indoor outdoor (Video): from inside of a building to outside


Gates oscillating motion (Video): test with an IMU



The input messages from the Velodyne and IMU follow the convention of x- pointing to the front, y- pointing to the left, and z- pointing upward. The IMU messages should be projected to align with the Velodyne frame before sending in.

Another version that uses a Velodyne HDL-32E with an IMU is available upon request by sending an email to the author.


J. Zhang and S. Singh. LOAM: Lidar Odometry and Mapping in Real-time. Robotics: Science and Systems Conference (RSS). Berkeley, CA, July 2014.

More Info

Research videos Kaarta

2024-07-13 13:18