Skip to content

multirobotplayground/pointcloud_ground_segmentation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Point Cloud Ground Segmentation

This ROS 2 module performs ground segmentation on LiDAR point clouds using the ground segmentation algorithm from the Robust Field Autonomy Lab, originally developed as part of the lego_loam SLAM system.

Overview

Ground segmentation is a critical preprocessing step in many robotics applications such as autonomous navigation and SLAM. This implementation leverages the ground segmentation technique from LeGO-LOAM, which classifies ground and non-ground points in 3D LiDAR scans based on geometric features and elevation gradients.

Features

  • Efficient ground/non-ground point classification
  • Compatible with standard point cloud formats (e.g., ROS sensor_msgs/PointCloud2)
  • Designed for real-time performance in outdoor environments
  • Can be integrated as a preprocessing node in SLAM or obstacle detection pipelines

ROS Interface

Subscribed Topics

  • /lidar/points (sensor_msgs/PointCloud2)
    The input point cloud data, typically from a 3D LiDAR sensor. This topic should contain the full point cloud from which ground and segmented (non-ground) points will be extracted.

Published Topics

  • /ground_cloud (sensor_msgs/PointCloud2)
    Contains only the points classified as ground. Useful for mapping flat surfaces or terrain.

  • /segmented_cloud_pure (sensor_msgs/PointCloud2)
    Contains the remaining non-ground points (e.g., obstacles, structures, vegetation).


Parameters

laser Namespace

Parameter Name Type Default Description
num_vertical_scans int 16 Number of vertical scan lines (rings) in the LiDAR sensor (e.g., Velodyne VLP-16).
num_horizontal_scans int 1800 Number of horizontal resolution bins. Higher values provide finer angular resolution.
vertical_angle_bottom double -15.0 Vertical angle (in degrees) of the lowest LiDAR scan ring.
vertical_angle_top double 15.0 Vertical angle (in degrees) of the highest LiDAR scan ring.
sensor_mount_angle double 0.0 Mounting angle of the LiDAR sensor (in degrees). Adjust if the sensor is tilted.
ground_scan_index int 7 Index of the scan ring up to which points are considered for ground segmentation.

image_projection Namespace

Parameter Name Type Default Description
segment_valid_point_num int 5 Minimum number of consecutive valid points required in a segment to consider it valid.
segment_valid_line_num int 3 Minimum number of different scan lines that must contain valid points in a segment.
segment_theta double 60.0 Angle threshold (in degrees) used to determine whether a group of points belongs to the same segment.

All parameters can be configured via a YAML configuration file or dynamically on the ROS parameter server.

References

  • M. Himmelsbach, F.V. Hundelshausen, and H-J. Wuensche, “Fast Segmentation of 3D Point Clouds for Ground Vehicles,” Proceedings of the IEEE Intelligent Vehicles Symposium, pp. 560-565, 2010.
  • I. Bogoslavskyi and C. Stachniss, “Fast Range Image-based Segmentation of Sparse 3D Laser Scans for Online Operation,” Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 163-169, 2016.
  • Shan, T. & Englot, B. (2018). LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain. IEEE IROS

License

This project is licensed under the GPLv3 license.

About

Michael Himmelsbach ground segmentation implementation from the RobustFieldAutonomyLab, adapted by Alysson Ribeiro da Silva.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •