This is an initial version of a toolkit for spatiotemporal calibration of Multiple IMUs and Muiltple LiDARs without relying on artificial targets and specific movements. Both mechanical LiDARs (e.g., Velodyne and Ouster) and solid-state LiDAR (e.g., Livox-MID70).
- [2023/10/29] - Initial release of code and dataset.
-
The whole project is a ROS (only tested on Ubuntu 20.04 noetic) workspace. It contains three ros packages:
- elic_calib: the main package to solve calibration issue;
-
Here are the thirdparties:
- ROS (noetic), Ceres, PCL, OpenCV, OpenMVG, Sophus, yaml-cpp, magic-enum, fmt, icecream-cpp, cereal
-
Here are the self-building parties:
-
install ROS (for Ubuntu 20.04):
sudo apt install ros-noetic-desktop-full echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
note that the 'OpenCV' and 'PCL' libraries are integrated into it.
-
install Ceres:
sudo apt-get install libceres-dev
-
install OpenMVG:
see the GitHub Profile of openMVG library, clone it, compile it, and install it. Build shared library!
-
install Sophus:
see the GitHub Profile of Sophus library, clone it, compile it, and install it.
-
install yaml-cpp:
sudo apt-get install libyaml-cpp-dev
-
install magic-enum:
see the GitHub Profile of magic-enum library, clone it, compile it, and install it.
-
install fmt:
sudo apt-get install libfmt-dev
-
install icecream-cpp:
see the GitHub Profile of icecream-cpp library, clone it, compile it, and install it.
-
install Cereal:
sudo apt-get install libcereal-dev
-
clone submodules of LIC-Calib:
git submodule update --remote
change directory to '{*}/ELIC-Calib/src/elic_calib/thirdparty', and create folder named 'slam-scene-viewer-build' where the 'slam-scene-viewer' would be built.
cd {*}/ELIC-Calib/src/elic_calib/thirdparty mkdir slam-scene-viewer-build cd slam-scene-viewer-build cmake ../slam-scene-viewer make -j8
other modules are header-only libraries, which means they don't need to be compiled.
-
change directory to the ros workspace (i.e., {*}/ELIC-Calib/), and run:
catkin_make
An example of simulated dataset and reference spatiotemporal parameters are available at OneDrive. For more details on how to generate simulation environment and simulation data, please contact the author.
- Download the simulated dataset
- Modify the default yaml in “elic-calib.launch” to "elic-config-sim.yaml"
- Modify the "BagPath", "ParamSavePath", "OutputDataDir" in "elic-config-real.yaml" according to your environment
- Turn on "dt = 0.0;" on line 481 of "lidar_data_loader.cpp" and catkin_make again
- Source it and run it! "roslaunch elic_calib elic_calib.launch"
An example of real-world dataset and reference spatiotemporal parameters are available at OneDrive.
- Download the real-world dataset
- Modify the default yaml in “elic-calib.launch” to "elic-config-real.yaml"
- Modify the "BagPath", "ParamSavePath", "OutputDataDir" in "elic-config-sim.yaml" according to your environment
- Comment out "dt = 0.0;" on line 481 of "lidar_data_loader.cpp" and catkin_make again
- Source it and run it! "roslaunch elic_calib elic_calib.launch"
- The NDT registration may fail when initializing livox. Using loam_livox to obtain a simple map in advance can improve the calibration success rate.
- Due to the small field of view of Livox LiDAR, it is prone to degradation cases.
The codebase and documentation is licensed under the GNU General Public License v3 (GPL-3).