/ELIC-Calib

A toolkit for spatiotemporal calibration of multiple IMUs and Heterogeneous LiDARs

Primary LanguageC++GNU General Public License v3.0GPL-3.0

ELIC-Calib

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

News

  • [2023/10/29] - Initial release of code and dataset.

Code Structure

System Overview

Boot ELIC-Calib

preparation
  • 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.

compile ELIC-Calib
  • change directory to the ros workspace (i.e., {*}/ELIC-Calib/), and run:

    catkin_make

Run simulated dataset

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.

  1. Download the simulated dataset
  2. Modify the default yaml in “elic-calib.launch” to "elic-config-sim.yaml"
  3. Modify the "BagPath", "ParamSavePath", "OutputDataDir" in "elic-config-real.yaml" according to your environment
  4. Turn on "dt = 0.0;" on line 481 of "lidar_data_loader.cpp" and catkin_make again
  5. Source it and run it! "roslaunch elic_calib elic_calib.launch"

Run real-world dataset

An example of real-world dataset and reference spatiotemporal parameters are available at OneDrive.

  1. Download the real-world dataset
  2. Modify the default yaml in “elic-calib.launch” to "elic-config-real.yaml"
  3. Modify the "BagPath", "ParamSavePath", "OutputDataDir" in "elic-config-sim.yaml" according to your environment
  4. Comment out "dt = 0.0;" on line 481 of "lidar_data_loader.cpp" and catkin_make again
  5. Source it and run it! "roslaunch elic_calib elic_calib.launch"

TODO

  1. The NDT registration may fail when initializing livox. Using loam_livox to obtain a simple map in advance can improve the calibration success rate.
  2. Due to the small field of view of Livox LiDAR, it is prone to degradation cases.

Credit / Licensing

The codebase and documentation is licensed under the GNU General Public License v3 (GPL-3).