The LiDAR Processing Pipeline showcases classical point cloud data processing techniques, leveraging libraries such as PCL and ROS2 (Humble). While PCL data structures are extensively utilized throughout the pipeline stages, efforts have been made to minimize reliance on third-party algorithms by developing most of the required data structures in-house. However, a complex algorithm like Delaunay triangulation is integrated using the Delaunator library, which has been modified to enable the construction of a concave hull from the triangulation. This pipeline efficiently performs ground segmentation, obstacle clustering, and polygonization, and it presents the results through real-time visualization in RViz2. The Dataloader node publishes sensor_msgs::msg::PointCloud2
data at regular intervals (10 Hz), thereby constraining the processing pipeline to a 100 ms processing window to simulate real-time operation.
The algorithm is based on the research paper "Fast Segmentation of 3D Point Clouds: A Paradigm on LiDAR Data for Autonomous Vehicle Applications". It begins by subdividing the point cloud into multiple segments along the x-direction. Initially, seed points are randomly chosen to estimate the ground plane within each segment. This process involves an iterative procedure where the ground plane fit is refined within each segment through successive iterations.
To perform clustering on segmented LiDAR points I used the adaptation of Fast Euclidean Clustering. This is a hierarchical clustering algorithm designed for efficient clustering of cartesian point cloud data. The algorithm starts by partitioning the dataset into smaller subsets. These subsets are then progressively merged based on a predefined threshold distance, which determines if two subsets are close enough to be considered part of the same cluster.
The obstacle cloud clusters are post-processed further, finding simplified polygon shapes around 3D point clusters. Polygonization is based on finding the concave hull simplification. The method relies on the efficient construction of concave polygons outlined in Duckham et.al "Efficient generation of simple polygons for characterizing the shape of a set of points in the plane". The concave algorithm begins with Delaunay triangulation, using it as a foundational step for refining the perimeter of the convex outline to better conform to the actual spread of points, preserving the 2.5D flattened cluster shape.
Dependencies:
- ROS2 (Humble or compatible versions of ROS2)
- PCL
- Eigen3
- TBB
To build the project, navigate to the project directory and run ./build.sh
to compile.
Run ./launch.sh
to start the processing nodes and visualization tools.
Data from the data/
directory is read and published on the pointcloud
topic at a frequency of 10 Hz in sensor frame (without applying coordinate transforms). The processing node subscribes to the topic and performs processing steps within the same thread, publishing visualizable messages on several topics, including ground_pointcloud
, obstacle_pointcloud
, clustered_pointcloud
, and polygonization
.