GroundGrid LiDAR Ground Segmentation and Terrain Estimation

repository·main·Indexed 42 days ago

https://github.com/dcmlr/groundgrid

A system for LiDAR point cloud ground segmentation and terrain estimation. It includes tools for processing SemanticKITTI datasets, evaluating segmentation accuracy (Precision, Recall, F1, Accuracy, and IoU), and a ROS-integrated nodelet interface. Supports ROS Noetic Ninjemys and provides a port for ROS2 Jazzy.

Tokens
881
Snippets
3
Records
6
Agent score
4%

What's inside GroundGrid

  1. Evaluate Ground Segmentation performance

    main

    To evaluate the performance of GroundGrid on a SemanticKITTI dataset, use the KITTIEvaluate.launch file.

    • Execution: Provide the directory and sequence arguments.
    • Monitoring: The launch file displays results every 500 processed clouds.
    • Final Results: Detailed statistics (including Precision, Recall, F1, Accuracy, and IoU) are printed to the terminal when the process is interrupted with Ctrl+C.
    roslaunch groundgrid KITTIEvaluate.launch directory:=/path/to/the/SemanticKITTI/dataset sequence:=0
  2. Play back SemanticKITTI dataset with GroundGrid

    main

    To visualize segmentation results in RViz using a SemanticKITTI dataset, use the KITTIPlayback.launch file. You must provide the path to the dataset directory and the specific sequence number via ROS launch arguments.

    roslaunch groundgrid KITTIPlayback.launch directory:=/path/to/the/SemanticKITTI/dataset sequence:=0
  3. Install and Build GroundGrid

    main

    GroundGrid requires a ROS Noetic Ninjemys environment. Ensure all dependencies (including catkin, roscpp, grid_map_*, pcl_ros, and velodyne_pointcloud) are installed before building. Use catkin build with the Release build type to compile the groundgrid package.

    catkin build -DCMAKE_BUILD_TYPE=Release groundgrid
  4. Configure GroundGrid via dynamic_reconfigure

    main

    The GroundGridNodelet exposes its parameters through the ROS dynamic_reconfigure mechanism. You can adjust the segmentation and grid map parameters at runtime without restarting the nodelet. The configuration is managed via the groundgrid::GroundGridConfig object, which updates both the core GroundGrid logic and the GroundSegmentation filter.

    To use this, you can use standard ROS tools like rqt_reconfigure to interact with the parameters visually.

  5. GroundGrid ROS2 Nodelet Interface

    main

    The GroundGridNodelet provides a ROS-integrated service for LiDAR point cloud ground segmentation and terrain estimation. It operates as a nodelet, consuming odometry and point cloud data to maintain a global grid map and output segmented clouds and terrain visualizations.

    Input Topics

    • Odometry: /localization/odometry/filtered_map (Type: nav_msgs/Odometry) - Used to update the global grid map position.
    • Point Cloud: /sensors/velodyne_points (Type: sensor_msgs/PointCloud2) - The raw LiDAR input for segmentation.

    Output Topics

    • Segmented Cloud: groundgrid/segmented_cloud (Type: sensor_msgs/PointCloud2) - The filtered point cloud containing only ground points.
    • Grid Map: groundgrid/grid_map (Type: grid_map_msgs/GridMap) - The processed terrain grid map.
    • Terrain Image: groundgrid/terrain (Type: sensor_msgs/Image) - A specialized 32FC3 image used for terrain evaluation.
    • Grid Map Layers (CV): groundgrid/grid_map_cv_<layer_name> (Type: sensor_msgs/Image) - Visualized OpenCV images for specific grid map layers (e.g., groundgrid/grid_map_cv_ground).
    • Grid Map Layer (CV): groundgrid/grid_map_cv (Type: sensor_msgs/Image) - A general CV visualization of the grid map.

    Configuration

    The nodelet supports runtime reconfiguration via dynamic_reconfigure using the groundgrid::GroundGridConfig type.