[Documentation] [TitleIndex] [WordIndex



The pointcloud_registration package primarily subscribes to a sensor_msgs::PointCloud topic to receive point clouds and then registers them in a global frame, one cloud at a time. The pointcloud_registration package implements the ICP algorithm but with a few modifications as explained below.


Traditional ICP looks for correspondences between the source and target point clouds using the nearest neighbour search, estimates transformation and applies this to the correspondences and iterates this procedure until a satisfactory transformation is achieved.

In our case, we modified the ICP a bit to improve our correspondences which eventually leads to better transformation.

Firstly, the overlapping regions between the source and target point clouds are extracted by examining the nearest neighbors of each point in the source with the points in the target. This is done using a KdTree to improve efficiency. The overlapping regions were then used as the source and target point clouds for the ICP. This was done in order to improve the correspondence search in the ICP algorithm.

Using a radius of 10cm (in our case) for the fixed radius search, the first set of correspondences were selected out of these source and target point clouds. The correspondences were then filtered based on the following two criterion:

ROS Parameters

~<name>/publish_merged_pointcloud_topic (string, default: "/merged_pointcloud")

~<name>/subscribe_pointcloud_topic (string, default: "/shoulder_cloud")

~<name>/max_number_of_iterations_icp (int, default: 100)

~<name>/max_nn_icp (int, default: 10)

~<name>/max_nn_overlap (int, default: 20)

~<name>/radius_icp (double, default: 0.1)

~<name>/radius_overlap (double, default: 0.1)

~<name>/filter_outliers (bool, default: true)

~<name>/downsample_pointcloud_before (bool, default: false)

~<name>/downsample_pointcloud_after (bool, default: true)

~<name>/downsample_leafsize (double, default: 0.035)

~<name>/epsilon_z (double, default: 0.01)

~<name>/curvature_check (bool, default: true)

~<name>/epsilon_curvature (double, default: 0.01)

~<name>/epsilon_transformation (double, default: 1e-8)

2024-06-22 13:13