Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
jazzy

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro kilted showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro lyrical showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro rolling showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

autoware_euclidean_cluster_object_detector package from autoware_core repo

autoware_adapi_adaptors autoware_adapi_specs autoware_core_api autoware_default_adapi autoware_core autoware_agnocast_wrapper autoware_component_interface_admission autoware_component_interface_specs autoware_component_interface_utils autoware_geography_utils autoware_global_parameter_loader autoware_interface_spec_lint autoware_interpolation autoware_kalman_filter autoware_lanelet2_utils autoware_marker_utils autoware_motion_utils autoware_node autoware_object_recognition_utils autoware_osqp_interface autoware_point_types autoware_qos_utils autoware_qp_interface autoware_signal_processing autoware_trajectory autoware_vehicle_info_utils autoware_command_gate autoware_core_control autoware_simple_pure_pursuit autoware_awsim_sensor_kit_description autoware_sample_sensor_kit_description autoware_sample_vehicle_description autoware_core_localization autoware_ekf_localizer autoware_gyro_odometer autoware_localization_util autoware_ndt_scan_matcher autoware_pose_initializer autoware_stop_filter autoware_twist2accel autoware_core_map autoware_lanelet2_map_visualizer autoware_map_height_fitter autoware_map_loader autoware_map_projection_loader autoware_core_perception autoware_euclidean_cluster_object_detector autoware_ground_filter autoware_perception_objects_converter autoware_core_planning autoware_mission_planner autoware_objects_of_interest_marker_interface autoware_path_generator autoware_planning_factor_interface autoware_planning_test_manager autoware_planning_topic_converter autoware_route_handler autoware_velocity_smoother autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_stop_line_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_core_sensing autoware_crop_box_filter autoware_downsample_filters autoware_gnss_poser autoware_vehicle_velocity_converter autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.10.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/autowarefoundation/autoware_core.git
VCS Type git
VCS Version main
Last Updated 2026-10-07
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

The autoware_euclidean_cluster_object_detector package

Maintainers

  • Yukihiro Saito
  • Dai Nguyen

Authors

No additional authors.

autoware_euclidean_cluster_object_detector

Purpose

autoware_euclidean_cluster_object_detector is a package for clustering points into smaller parts to classify objects.

This package has two clustering methods: euclidean_cluster and voxel_grid_based_euclidean_cluster.

Inner-workings / Algorithms

euclidean_cluster

pcl::EuclideanClusterExtraction is applied to points. See official document for details.

voxel_grid_based_euclidean_cluster

  1. A centroid in each voxel is calculated by pcl::VoxelGrid.
  2. The centroids are clustered by pcl::EuclideanClusterExtraction.
  3. The input points are clustered based on the clustered centroids.

Inputs / Outputs

Input

Name Type Description
input sensor_msgs::msg::PointCloud2 input pointcloud

Output

Name Type Description
output autoware_perception_msgs::msg::DetectedObjects detected objects
debug/clusters sensor_msgs::msg::PointCloud2 colored cluster pointcloud for visualization

Parameters

Core Parameters

euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space

voxel_grid_based_euclidean_cluster

Name Type Description
use_height bool use point.z for clustering
min_cluster_size int the minimum number of points that a cluster needs to contain in order to be considered valid
max_cluster_size int the maximum number of points that a cluster needs to contain in order to be considered valid
tolerance float the spatial cluster tolerance as a measure in the L2 Euclidean space
voxel_leaf_size float the voxel leaf size of x and y
min_points_number_per_voxel int the minimum number of points for a voxel

Assumptions / Known limits

Cluster size limits

The two size parameters are assumed to satisfy 1 <= min_cluster_size <= max_cluster_size. The nodes do not check this, and the behaviour is undefined otherwise.

(Optional) Error detection and handling

(Optional) Performance characterization

<!– Write links you referred to when you implemented.

Example:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.10.0 (2026-09-28)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
  • test(euclidean_cluster_object_detector): fixed test euclidian cluser (#1393) test(autoware_euclidean_cluster_object_detector): make the voxel-grid tests deterministic The tests drew their point coordinates from an unseeded RNG. [testcase3]{.title-ref} failed in CI about 20% of the time, and no failure could be reproduced, because no seed was recorded. The input clouds are now written out as literal points. - [testcase1/2/3]{.title-ref} are renamed after the limit each one exercises, and they pin [skipped_cluster_count]{.title-ref} as well. - [ExceedMaxClusterSize]{.title-ref} is removed. It drove the same rejection path as the max-size case and asserted less about it. - New cases cover several objects in one scan, a count sitting on both limits at once, a contradictory pair of limits, and skipping decided per cluster. - [BoundaryVoxelPointsAreNotDropped]{.title-ref} is unchanged. It came from the regression fixed in #1376. - Outside the tests, the map key in [cluster_voxel_grid()]{.title-ref} is renamed from [voxel_1d_idx]{.title-ref} to [centroid_idx]{.title-ref}. [getCentroidIndexAt()]{.title-ref} returns an index into the filtered centroid cloud, not the grid cell index the old name claimed.
    • The README states the assumed range for the two size limits.
  • fix(perception): declare the dependencies these packages use (#1371) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers.
  • fix(autoware_euclidean_cluster_object_detector): keep boundary voxel points in their clusters (#1376) The detector recomputed the map key of each voxel from the float coordinates of its centroid. The centroid is a float mean. For points that sit exactly on a cell boundary, this mean rounds to one float step under the boundary. The recomputed key then pointed to the neighbor cell, and the detector dropped the raw points of that voxel. The oversized cluster in VoxelGridBasedEuclideanClusterTest.testcase3 then passed the max_cluster_size check, and the test failed intermittently. Key the map by the centroid index instead. This index is the same value that getCentroidIndexAt() returns for the raw points. Add a deterministic regression test for the boundary case.
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (SECOND HALF) (#1244)
    • added voxel grid cluster into core logic header, and specify a strategy gate to init once at startup
    • implemented voxel_grid algorithm into the core logic module, with a nice touch of init once to address Akamine-san concern
    • node unification between cluster standard and cluster nvoxel grid with a bunch of diagnostic added
    • removed legacy files from old voxel grid structure, now already unified into core logics
    • adjusted launch file to reflect new voxel grid locs
    • purged voxel_grid relatives from cmakelist
    • refactor test_euclidean_cluster_object_detection_integration.cpp test suite
    • refactor test_node.cpp test suite
    • heavy refactor of test_voxel_grid_based_euclidean_cluster.cpp test suite
    • added the weird 2D flattening feature inside the voxel grid clustering
    • removed redundant test inside tesdt voxel
    • fixedspellcheck error (why Akamine-san's name does not pass the spellcheck?)
    • bring back the voxel grid based euclidean cluster node header hpp
    • reimplement voxel grid based euclidean cluster node source cpp
    • clean up standard node, remove the voxel leaf size delcairation
    • reimplemented voxel grid stuffs to CMakeLists
    • fixed launch revert back to voxel node
    • successfully reverted to the dual-node architecture
    • fully reverted to dual nodes, all builds tests good now
    • spell check and cpp ckeck diff fix
  • feat: [codecov/refactoring] [euclidean_cluster_object_detector] Core logic isolation (FIRST HALF) (#1239)
    • implemented master params struct for this node new refactoring
    • implemented ros_conversions.cpp/.hpp
    • implemented euclidean_cluster_object_detector.hpp as the header for core logic, now with only cluster_standard
    • implemented euclidean_cluster_object_detector.cpp as the source for core logic, now with only cluster_standard
    • euclidean_cluster_node core logic refine, now only with cluster_standard()

File truncated at 100 lines see the full file

Launch files

  • launch/euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]
  • launch/voxel_grid_based_euclidean_cluster.launch.xml
      • input_pointcloud [default: /sensing/lidar/top/pointcloud_raw]
      • input_map [default: /map/pointcloud_map]
      • output_clusters [default: clusters]
      • use_low_height_cropbox [default: false]
      • voxel_grid_based_euclidean_param_path [default: $(find-pkg-share autoware_euclidean_cluster_object_detector)/config/voxel_grid_based_euclidean_cluster.param.yaml]
      • use_pointcloud_container [default: false]
      • pointcloud_container_name [default: pointcloud_container]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged autoware_euclidean_cluster_object_detector at Robotics Stack Exchange