Skip to content

Multi lidar calibration tool from autoware, using NDT algorithm, need a approximate initial transformation

Notifications You must be signed in to change notification settings

wutaoo/multi_lidar_calibration

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Multi lidar calibration tool from autoware, using NDT algorithm, need a approximate initial transformation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published