Traj-LO aims to explore the limits of state estimation using only LiDAR sensors.
Nowadays, LO approaches heavily rely on IMU data for accurate state estimation but neglect the true capabilities of LiDAR sensors. Through the continuous-time perspective, Traj-LO matches the performance of state-of-the-art LIO methods in diverse scenarios.
The spatial-temporal movement of LiDAR is parameterized by a simple yet effective continuous-time trajectory, which consists of multiple piecewise linear functions. By coupling the geometric information from streaming LiDAR points and kinematic constraints from trajectory smoothness, it can work even in scenarios where the motion state exceeds the IMU's measuring range. Besides, the framework is generalized for different kinds of LiDAR as well as multi-LiDAR systems.
Traj-LO is a ROS-independent project and is suitable for cross-platform applications. For convenience, we provide a ROSbag data loader that can read public datasets and your own recorded data.
Currently, the released code only supports one LiDAR configuration. We will update it as soon as possible to provide multi-LiDAR support. The provided ROSbag data loader supports different types of LiDAR, including Livox, Ouster, Hesai, Robosense, and Velodyne. We have tested Traj-LO with the following datasets.
Dataset | LiDAR | Message Type | Configuration file |
---|---|---|---|
NTU VIRAL | Two Ouster OS1-16 | sensor_msgs/PointCloud2 | config_ntu.yaml |
Hilti 2021 | Ouster OS0-64 Livox mid-70 |
sensor_msgs/PointCloud2 livox_ros_driver/CustomMsg |
config_ouster.yaml config_livox.yaml |
R3LIVE | Livox Avia | livox_ros_driver/CustomMsg | config_livox.yaml |
Point-LIO | Livox Avia | livox_ros_driver/CustomMsg | config_pointlio.yaml |
New College | Ouster OS-1 64 Ouster OS-0 128 |
sensor_msgs/PointCloud2 | config_ouster.yaml |
Hilti 2022 &2023 | Hesai PandarXT-32 | sensor_msgs/PointCloud2 | config_hesai.yaml |
SubT-MRS | Velodyne VLP16 | sensor_msgs/PointCloud2 | config_velodyne.yaml |
The corresponding configuration files are located in the "data" directory. For optimal performance, you will need to fine-tune the parameters.
Since Traj-LO is a LiDAR-only method, it may fail in narrow spaces where there are few valid points for a long time.
In addition to the ROSbag data loader, Traj-LO also provides a simple custom GUI for visualization and uses Eigen-based Gauss-Newton for pose optimization. Here are the major libraries we will use.
Although major dependencies are included in the third-party folder, you may still need to run the script install_deps.sh
to install libraries like Boost, etc.
You can install the Traj-LO project by following these steps:
git clone --recursive https://github.com/kevin2431/Traj-LO.git
cd Traj-LO
./scripts/install_deps.sh # make sure we have all the dependency
mkdir build && cd build
cmake ..
make -j8
After modifying the config file for your environment, you can run Traj-LO. Here is an example to test it with a Livox LiDAR.
./trajlo ../data/config_livox.yaml
- Traj-LO is a continuous-time method, so each point in your rosbag should have a corresponding timestamp.
- When the motion profile is aggressive, you can decrease
seg_interval
or increasekinematic_constraint
.
Ubuntu 20.04, 22.04
You can use WSL2 to install the Ubuntu subsystem and then follow the above instructions to test Traj-LO. To enable OpenGL accelerated rendering in WSLg, you may need to select Nvidia GPU.
Make sure you have Homebrew to run the srcipt install_deps.sh
to install dependencies. We have tested Traj-LO on M2 Mac Mini (macOS 14.4.1).
Still working on it!
If you use this project for any academic work, please cite our RA-L paper.
@ARTICLE{zheng2024traj,
author={Zheng, Xin and Zhu, Jianke},
journal={IEEE Robotics and Automation Letters},
title={Traj-LO: In Defense of LiDAR-Only
Odometry Using an Effective Continuous-Time
Trajectory},
year={2024},
volume={9},
number={2},
pages={1961-1968},
doi={10.1109/LRA.2024.3352360}
}
For those interested in multi-sensor fusion, particularly in multi-LiDAR and multi-IMU systems, I recommend checking out my latest work, Traj-LIO, which is a resilient state estimator through sparse Gaussian Processes.
Traj-LO is currently in beta version, and we are actively working on it. We welcome community users to participate in this project.
Thanks for these pioneering works Basalt (Batch Optimization), CT-ICP (Continuous-time Idea), and KISS-ICP (VoxelMap Management).