If you use MI-Calib in a scientific publication, please cite the following paper 👇:
- S. Chen, X. Li*, S. Li, Y. Zhou and S. Wang, "MI-Calib: An Open-Source Spatiotemporal Calibrator for Multiple IMUs Based on Continuous-Time Batch Optimization," in IEEE Robotics and Automation Letters (RA-L), 2024. [paper] [code] [video]
Todo List »
- support more inertial ros messages.
The inertial measurement unit (IMU), as an interoceptive sensor typically providing high-frequency angular velocity and specific force measurements, has been widely exploited for accurate motion estimation in modern robotic applications, such as autonomous navigation and exploration. Recently, there has been a trend of integrating multiple IMUs in inertial systems, which outperforms traditional standalone ones regarding the resiliency of sensor failures and measurement depletion and is commercially affordable due to the significantly reduced price for IMUs. For such multi-IMU systems, accurate and consistent spatiotemporal calibration is inevitably required to perform information fusion in a unified framework. Considering most existing methods generally involve additional aiding sensors in calibration, lacking convenience and usability, we propose MI-Calib
: a high-performance multi-IMU spatiotemporal calibrator based on continuous-time batch optimization, which utilizes only raw inertial measurements from multiple IMUs and requires no prior.
Our accompanying videos are now available on YouTube (click below images to open) and Bilibili.
-
install
ROS1
(Ubuntu 20.04 is suggested, Ubuntu 18.04 (ros melodic) is also available):sudo apt install ros-noetic-desktop-full echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
Requirements: ROS1 & C++17 Support
-
install
Ceres
:see the
GitHub
Profile of Ceres library, clone it, compile it, and install it. Make sure that the version ofCeres
contains theManifold
module. (Ceres
version equal to 2.2.0 or higher than that) -
install
Sophus
:see the
GitHub
Profile of Sophus library, clone it, compile it, and install it. Set optionSOPHUS_USE_BASIC_LOGGING
on when compile (cmake) the Sophus library, this would avoid to involvefmt
logger dependency (as the followingspdlog
would use internalfmt
too, which may lead to conflict). -
install
magic-enum
:see the
GitHub
Profile of magic-enum library, clone it, compile it, and install it. -
install
Pangolin
:see the
GitHub
Profile of Pangolin library, clone it, compile it, and install it. -
install
cereal
,yaml-cpp
, andspdlog
:sudo apt-get install libcereal-dev sudo apt-get install libyaml-cpp-dev sudo apt-get install libspdlog-dev
-
create a ros workspace if needed and clone
MI-Calib
tosrc
directory asmi_calib
:mkdir -p ~/MI-Calib/src cd ~/MI-Calib/src git clone --recursive https://github.com/Unsigned-Long/MI-Calib.git mi_calib
change directory to '
mi_calib
', and run 'build_thirdparty.sh
'.cd mi_calib chmod +x build_thirdparty.sh ./build_thirdparty.sh
this would build '
tiny-viewer
' and 'ctraj
' libraries. -
Prepare for thirdparty ros packages:
clone ros packages '
sbg_ros_driver
' to 'mi_calib/..
' (directory at the same level asmi_calib
):cd .. git clone https://github.com/SBG-Systems/sbg_ros_driver.git
then change directory to the ros workspace to build this package:
cd .. catkin_make -DCATKIN_WHITELIST_PACKAGES="sbg_driver"
-
compile
MI-Calib
:catkin_make -DCATKIN_WHITELIST_PACKAGES=""
datasets, launch, result visualization
datasets, launch, result visualization
Find a configure file named config-real.yaml
in /mi_calib/output
or from the open-source datasets below:
# Google Drive
https://drive.google.com/drive/folders/11GTlHyzjSkt6ZXAZs9t6Tmg11Nah2Bx_?usp=sharing
Then change the fields in the configure files to be compatible with your dataset (there are detailed comments for each field). You only need to change a few fields related to io (input and output), perhaps some additional fields related to optimization.
Then give the path of your configuration file to the launch file of MI-Calib
named mi-calib-prog.launch
in folder mi_calib/launch
, Then, we launch 'MI-Calib
':
roslaunch mi_calib mi-calib-prog.launch
The corresponding results would be output to the directory you set in the configure file.
Attention:
- Sufficiently excited motion is required for accurate spatiotemporal calibration in
MI-Calib
! - Considering that the weak observability of the intrinsic parameters (i.e., non-orthogonal factors, rotational misalign- ments, and biases) in the proposed spatiotemporal calibration, they are required pre-calibrated, which can be accomplished in a separate process. (how to calibrate intrinsics of your IMUs, see Real-world Experiments)