Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cuCONERUSH

cuCONERUSH is a GPU-first ROS 2 package for real-time LiDAR cones detection. The runtime package name is cuda_cone_rush.

The processing pipeline stays on CUDA buffers across stages:

PointCloud2 -> optional XYZ filter -> optional ground segmentation -> optional voxel clustering -> cone markers

TODO

[cuda_cone_rush_node-1] [WARN] [1775749308.140774720] [cuda_cone_rush_node]: Not enough points for clustering (0 < 1)
[cuda_cone_rush_node-1] terminate called after throwing an instance of 'thrust::THRUST_200500_520_NS::system::system_error'
[cuda_cone_rush_node-1]   what():  parallel_for failed: cudaErrorInvalidDevice: invalid device ordinal
[ERROR] [cuda_cone_rush_node-1]: process has died [pid 8233, exit code -6, cmd '/home/orin/ros2_dev/install/cuda_cone_rush/lib/cuda_cone_rush/cuda_cone_rush_node --ros-args -r __node:=cuda_cone_rush_node --params-file /home/orin/ros2_dev/install/cuda_cone_rush/share/cuda_cone_rush/config/config.yaml'].

Tested on

Lidar Points Board avg exec (ms)
128K Orin Nano Super 10ms
128K Orin Dev 2048 cuda 5ms
128K RTX 4060 Mobile 3072 cuda 1.1ms

What Is Included

  • CUDA passthrough filtering (cuda_filtering)
  • CUDA RANSAC ground segmentation (cuda_segmentation)
  • CUDA voxel clustering + cone dimension filtering (cuda_clustering + cluster_filtering)
  • Two point cloud conversion backends:
    • CUDA backend (src/utils/cuda_pointcloud_converter.cu)
    • CPU backend (src/utils/pointcloud_converter.cpp)
  • Optional performance logging to ROS topic (LOGGER_PUB)

Requirements

  • ROS 2 Humble
  • CUDA Toolkit
  • PCL
  • ament_cmake

Build

From your workspace root:

cd ~/ros2_ws
colcon build --packages-select cuda_cone_rush
source install/setup.bash

CMake Options

These options are available in CMakeLists.txt:

Option Default Description
ENABLE_VERBOSE OFF Prints processing timings to stdout
LATENCY_TESTING OFF Print latency information for each BARQ callback
USE_CUDA_POINTCLOUD_CONVERTER ON Uses CUDA converter instead of CPU converter
USE_PINNED_MEMORY ON on x86, OFF otherwise Enables pinned host memory for host/device transfers
NSIGHT_SDK OFF Set an execution limit for NVIDIA Nsight Systems profiling

Example:

colcon build --packages-select cuda_cone_rush --cmake-args -DENABLE_VERBOSE=ON -LATENCY_TESTING=ON

Run

cd ~/ros2_ws
source install/setup.bash
ros2 launch cuda_cone_rush cudaconerush.launch.py

Configuration

Parameters are loaded from config/config.yaml under /cuda_cone_rush_node.

Topics

  • input_topic
  • filtered_topic
  • segmented_topic
  • cluster_topic
  • frame_id

Clustering

  • minClusterSize
  • maxClusterSize
  • voxelX
  • voxelY
  • voxelZ
  • countThreshold

Cluster Dimension Filter

  • clusterMaxX, clusterMaxY, clusterMaxZ
  • clusterMinX, clusterMinY, clusterMinZ
  • maxHeight

Passthrough Filter Bounds

  • downFilterLimitX, upFilterLimitX
  • downFilterLimitY, upFilterLimitY
  • downFilterLimitZ, upFilterLimitZ

Segmentation

  • distanceThreshold
  • maxSegmentationDistance
  • maxIterations
  • probability

Pipeline Toggles and Timing Guard

  • filter
  • publishFilteredPc
  • segment
  • publishSegmentedPc
  • clustering
  • publishCluster
  • limitWarning_ms

ROS 2 Interface

Subscriptions:

  • input_topic (sensor_msgs/msg/PointCloud2)

Publications:

  • filtered_topic (sensor_msgs/msg/PointCloud2) when publishFilteredPc=true
  • segmented_topic (sensor_msgs/msg/PointCloud2) when publishSegmentedPc=true
  • cluster_topic (visualization_msgs/msg/Marker) when publishCluster=true
  • /logger/clustering/time (std_msgs/msg/Float64) when compiled with LOGGER_PUB=ON

Package Layout

src/
    main.cpp
    controller_node.cu
    filtering/cuda_filtering.cu
    segmentation/cuda_segmentation.cu
    clustering/cuda_clustering.cu
    clustering/cluster_filtering/dimension_filter.cpp
    utils/cuda_pointcloud_converter.cu
    utils/pointcloud_converter.cpp

include/cuda_cone_rush/
    controller_node.hpp
    filtering/
    segmentation/
    clustering/
    utils/

License

Apache-2.0