$ show Liansheng-Wang/Super-LIO
Super-LIO is a LiDAR-Inertial Odometry (LIO) system implemented as a ROS2 application. It fuses IMU and LiDAR data using an Error-State Kalman Filter (ESKF) for state estimation and a novel OctVoxMap for efficient point cloud mapping and nearest-neighbor search. The system supports multiple LiDAR types (Livox, Hesai, Velodyne, Ouster, NCLT) and includes a relocation mode using pre-built maps with ICP/NDT initialization. The architecture is a monolithic ROS2 node with a state machine (KF initialization, map initialization, then continuous processing). Key data flows: IMU propagation, LiDAR scan motion undistortion, downsampling, point-to-plane residual optimization, map update, and odometry publication. The codebase demonstrates strong engineering with C++20, TBB parallelism, and well-structured Lie group math (SO3, SE3, S2) in a separate 'basic' library. The OctVoxMap component is a standout contribution with precomputed search orders for fast KNN queries.
The LLM identified 3 files worth highlighting for reuse:
Provides SO3, SE3, and S2 manifold implementations with exponential/log maps, Jacobians, and composition operations. Self-contained (only depends on Eigen), well-tested for numerical stability, and directly reusable in any robotics project requiring Lie group algebra. Demonstrates high craftsmanship in handling singularities and small-angle approximations.
Implements an octree-based voxel map with a precomputed search order for efficient K-nearest-neighbor (KNN) queries. Uses a tsl::robin_map for hash-based voxel lookup and a custom KNN heap. The search order is optimized for early termination based on distance thresholds. This component is a core algorithmic contribution of the paper and can be extracted for use in other LiDAR SLAM or point cloud processing systems.
A thread-safe ring buffer with blocking and non-blocking pop operations, using std::mutex and std::condition_variable. Supports timeout-based waiting and move semantics. The design prioritizes real-time responsiveness over data completeness (old data may be overwritten). This is a clean, reusable concurrency primitive for sensor data buffering.