explaingit

tixiaoshan/lio-sam

4,737C++Audience · researcherComplexity · 5/5Setup · hard

TLDR

A robotics software package that builds precise 3D maps in real time while tracking a robot's location, by combining lidar laser scans with motion sensor data in the ROS framework.

Mindmap

mindmap
  root((LIO-SAM))
    What it does
      3D environment mapping
      Real-time localization
      Sensor fusion
    Sensors
      Lidar scanner
      9-axis IMU
      Velodyne support
      Ouster support
    Architecture
      Map refinement thread
      IMU-rate pose thread
    Setup
      ROS framework
      Manual calibration
      ROS2 branch available
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Build a 3D map of an outdoor environment using a lidar and IMU mounted on a wheeled robot

USE CASE 2

Track the precise position and path of a drone or autonomous vehicle in real time

USE CASE 3

Test the LIO-SAM algorithm on provided sample datasets before deploying on physical hardware

USE CASE 4

Migrate to the ROS2 branch to integrate LIO-SAM into a newer robotics system

Tech stack

C++ROSGTSAMOpenCV

Getting it running

Difficulty · hard Time to first run · 1day+

Requires a compatible mechanical lidar with per-point timestamps, a 9-axis IMU, and manual sensor-to-sensor calibration before mapping works.

License not specified in the explanation, verify the repository before use in commercial projects.

In plain English

LIO-SAM is a software package for building 3D maps of an environment in real time while simultaneously tracking where a robot or vehicle is located. It is designed for outdoor robots, autonomous vehicles, and drones, and it runs on a widely used robotics framework called ROS (Robot Operating System). The system works by combining data from two sensors: a lidar (a laser scanner that measures distances by bouncing pulses off nearby surfaces) and an IMU (a motion sensor that detects acceleration and rotation). By fusing these two data streams continuously, the system can produce a precise position estimate even at the high update rates that an IMU provides, while the lidar's geometry keeps the long-term map accurate. The package maintains two separate calculation processes running in parallel. One handles the ongoing map and refines position estimates over time. The other runs at the speed of the IMU, which can be up to 500 times per second, to keep the current pose estimate fresh. Together they allow the system to run up to ten times faster than real-time while still producing accurate maps and trajectories. Setting it up requires compatible hardware: a mechanical lidar that reports per-point timestamps and ring numbers, plus a 9-axis IMU. Some manual calibration is needed to align the two sensors to each other. The README provides detailed steps for this alignment, sample datasets for testing, and notes on common hardware combinations including Velodyne and Ouster lidar models. A ROS2 version is available on a separate branch for users on newer systems. This project comes from academic research and includes a companion paper describing the algorithm. The code is practical enough to run on physical robots, with examples using a Jackal wheeled robot and a handheld sensor rig.

Copy-paste prompts

Prompt 1
Walk me through calibrating a Velodyne lidar and 9-axis IMU together to run LIO-SAM on my outdoor robot
Prompt 2
Help me set up LIO-SAM with a sample ROS bag file to verify the mapping pipeline produces accurate trajectories
Prompt 3
Explain the dual-thread architecture in LIO-SAM and how IMU preintegration keeps the pose estimate fresh between lidar scans
Prompt 4
I'm getting drift in my LIO-SAM map after 100 meters, help me diagnose whether it's an IMU calibration or loop closure issue
Open on GitHub → Explain another repo

← tixiaoshan on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.