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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
jazzy

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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_specs autoware_geography_utils autoware_global_parameter_loader 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_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_planning_test_manager autoware_pyplot autoware_test_node autoware_test_utils autoware_testing autoware_core_vehicle

ROS Distro
humble

Package Summary

Version 1.9.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-07-03
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

(Optional) Error detection and handling

(Optional) Performance characterization

(Optional) Future extensions / Unimplemented parts

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package autoware_euclidean_cluster_object_detector

1.9.0 (2026-06-24)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering (#1124)

    * perf(autoware_euclidean_cluster_object_detector): eliminate hot-loop allocations in clustering Build the output clusters in place with emplace_back instead of heap-allocating a pcl::PointCloud via new and deep-copying it into the output vector per cluster, and reserve the per-cluster point buffers up front. Cache the single unordered_map hash lookup per input point in the voxel path (previously map[index] was re-probed several times), reserve the map, and reserve the 2D-flatten loops in both implementations. Internal-only and behavior-preserving; the public cluster() API is unchanged. Characterization tests pinning cluster membership, per-point coordinates, the empty -input path, and the objects/clusters lockstep relationship are added first to prove equivalence. Refs: autowarefoundation/autoware_core#1096

    • fix(autoware_euclidean_cluster_object_detector): address review feedback
    • Replace pcl::PointCloud::emplace_back with push_back for PCL portability

    - Correct centroid comment to match the asserted x/y bounds Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin empty-cloud input on implemented voxel cluster overload (#71) Add a characterization test calling the implemented 3-arg VoxelGridBasedEuclideanCluster::cluster(msg, objects, clusters) overload with an empty point cloud, pinning that it returns true with empty objects and clusters (no crash, no guard needed). Refs: autowarefoundation/autoware_core#1096

    * test(autoware_euclidean_cluster_object_detector): pin clustering output via set comparison Rewrite the clustering test so the named input point sets are the single source of truth: sort the points within each cluster and the clusters themselves, then assert a single EXPECT_EQ against {near_points_, far_points_}. Drops the per-point if-reclassification and the tautological near/far counters that re-derived the production decision on the test side, per review. Refs: autowarefoundation/autoware_core#1096 ---------

  • Contributors: Yutaka Kondo, github-actions

1.8.0 (2026-05-01)

  • Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base

  • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings (#938)

    • fix(autoware_euclidean_cluster_object_detector): fix bugprone-narrowing-conversions warnings

    * style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class (#941)

    • refactor(autoware_crop_box_filter): rename CropBoxFilter node class to CropBoxFilterNode
    • refactor(autoware_crop_box_filter): extract CropBoxFilter logic class
    • refactor(autoware_crop_box_filter): remove output_frame from CropBoxFilterConfig

    * refactor(autoware_crop_box_filter): remove unnecessary member variables Convert tf_input_orig_frame_ and max_queue_size_ to local variables as they are only used in the constructor.

    • test(autoware_crop_box_filter): add unit tests for preprocess and postprocess transform
    • refactor(crop_box_filter): rename variable for clarity in transform handling

    * refactor(crop_box_filter): simplify transform handling by removing has_value checks ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>> Co-authored-by: Junya Sasaki <<j2sasaki1990@gmail.com>>

  • chore(euclidean_cluster): move header files from include to src (#869)

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