watonomous.github.io

  1. Software Division
  2. Software Division Home
  3. Perception Group
  4. Sensor Calibration

[ Software Division : Multi-lidar Calibration ]

Created by [ Rowan Dempster] on Dec 28, 2019

These instructions work solely on lidars without running all of Autoware and require multiple lidar sensors to be connected to the crystal rugged.

Disclaimer: The multi-LIDAR calibration script will NOT work if the LIDARs for the majority do not have similar corresponding points. Otherwise, there will be no way to template match the points, as shown below

[{.confluence-embedded-image .confluence-external-resource}]


[To install and build Autoware, follow ]
[Note that instead of running ]./catkin_make_release[, run just ]catkin_make

\

The result of these instructions will be multiple lidars being aligned with one another, after outputting a calibration matrix.

To begin startup the lidar's:

  1. Start up the first lidar:
roslaunch velodyne_pointcloud VLP16_points.launch device_ip:=169.254.0.101 port:=2368 frame_id:=vlp1 ns:=vlp1

(replace the ip, port with appropriate values for each lidar)

  1. Start up the second lidar:
roslaunch velodyne_pointcloud VLP16_points.launch device_ip:=169.254.0.102 port:=2369 frame_id:=vlp2 ns:=vlp2

Or...

# Runs scaling and transform to origin of center LIDAR
roslaunch src/perception-year-2/perception-lidar-calib.launch
  1. Run the transformations for first lidar to the origin (if the first lidar point cloud is visible in RVIZ then skip this step):
rosrun tf2_ros static_transform_publisher 0 0 0 0 0 0 velodyne vlp1
  1. Source autoware repository
# go to autoware directory
cd ~/dev/autoware/ros
source devel/setup.sh
  1. Run the multi-lidar calibrator (more info can be found here: https://github.com/CPFL/Autoware/tree/master/ros/src/sensing/fusion/packages/multi_lidar_calibrator) :
rosrun multi_lidar_calibrator multi_lidar_calibrator _points_child_src:=/vlp2/velodyne_points  _points_parent_src:=/vlp1/velodyne_points _x:=0.0 _y:=0.0 _z:=0.0 _roll:=0.0 _pitch:=0.0 _yaw:=0.0

or

rosrun multi_lidar_calibrator multi_lidar_calibrator _points_child_src:=/vlp1/velodyne_points _points_parent_src:=/lidar_merged_visualized _x:=-0.186 _y:=0.8 _z:=1.9 _roll:=0.3 _pitch:=0.75 _yaw:=1.911593

# You will get a line like this:
# rosrun tf static_transform_publisher -0.0850236   0.823456    1.77827  1.87159 0.699268 0.228692 /velodyne /vlp1 10

or

rosrun multi_lidar_calibrator multi_lidar_calibrator _points_child_src:=/vlp2/velodyne_points _points_parent_src:=/lidar_merged_visualized _x:=-0.29 _y:=-1.02066 _z:=1.87 _roll:=-0.2 _pitch:=0.8 _yaw:=-2.0
# You will get a line like this:
# rosrun tf static_transform_publisher -0.169596 -0.867779   1.70713 1.21317 2.48995   2.953 /velodyne /vlp2 10

Provide the appropriate initial guesses for the transformation matrix.

  1. Let program run until it converges and take the output from the multi-lidar calibrator and run the static transform publisher in a new terminal.

Ex:

Normal Distributions Transform converged:1 score: 1.47722 prob:1.05178
transformation from vlp2 to vlp1
This transformation can be replicated using:
rosrun tf static_transform_publisher   0.63806 -0.509938 -0.160922  0.0550881 -0.0969953   0.112378 /vlp1 /vlp2 10
Corresponding transformation matrix:

   0.99379 -0.0655566 -0.0899119    0.63806
 0.0548014   0.991587   -0.11727  -0.509938
 0.0968433   0.111614   0.989022  -0.160922
         0          0          0          1

Document generated by Confluence on Dec 10, 2021 04:02

Atlassian