// the take
LIO-SAM is a ROS1 (with a separate ros2 branch) real-time lidar-inertial odometry and mapping package that runs two coupled GTSAM factor graphs - one at IMU rate for low-latency odometry, one at lidar rate for globally consistent mapping with optional GPS factors. It's for robotics/SLAM engineers building localization or mapping on a platform with a spinning mechanical lidar and a 9-axis IMU, not a drop-in solution for arbitrary sensor rigs.
The dual-graph design is the actual contribution: a periodically-reset IMU-rate graph gives real-time pose output while a persistent lidar-rate graph keeps the map globally consistent, sidestepping the usual frequency-vs-consistency trade-off in a single EKF. It's built on GTSAM/ISAM2 rather than a hand-rolled filter, so adding or dropping factors (GPS, loop closure) is a structural change, not a state-vector rewrite. Scan deskewing uses actual per-point relative timestamps and ring number rather than assuming a static scan, which matters once the platform is moving at speed. The sample datasets cover Velodyne, Ouster, Livox and KITTI with the exact extrinsic/parameter deltas needed for each, which is rare thoroughness for a research-grade repo.
Loop closure is explicitly called a 'proof of concept' in the README - it's an ICP-based adaptation lifted from LeGO-LOAM, and the authors themselves point you to SC-LeGO-LOAM/SC-LIO-SAM for anything production-grade, so drift correction isn't really solved out of the box. Sensor support is narrow: 9-axis IMU only (6-axis needs the liorf fork), mechanical spinning lidars only, and Livox support is a bolted-on afterthought with its own caveats and generation-specific bugs (Ouster Gen1 vs Gen2 point coordinates). There's a known open bug in imuPreintegration linked from the TODO that never got closed, and the real improvement work (6-axis IMU, Scan Context loop closure, better lidar support) has moved into community forks rather than upstream, which signals the mainline repo is in maintenance mode. It's also tied to ROS1 Kinetic/Melodic and a specific GTSAM PPA version, with the ROS2 port living on a side branch instead of being the primary target - you're inheriting an aging middleware dependency unless you take the port on yourself.
We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →