This repository contains the official implementation of the IEEE RA-L paper:
"Breaking the Static Assumption: A Dynamic-Aware LIO Framework Via Spatio-Temporal Normal Analysis"
- Overview
- Key Features
- Demo Video
- System Architecture
- Results
- Installation
- Usage
- Dataset
- Citation
- Acknowledgements
Most LiDAR-Inertial Odometry (LIO) systems assume a static world, but this rarely holds in practice. Moving objects like pedestrians and vehicles cause registration algorithms to mistake dynamic elements for fixed landmarks, leading to severe localization failures—especially when:
- Dynamic objects dominate the scene
- Static features are sparse
- Geometric degeneracy exists (e.g., tunnels, corridors)
Figure 1: Our method maintains accurate localization in highly dynamic environments where traditional LIO fails.
Existing methods face a circular dependency: accurate localization needs reliable static point identification, yet detecting dynamic objects requires precise pose estimates. Previous approaches separate these tasks—filtering dynamic points before registration—which fails when initial poses are unreliable.
We integrate spatio-temporal normal analysis directly into registration, breaking the circular dependency by:
- Jointly solving state estimation and dynamic detection in a unified framework
- Modeling point motion through 4D space-time surface analysis
- Filtering dynamic points iteratively during pose optimization, not as pre-processing
- Achieving real-time performance (~50ms per scan) with efficient spatial consistency checks
Our supplementary video demonstrates the system performance across various dynamic scenarios:
The video showcases our method handling challenging dynamic environments including pedestrians, vehicles, and geometrically degraded scenes.
Figure 2: Overview of our dynamic-aware LIO framework. The system consists of three main components: input preprocessing, dynamic-aware registration, and static map building.
- Input Preprocessing: IMU preintegration and motion distortion correction
- Dynamic-Aware Registration:
- Compute spatio-temporal normals from temporal sliding window map (~2s)
- Classify points as stable/unstable based on temporal component
- Static Map Building:
- DBSCAN clustering to identify dynamic object candidates
- Spatial consistency check via volumetric overlap analysis
- Filter false positives (newly observed areas vs. true dynamic objects)
Key Concept: We model point clouds in 4D space-time and compute normal vectors ñ = (a, b, c, d) for each point:
- (a, b, c): Spatial components (traditional 3D normal)
- d: Temporal component (measures surface motion over time)
Dynamic Detection: Points with |d| > 0.1 are classified as unstable and excluded from registration. This threshold corresponds to ~5.7° deviation in the temporal dimension, providing physically interpretable motion detection.
Our system has been tested on:
- Ubuntu 22.04 (should also work on Ubuntu 20.04)
- ROS Noetic
- PCL >= 1.8
- Eigen >= 3.3.4
echo "deb [trusted=yes arch=amd64] http://deb.repo.autolabor.com.cn jammy main" | sudo tee /etc/apt/sources.list.d/autolabor.list
sudo apt update
sudo apt install ros-noetic-autolaborFor other Ubuntu versions, follow the official ROS installation guide.
# PCL
sudo apt install libpcl-dev
# Eigen
sudo apt install libeigen3-devAlternatively:
- PCL: Follow PCL Installation Guide
- Eigen: Follow Eigen Installation Guide
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
cd ..
catkin build livox_ros_driverFor detailed instructions, see Livox ROS Driver.
cd ~/catkin_ws/src
git clone https://github.com/thisparticle/btsa.git
cd ..
catkin build btsa
source devel/setup.bash- Launch the system:
roslaunch btsa dynamic.launch- Play your rosbag:
rosbag play <your_dataset>.bagWe provide different launch configurations for various sensors and scenarios:
roslaunch btsa dynamic.launch # For general dynamic environments
roslaunch btsa ecmd.launch # For ECMD dataset
roslaunch btsa geode.launch # For GEODE dataset
roslaunch btsa UrbanNav.launch # For UrbanNav datasetConfiguration files are located in the config/ directory:
dynamic.yaml: Default parameters for dynamic environmentsecmd.yaml: Settings for ECMD datasetgeode.yaml: Settings for GEODE dataseturbannav.yaml: Settings for UrbanNav dataset
We provide a comprehensive dataset for evaluation:
The dataset includes:
- ✅ Self-collected dynamic environment sequences
- ✅ Preprocessed public datasets (ECMD, UrbanNav, GEODE)
- ✅ Ground truth trajectories (RTK-GPS)
- ✅ Configuration files for each sequence
If you find our work useful in your research, please consider citing:
@ARTICLE{
}Paper Links:
We sincerely thank the authors of the following open-source projects:
- FAST-LIO: For the efficient LIO framework and iKD-Tree implementation
- PV-LIO: For insights on plane-based registration
- dynamic_object_detection: For dynamic object handling strategies
- MapMOS: For static map building evaluation protocols
Special thanks to the authors of ECMD, UrbanNav, GEODE, and Helimos datasets for making their data publicly available.
Star ⭐ this repository if you find it helpful!
