Coder Social home page Coder Social logo

ggsonic / imu_lidar_calibration Goto Github PK

View Code? Open in Web Editor NEW

This project forked from unmannedlab/imu_lidar_calibration

0.0 0.0 0.0 39.75 MB

Target-free Extrinsic Calibration of a 3D Lidar and an IMU

License: GNU General Public License v3.0

CMake 1.51% MATLAB 2.90% C++ 93.61% C 0.28% Dockerfile 1.70%

imu_lidar_calibration's Introduction

imu_lidar_calibration

Target-free Extrinsic Calibration of a 3D Lidar and an IMU

Overview

This repository is a toolkit for calibrating the 6-DoF rigid transformation between a 3D LIDAR and an IMU. It's based on an Extended Kalman Filter based algorithm which exploits the motion based calibration constraint for state update. This algorithm does not depend on any calibration target or special environmental features, like planes, for determining the extrinsic calibration between a 3D-Lidar and an IMU.

Presentation Video

Paper

Prerequisites

This code base was tested and implemented in a Ubuntu 16.04 system.

  • ROS (tested with Kinetic)
  • GTSAM - 4.0.3 (This is used only to initialize the rotation between the sensors)
  • Ceres - 1.14.0
  • ndt_omp [Caution: This has been found to be unstable in newer ubuntu/pcl, you can use the package that already exists in this particular repository, I made it work in Ubuntu 20.04 with PCL 1.12]

Still, I realize that it may be difficult to build this on newer Ubuntu, hence docker. Although I have provided the script to run this, basic knowledge of docker is necessary.

Install

  • Clone the source code for ndt_omp and build it in your catkin workspace
  • Clone this code-base and build it in your catkin workspace

Sensor suite

As far the 3D Lidar is considered, currently this code-base supports Ouster-128 but it is easy to expand for other 3D Lidars. We have tested this code-base by downsampling our Ouster 128 lidar to 64, 32, 16 channel modes. The important pre-requisite is that the points in lidar pointcloud must come with a measurement/firing timestamp. We use a Vectornav VN 300 IMU. In our setup the Lidar outputs scans at 10 Hz and the IMU outputs measurements at 400 Hz, however, we have also tested our algorithm with IMU running at 50 Hz, 100 Hz & 200 Hz.

alt text

Procedure

Intrinsic Calibration of IMU

First of all, we need to determine the noise characterisitcs of the IMU biases. Several toolboxes are available online to determine this. We used https://github.com/rpng/kalibr_allan . This requires MATLAB. Other alternatives are: https://github.com/mintar/imu_utils , https://github.com/ori-drs/allan_variance_ros

Data collection for extrinsic calibration

We need to excite all degrees of freedom during collecting data required for extrinsic calibration. An example video can be found here: Data collection procedure

Please find a sample dataset here to try out the algorithm yourself: https://drive.google.com/file/d/1o20lcmXU1HxOP4KsLXrXbjT2jTfjeaJh/view?usp=sharing

Inter-sensor rotation estimation

alt text

roslaunch linkalibr ros_calib_init.launch

I am working on making this code more generic, until then please take care to change the file path names.

Inter-sensor translation estimation

alt text

roslaunch linkalibr linkalibr_ouster_vectornav.launch

I am working on making this code more generic, until then please take care to change the file path names.

The results are stored in folder linkalibr/data as a homogenous transformation matrix in text file I_T_L_final.txt

Plots

We can plot the results of the EKF based estimation process by using the MATLAB plot files available in folder linkalibr/data.

The plot for calibration parameters is shown below:

Estimated inter-sensor translation parameter

alt text

Estimated Inter-sensor rotation parameter

alt text

Some more figures...

Estimated IMU Trajectory

alt text

Estimated IMU Velocity

alt text

Result of scan matching using motion compensated scans

alt text

Acknowledgement

This codebase was developed under the OpenVINS framework.

imu_lidar_calibration's People

Contributors

submishmar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.