Skip to content

thisparticle/btsa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Breaking the Static Assumption: A Dynamic-Aware LIO Framework

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"


📑 Table of Contents


📚 Overview

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)
Teaser

Figure 1: Our method maintains accurate localization in highly dynamic environments where traditional LIO fails.

The Challenge

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.

Our Solution

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

🎥 Demo Video

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.


⚙️ System Architecture

Framework

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.

Core Components

  1. Input Preprocessing: IMU preintegration and motion distortion correction
  2. Dynamic-Aware Registration:
    • Compute spatio-temporal normals from temporal sliding window map (~2s)
    • Classify points as stable/unstable based on temporal component
  3. 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)

Spatio-Temporal Normal Analysis

ST Surface

Figure 3: Points are analyzed in 4D space-time.

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.


🔧 Installation

Prerequisites

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

1. Install ROS Noetic (Ubuntu 22.04)

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-autolabor

For other Ubuntu versions, follow the official ROS installation guide.

2. Install Dependencies

# PCL
sudo apt install libpcl-dev

# Eigen
sudo apt install libeigen3-dev

Alternatively:

3. Install Livox ROS Driver

cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
cd ..
catkin build livox_ros_driver

For detailed instructions, see Livox ROS Driver.

4. Build BTSA

cd ~/catkin_ws/src
git clone https://github.com/thisparticle/btsa.git
cd ..
catkin build btsa
source devel/setup.bash

🚀 Usage

Quick Start

  1. Launch the system:
roslaunch btsa dynamic.launch
  1. Play your rosbag:
rosbag play <your_dataset>.bag

Launch Files

We 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 dataset

Configuration

Configuration files are located in the config/ directory:

  • dynamic.yaml: Default parameters for dynamic environments
  • ecmd.yaml: Settings for ECMD dataset
  • geode.yaml: Settings for GEODE dataset
  • urbannav.yaml: Settings for UrbanNav dataset

💾 Dataset

Download

We provide a comprehensive dataset for evaluation:

Google Drive Link

The dataset includes:

  • ✅ Self-collected dynamic environment sequences
  • ✅ Preprocessed public datasets (ECMD, UrbanNav, GEODE)
  • ✅ Ground truth trajectories (RTK-GPS)
  • ✅ Configuration files for each sequence

📝 Citation

If you find our work useful in your research, please consider citing:

@ARTICLE{
}

Paper Links:


🙏 Acknowledgements

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!

About

A Dynamic-Aware LIO Framework Via Spatio-Temporal Normal Analysis

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published