Giter VIP home page Giter VIP logo

multi_lidar_calibration's Introduction

Multi LiDAR Calibrator

This package allows to obtain the extrinsic calibration between two PointClouds with the help of the NDT algorithm.

The multi_lidar_calibrator node receives two PointCloud2 messages (parent and child), and an initialization pose. If possible, the transformation required to transform the child to the parent point cloud is calculated, and output to the terminal.

How to launch

  1. You'll need to provide an initial guess, otherwise the transformation won't converge.

  2. In a sourced terminal:

Using rosrun

rosrun multi_lidar_calibrator multi_lidar_calibrator _points_child_src:=/lidar_child/points_raw _points_parent_src:=/lidar_parent/points_raw _x:=0.0 _y:=0.0 _z:=0.0 _roll:=0.0 _pitch:=0.0 _yaw:=0.0

Using roslaunch

roslaunch multi_lidar_calibrator multi_lidar_calibrator.launch points_child_src:=/lidar_child/points_raw points_parent_src:=/lidar_parent/points_raw x:=0.0 y:=0.0 z:=0.0 roll:=0.0 pitch:=0.0 yaw:=0.0

  1. Play a rosbag with both lidar data /lidar_child/points_raw and /lidar_parent/points_raw

  2. The resulting transformation will be shown in the terminal as shown in the Output section.

  3. Open RViz and set the fixed frame to the Parent

  4. Add both point cloud /lidar_parent/points_raw and /points_calibrated

  5. If the algorithm converged, both PointClouds will be shown in rviz.

Input topics

Parameter Type Description
points_parent_src String PointCloud topic name to subscribe and synchronize with the child.
points_child_src String PointCloud topic name to subscribe and synchronize with the parent.
voxel_size double Size of the Voxel used to downsample the CHILD pointcloud. Default: 0.5
ndt_epsilon double The transformation epsilon in order for an optimization to be considered as having converged to the final solution. Default: 0.01
ndt_step_size double Set/change the newton line search maximum step length. Default: 0.1
ndt_resolution double Size of the Voxel used to downsample the PARENT pointcloud. Default: 1.0
ndt_iterations double The maximum number of iterations the internal optimization should run for. Default: 400
x double Initial Guess of the transformation x. Meters
y double Initial Guess of the transformation y. Meters
z double Initial Guess of the transformation z. Meters
roll double Initial Guess of the transformation roll. Radians
pitch double Initial Guess of the transformation pitch. Radians
yaw double Initial Guess of the transformation yaw. Radians

Output

  1. Child Point cloud transformed to the Parent frame and published in /points_calibrated.
  2. Output in the terminal showing the X,Y,Z,Yaw,Pitch,Roll transformation between child and parent. These values can be used later with the static_transform_publisher.

Output example:

transformation from ChildFrame to ParentFrame
This transformation can be replicated using:

rosrun tf static_transform_publisher 1.7096 -0.101048 -0.56108 1.5708 0.00830573  0.843 /ParentFrame /ChildFrame 10

The figure below shows two lidar sensors calibrated by this node. One is shown in gray while the other is show in blue. Image obtained from rviz.

Calibration Result

multi_lidar_calibration's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 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.