Skip to content

nuaa-rm/linefit_ground_segmentation

 
 

Repository files navigation

linefit_ground_segmentation

Implementation of the ground segmentation algorithm proposed in

@inproceedings{himmelsbach2010fast,
  title={Fast segmentation of 3d point clouds for ground vehicles},
  author={Himmelsbach, Michael and Hundelshausen, Felix V and Wuensche, H-J},
  booktitle={Intelligent Vehicles Symposium (IV), 2010 IEEE},
  pages={560--565},
  year={2010},
  organization={IEEE}
}

The linefit_ground_segmentation package contains the ground segmentation library. A ROS interface is available in linefit_ground_segmentation_ros

The library can be compiled separately from the ROS interface if you're not using ROS.

Installation

Requires the following dependencies to be installed:

  • catkin_simple https://github.com/catkin/catkin_simple.git
  • eigen_conversions sudo apt install ros-noetic-eigen-conversions

Compile using your favorite catkin build tool (e.g. catkin build linefit_ground_segmentation_ros)

Launch instructions

The ground segmentation ROS node can be launch by executing roslaunch linefit_ground_segmentation_ros segmentation.launch. Input and output topic names can be specified in the same file.

Getting up and running with your own point cloud source should be as simple as:

  1. Change the input_topic parameter in segmentation.launch to your topic.
  2. Adjust the sensor_height parameter in segmentation_params.yaml to the height where the sensor is mounted on your robot (e.g. KITTI Velodyne: 1.8m)

Parameter description

Parameters are set in linefit_ground_segmentation_ros/launch/segmentation_params.yaml

This algorithm works on the assumption that you known the height of the sensor above ground. Therefore, you have to adjust the sensor_height to your robot specifications, otherwise, it will not work.

The default parameters should work on the KITTI dataset.

Ground Condition

  • sensor_height Sensor height above ground.
  • max_dist_to_line maximum vertical distance of point to line to be considered ground.
  • max_slope Maximum slope of a line.
  • min_slope Minimum slope of a line.
  • max_fit_error Maximum error a point is allowed to have in a line fit.
  • max_start_height Maximum height difference between new point and estimated ground height to start a new line.
  • long_threshold Distance after which the max_height condition is applied.
  • max_height Maximum height difference between line points when they are farther apart than long_threshold.
  • line_search_angle How far to search in angular direction to find a line. A higher angle helps fill "holes" in the ground segmentation.
  • gravity_aligned_frame Name of a coordinate frame which has its z-axis aligned with gravity. If specified, the incoming point cloud will be rotated, but not translated into this coordinate frame. If left empty, the sensor frame will be used.

Segmentation

  • r_min Distance at which segmentation starts.
  • r_max Distance at which segmentation ends.
  • n_bins Number of radial bins.
  • n_segments Number of angular segments.

Other

  • n_threads Number of threads to use.
  • latch Latch output point clouds in ROS node.
  • visualize Visualize the segmentation result. ONLY FOR DEBUGGING. Do not set true during online operation.

About

Ground Segmentation from Lidar Point Clouds

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 93.3%
  • Python 3.8%
  • CMake 2.9%