The method makes use of the property that pointclouds from lidars appear more 'crisp' when the calibration is correct. The system attempts to find the transform between a lidar and the given poses such that the distance between any two lidar points in the resulting fused pointcloud is minimized. Poses can be provided as a TransformStamped message or in Maplab's CSV format
This library is pretty new and only tested on a couple of datasets, so expect some issues when you first run it.
For most systems the node can be run without tuning the parameters. By default two optimizations are performed, a rough global optimzation followed by a local refinement.
Column | Description |
---|---|
1 | timestamp ns |
2 | vertex index (not used) |
3 | position x |
4 | position y |
5 | position z |
6 | orientation quaternion w |
7 | orientation quaternion x |
8 | orientation quaternion y |
9 | orientation quaternion z |
Note that Maplab has two CSV exporters. This file-format is the same as produced by exportPosesVelocitiesAndBiasesToCsv but differs from the output of exportVerticesAndTracksToCsv
This package depends on ROS and PCL.
Parameter | Description | Default |
---|---|---|
min_point_distance |
Minimum range a point can be from the lidar and still be included in the optimization. | 0.0 |
max_point_distance |
Maximum range a point can be from the lidar and still be included in the optimization. | 100.0 |
keep_points_ratio |
Ratio of points to use in the optimization (runtimes increase drastically as this is increased). | 0.01 |
min_return_intensity |
The minimum return intensity a point requires to be considered valid. | -1.0 |
motion_compensation |
If the movement of the lidar during a scan should be compensated for. | true |
estimate_point_times |
Uses the angle of the points in combination with lidar_rpm and clockwise_lidar to estimate the time a point was taken at. |
false |
lidar_rpm |
Spin rate of the lidar in rpm, only used with estimate_point_times . |
600 |
clockwise_lidar |
True if the lidar spins clockwise, false for anti-clockwise, only used with estimate_point_times . |
false |
Parameter | Description | Default |
---|---|---|
use_n_scans |
Optimization will only be run on the first n scans of the dataset. | 2147483647 |
input_bag_path |
Path of rosbag containing sensor_msgs::PointCloud2 messages from the lidar. | N/A |
transforms_from_csv |
True to load scans from a csv file, false to load from the rosbag. | false |
input_csv_path |
Path of csv generated by Maplab, giving poses of the system to calibrate to. | N/A |
output_pointcloud_path |
If set, a fused pointcloud will be saved to this path as a ply when the calibartion finishes. | "" |
output_calibration_path |
If set, a text document giving the final transform will be saved to this path when the calibration finishes. | "" |
Parameter | Description | Default |
---|---|---|
local |
If False a global optimzation will be performed and the result of this will be used in place of the inital_guess parameter. |
false |
inital_guess |
Inital guess to the calibration (x, y, z, rotation vector, time offset), only used if running in local mode. |
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] |
max_baseline |
Maximum distance between sensors to consider during the global optimization stage. | 1.0 |
max_time_offset |
Maximum time offset between sensor clocks in seconds. | 0.1 |
angular_range |
Search range in radians around the inital_guess during the local optimization stage. |
0.5 |
translational_range |
Search range around the inital_guess during the local optimization stage. |
0.5 |
max_evals |
Maximum number of function evaluations to run | 2000 |
xtol |
Tolerance of final solution | 0.000001 |
knn_batch_size |
Number of points to send to each thread when finding nearest points | 1000 |
knn_k |
Number of neighbours to consider in error function | 1 |
global_knn_max_dist |
Error between points is limited to this value during global optimization. | 1.0 |
local_knn_max_dist |
Error between points is limited to this value during local optimization. | 0.1 |
time_cal |
True to perform time offset calibration | true |