Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2.5.3 Complete Point Cloud Processing Pipeline

Authors
Affiliations
Delft University of Technology
Delft University of Technology
Updated: 02 Oct 2026

This section shows the practices employed to process the point cloud received from the camera topic /camera/depth/points. Even though the inner workings of the specific functions used are outside the scope of this project, their influence is highlighted here to show their importance.

For completeness, a point cloud is included below to give an impression of what the input of the pipeline looks like as received from the point cloud topic.

Source
Loading...

To do this, a sample point cloud has been saved from the Gazebo simulation and is used as the input to a filtering pipeline built with the Open3D Python library:

  • steps:

    • Crop the point cloud to include only points below a given height.

    • Copy a downsampled version of the point cloud to speed up future calculations.

    • Iteratively detect planes and remove the corresponding points from both point clouds. From there, the downsampled point cloud will not be used anymore.

    • Detect clusters from the remaining points.

    • Create bounding boxes for these clusters.

    • Reject boxes that overlap with the costmap.

Any remaining bounding boxes are published as detected objects.

The entire pipeline, including the individual effect of each step, is shown below:

First, the original point cloud is created from the camera’s depth image, as shown in Figure 1.

The point cloud as received from the camera topic including the eventual bounding boxes

Figure 1:The point cloud as received from the camera topic including the eventual bounding boxes

Next, this point cloud is downsampled. Note that the resolution afterwards is still quite high. This is because the objects are very small, and reducing the resolution dramatically would lose details of these objects, reducing bounding-box accuracy. An example is shown below in Figure 2.

The downsampled point cloud

Figure 2:The downsampled point cloud

In the downsampled point cloud, planes are detected using RANSAC plane segmentation Fischler & Bolles, 1981. With this, large planes such as walls and tabletops are discarded from the point cloud, as can be seen in Figure 3.

The plane-segmented point cloud

Figure 3:The plane-segmented point cloud

Now, the remaining points are cross-referenced with the costmap obtained during mapping. Any point that lies on the costmap is excluded from the point cloud, resulting in the point cloud depicted in Figure 4.

The point cloud containing only points belonging to free objects

Figure 4:The point cloud containing only points belonging to free objects

Finally, the remaining points are converted to clusters using DBSCAN Ester et al., 1996. This enables the construction of a bounding box for each cluster, each of which represents an object. Bounding boxes, however faint, can be made out in Figure 5 below.

Bounding boxes (in front of the robot) are drawn around the remaining clusters.

Figure 5:Bounding boxes (in front of the robot) are drawn around the remaining clusters.

Information about these bounding boxes is then published on a ROS 2 topic, which is later used to approach and pick up the corresponding objects.

References
  1. Fischler, M. A., & Bolles, R. C. (1981). Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography. Commun. ACM, 24(6), 381–395. 10.1145/358669.358692
  2. Ester, M., Kriegel, H.-P., Sander, J., & Xu, X. (1996). A density-based algorithm for discovering clusters in large spatial databases with noise. Proceedings of the Second International Conference on Knowledge Discovery and Data Mining, 226–231.