From 9f6a19f15ec48a99121bf267f3e34aa512f9cd24 Mon Sep 17 00:00:00 2001 From: wesley Date: Sat, 9 May 2026 17:42:53 +0000 Subject: [PATCH 1/9] feat: support for cluster spike det --- bb_perception_msgs/CMakeLists.txt | 2 ++ .../action/ClusterPosesAction.action | 17 +++++++++++++++++ bb_perception_msgs/msg/ClusterSpikeStatus.msg | 14 ++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 bb_perception_msgs/msg/ClusterSpikeStatus.msg diff --git a/bb_perception_msgs/CMakeLists.txt b/bb_perception_msgs/CMakeLists.txt index 71ac67d..3548d7e 100644 --- a/bb_perception_msgs/CMakeLists.txt +++ b/bb_perception_msgs/CMakeLists.txt @@ -32,6 +32,8 @@ set(message_files msg/ClusteredCloud.msg msg/ClusteredClouds.msg + msg/ClusterSpikeStatus.msg + msg/PointCorrespondencesStamped.msg ) diff --git a/bb_perception_msgs/action/ClusterPosesAction.action b/bb_perception_msgs/action/ClusterPosesAction.action index b186adc..cd364ac 100644 --- a/bb_perception_msgs/action/ClusterPosesAction.action +++ b/bb_perception_msgs/action/ClusterPosesAction.action @@ -8,11 +8,28 @@ int32 min_poses 10 # Minimum number of synchronized poses required int32 min_cluster_size 2 int32 min_samples 1 float64 cluster_selection_epsilon 0.05 + +# Spike detection (advisory; published on a separate topic, does NOT short-circuit the action) +uint8 CONFIDENCE_MEAN_PROBABILITY=0 +uint8 CONFIDENCE_CLUSTER_PERSISTENCE=1 +uint8 CONFIDENCE_INLIER_RATIO=2 +uint8 CONFIDENCE_POSITION_STD=3 +uint8 primary_confidence_metric 0 # Which metric is surfaced as primary_confidence +float64 spike_window_sec 1.0 # Rolling window used to compute detection rate +float64 spike_rate_threshold 0.0 # Hz; <=0 disables spike detection +float64 min_seconds_between_spike_clusters 0.5 # Throttle for mid-collection clustering +int32 spike_min_poses 5 # Minimum poses required before a spike-triggered cluster runs --- # Result geometry_msgs/PoseStamped clustered_pose int32 total_poses_collected int32 poses_in_cluster +# Confidence breakdown for the final cluster +float64 mean_probability +float64 cluster_persistence +float64 inlier_ratio +float64 position_std +float64 primary_confidence # Value of the metric selected by primary_confidence_metric --- # Feedback float64 collection_progress # 0.0 to 1.0 diff --git a/bb_perception_msgs/msg/ClusterSpikeStatus.msg b/bb_perception_msgs/msg/ClusterSpikeStatus.msg new file mode 100644 index 0000000..895ccbc --- /dev/null +++ b/bb_perception_msgs/msg/ClusterSpikeStatus.msg @@ -0,0 +1,14 @@ +std_msgs/Header header +# Spike detection +bool spike_detected +float64 current_detection_rate # Hz, over the configured rolling window +# Partial cluster (only valid when partial_cluster_available is true) +bool partial_cluster_available +geometry_msgs/PoseStamped partial_clustered_pose +int32 partial_poses_in_cluster +int32 partial_total_poses +float64 partial_mean_probability +float64 partial_cluster_persistence +float64 partial_inlier_ratio +float64 partial_position_std +float64 partial_primary_confidence From 9ff73947bc060163fc76e1462d4778cc807413f6 Mon Sep 17 00:00:00 2001 From: Wesley Date: Wed, 13 May 2026 00:23:14 +0800 Subject: [PATCH 2/9] Add partial cluster max size --- bb_perception_msgs/action/ClusterPosesAction.action | 1 + 1 file changed, 1 insertion(+) diff --git a/bb_perception_msgs/action/ClusterPosesAction.action b/bb_perception_msgs/action/ClusterPosesAction.action index cd364ac..1c90a68 100644 --- a/bb_perception_msgs/action/ClusterPosesAction.action +++ b/bb_perception_msgs/action/ClusterPosesAction.action @@ -19,6 +19,7 @@ float64 spike_window_sec 1.0 # Rolling window used to compute detection rate float64 spike_rate_threshold 0.0 # Hz; <=0 disables spike detection float64 min_seconds_between_spike_clusters 0.5 # Throttle for mid-collection clustering int32 spike_min_poses 5 # Minimum poses required before a spike-triggered cluster runs +int32 partial_cluster_max_size 100 # max snapshot size <= 0 to set unbounded --- # Result geometry_msgs/PoseStamped clustered_pose From 589ebfd88b6beb58465ef61a99f1adc14fa0a8da Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 19 May 2026 16:34:50 +0000 Subject: [PATCH 3/9] feat: add ClusterPosesSrv service --- bb_perception_msgs/CMakeLists.txt | 1 + bb_perception_msgs/srv/ClusterPosesSrv.srv | 49 ++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 bb_perception_msgs/srv/ClusterPosesSrv.srv diff --git a/bb_perception_msgs/CMakeLists.txt b/bb_perception_msgs/CMakeLists.txt index 3548d7e..fcfcd04 100644 --- a/bb_perception_msgs/CMakeLists.txt +++ b/bb_perception_msgs/CMakeLists.txt @@ -39,6 +39,7 @@ set(message_files set(service_files srv/ArucoToggleActivation.srv + srv/ClusterPosesSrv.srv srv/ClusterTfSrv.srv srv/GetObjectCount.srv srv/GetPingCount.srv diff --git a/bb_perception_msgs/srv/ClusterPosesSrv.srv b/bb_perception_msgs/srv/ClusterPosesSrv.srv new file mode 100644 index 0000000..8aa1713 --- /dev/null +++ b/bb_perception_msgs/srv/ClusterPosesSrv.srv @@ -0,0 +1,49 @@ +# Service for cluster_poses_service_node. +# +# enabled=True -> start synchronized accumulation using the request fields below. +# enabled=False -> stop, cluster the accumulated poses, publish + TF-broadcast. +# All non-`enabled` request fields are ignored on stop; the +# configuration baked in at the previous enable=True call is used. +bool enabled + +# --- Output frame IDs (used when enabled=True) --- +# TF frame ID for the spike-detected (mid-collection) intermediate cluster. +# Empty falls back to "spike/cluster". +string spike_cluster_frame_id "" +# TF frame ID broadcast for the final clustered result on stop. +# Empty falls back to "unknown/clustered". +string clustered_child_frame_id "" + +# --- Synchronized subscriber configuration (baked at enable; cannot change while running) --- +string odom_topic +string pose_stamped_topic +int32 sync_queue_size 100 +float64 sync_tolerance 0.05 + +# --- Clustering parameters --- +int32 min_poses 10 +int32 min_cluster_size 5 +int32 min_samples 5 +float64 cluster_selection_epsilon 0.0 + +# --- Spike detection parameters --- +float64 spike_tick_hz 10.0 +float64 spike_window_sec 1.0 +float64 spike_rate_threshold 3.0 +float64 min_seconds_between_spike_clusters 0.5 +int32 spike_min_poses 5 + +# Confidence metric surfaced as primary_confidence on the spike status topic. +uint8 CONFIDENCE_MEAN_PROBABILITY=0 +uint8 CONFIDENCE_CLUSTER_PERSISTENCE=1 +uint8 CONFIDENCE_INLIER_RATIO=2 +uint8 CONFIDENCE_POSITION_STD=3 +uint8 primary_confidence_metric 0 + +# Max snapshot size for partial (mid-collection) clustering; <=0 means unbounded. +int32 partial_cluster_max_size 100 +--- +bool is_enabled +bool is_cluster_success +int32 poses_in_cluster +int32 total_poses_collected From b324f6c1804ea70511954de2272302023ec7c8fb Mon Sep 17 00:00:00 2001 From: SamuelFoo Date: Sun, 24 May 2026 23:47:21 +0200 Subject: [PATCH 4/9] feat: remove spike detection and primary confidence parameters --- .../action/ClusterPosesAction.action | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bb_perception_msgs/action/ClusterPosesAction.action b/bb_perception_msgs/action/ClusterPosesAction.action index 1c90a68..f087e9a 100644 --- a/bb_perception_msgs/action/ClusterPosesAction.action +++ b/bb_perception_msgs/action/ClusterPosesAction.action @@ -8,18 +8,6 @@ int32 min_poses 10 # Minimum number of synchronized poses required int32 min_cluster_size 2 int32 min_samples 1 float64 cluster_selection_epsilon 0.05 - -# Spike detection (advisory; published on a separate topic, does NOT short-circuit the action) -uint8 CONFIDENCE_MEAN_PROBABILITY=0 -uint8 CONFIDENCE_CLUSTER_PERSISTENCE=1 -uint8 CONFIDENCE_INLIER_RATIO=2 -uint8 CONFIDENCE_POSITION_STD=3 -uint8 primary_confidence_metric 0 # Which metric is surfaced as primary_confidence -float64 spike_window_sec 1.0 # Rolling window used to compute detection rate -float64 spike_rate_threshold 0.0 # Hz; <=0 disables spike detection -float64 min_seconds_between_spike_clusters 0.5 # Throttle for mid-collection clustering -int32 spike_min_poses 5 # Minimum poses required before a spike-triggered cluster runs -int32 partial_cluster_max_size 100 # max snapshot size <= 0 to set unbounded --- # Result geometry_msgs/PoseStamped clustered_pose @@ -27,10 +15,8 @@ int32 total_poses_collected int32 poses_in_cluster # Confidence breakdown for the final cluster float64 mean_probability -float64 cluster_persistence float64 inlier_ratio float64 position_std -float64 primary_confidence # Value of the metric selected by primary_confidence_metric --- # Feedback float64 collection_progress # 0.0 to 1.0 From 2356bee39c4ee36a33fdb3eb621240224d5d7068 Mon Sep 17 00:00:00 2001 From: SamuelFoo Date: Mon, 25 May 2026 00:43:48 +0200 Subject: [PATCH 5/9] feat: remove ClusterSpikeStatus message and spike detection parameters --- bb_perception_msgs/CMakeLists.txt | 2 -- bb_perception_msgs/msg/ClusterSpikeStatus.msg | 14 -------------- bb_perception_msgs/srv/ClusterPosesSrv.srv | 19 ------------------- 3 files changed, 35 deletions(-) delete mode 100644 bb_perception_msgs/msg/ClusterSpikeStatus.msg diff --git a/bb_perception_msgs/CMakeLists.txt b/bb_perception_msgs/CMakeLists.txt index fcfcd04..83c8ba5 100644 --- a/bb_perception_msgs/CMakeLists.txt +++ b/bb_perception_msgs/CMakeLists.txt @@ -32,8 +32,6 @@ set(message_files msg/ClusteredCloud.msg msg/ClusteredClouds.msg - msg/ClusterSpikeStatus.msg - msg/PointCorrespondencesStamped.msg ) diff --git a/bb_perception_msgs/msg/ClusterSpikeStatus.msg b/bb_perception_msgs/msg/ClusterSpikeStatus.msg deleted file mode 100644 index 895ccbc..0000000 --- a/bb_perception_msgs/msg/ClusterSpikeStatus.msg +++ /dev/null @@ -1,14 +0,0 @@ -std_msgs/Header header -# Spike detection -bool spike_detected -float64 current_detection_rate # Hz, over the configured rolling window -# Partial cluster (only valid when partial_cluster_available is true) -bool partial_cluster_available -geometry_msgs/PoseStamped partial_clustered_pose -int32 partial_poses_in_cluster -int32 partial_total_poses -float64 partial_mean_probability -float64 partial_cluster_persistence -float64 partial_inlier_ratio -float64 partial_position_std -float64 partial_primary_confidence diff --git a/bb_perception_msgs/srv/ClusterPosesSrv.srv b/bb_perception_msgs/srv/ClusterPosesSrv.srv index 8aa1713..84880a6 100644 --- a/bb_perception_msgs/srv/ClusterPosesSrv.srv +++ b/bb_perception_msgs/srv/ClusterPosesSrv.srv @@ -7,9 +7,6 @@ bool enabled # --- Output frame IDs (used when enabled=True) --- -# TF frame ID for the spike-detected (mid-collection) intermediate cluster. -# Empty falls back to "spike/cluster". -string spike_cluster_frame_id "" # TF frame ID broadcast for the final clustered result on stop. # Empty falls back to "unknown/clustered". string clustered_child_frame_id "" @@ -26,22 +23,6 @@ int32 min_cluster_size 5 int32 min_samples 5 float64 cluster_selection_epsilon 0.0 -# --- Spike detection parameters --- -float64 spike_tick_hz 10.0 -float64 spike_window_sec 1.0 -float64 spike_rate_threshold 3.0 -float64 min_seconds_between_spike_clusters 0.5 -int32 spike_min_poses 5 - -# Confidence metric surfaced as primary_confidence on the spike status topic. -uint8 CONFIDENCE_MEAN_PROBABILITY=0 -uint8 CONFIDENCE_CLUSTER_PERSISTENCE=1 -uint8 CONFIDENCE_INLIER_RATIO=2 -uint8 CONFIDENCE_POSITION_STD=3 -uint8 primary_confidence_metric 0 - -# Max snapshot size for partial (mid-collection) clustering; <=0 means unbounded. -int32 partial_cluster_max_size 100 --- bool is_enabled bool is_cluster_success From 06bd368560731a8abc8728f9c15a611308f91372 Mon Sep 17 00:00:00 2001 From: SamuelFoo Date: Mon, 25 May 2026 04:54:58 +0200 Subject: [PATCH 6/9] feat: add ClusterPoseResult message and update ClusterPosesAction and ClusterPosesSrv to use it --- bb_perception_msgs/CMakeLists.txt | 1 + bb_perception_msgs/action/ClusterPosesAction.action | 8 +------- bb_perception_msgs/msg/ClusterPoseResult.msg | 5 +++++ bb_perception_msgs/srv/ClusterPosesSrv.srv | 8 ++++++-- 4 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 bb_perception_msgs/msg/ClusterPoseResult.msg diff --git a/bb_perception_msgs/CMakeLists.txt b/bb_perception_msgs/CMakeLists.txt index 83c8ba5..ea6a519 100644 --- a/bb_perception_msgs/CMakeLists.txt +++ b/bb_perception_msgs/CMakeLists.txt @@ -31,6 +31,7 @@ set(message_files msg/ClusteredCloud.msg msg/ClusteredClouds.msg + msg/ClusterPoseResult.msg msg/PointCorrespondencesStamped.msg ) diff --git a/bb_perception_msgs/action/ClusterPosesAction.action b/bb_perception_msgs/action/ClusterPosesAction.action index f087e9a..d23dd2b 100644 --- a/bb_perception_msgs/action/ClusterPosesAction.action +++ b/bb_perception_msgs/action/ClusterPosesAction.action @@ -10,13 +10,7 @@ int32 min_samples 1 float64 cluster_selection_epsilon 0.05 --- # Result -geometry_msgs/PoseStamped clustered_pose -int32 total_poses_collected -int32 poses_in_cluster -# Confidence breakdown for the final cluster -float64 mean_probability -float64 inlier_ratio -float64 position_std +ClusterPoseResult cluster_result --- # Feedback float64 collection_progress # 0.0 to 1.0 diff --git a/bb_perception_msgs/msg/ClusterPoseResult.msg b/bb_perception_msgs/msg/ClusterPoseResult.msg new file mode 100644 index 0000000..94cdc8e --- /dev/null +++ b/bb_perception_msgs/msg/ClusterPoseResult.msg @@ -0,0 +1,5 @@ +geometry_msgs/PoseStamped clustered_pose +float64 clustered_position_std +int32 num_cluster_poses +int32 num_input_poses +float64 mean_probability diff --git a/bb_perception_msgs/srv/ClusterPosesSrv.srv b/bb_perception_msgs/srv/ClusterPosesSrv.srv index 84880a6..84aca99 100644 --- a/bb_perception_msgs/srv/ClusterPosesSrv.srv +++ b/bb_perception_msgs/srv/ClusterPosesSrv.srv @@ -23,8 +23,12 @@ int32 min_cluster_size 5 int32 min_samples 5 float64 cluster_selection_epsilon 0.0 +# --- Periodic clustering --- +# When > 0, run clustering on the poses collected so far every +# `cluster_interval` seconds while enabled and publish a ClusterPoseResult. +float64 cluster_interval 0.0 + --- bool is_enabled bool is_cluster_success -int32 poses_in_cluster -int32 total_poses_collected +ClusterPoseResult cluster_result From 197912815559d8e0f8cbf8012024b085fd689bde Mon Sep 17 00:00:00 2001 From: SamuelFoo Date: Mon, 25 May 2026 11:20:53 +0200 Subject: [PATCH 7/9] feat: update ClusterPosesAction and ClusterPosesSrv to use ClusterPosesRequest and ClusterPoseResultArray --- bb_perception_msgs/CMakeLists.txt | 2 ++ .../action/ClusterPosesAction.action | 11 ++---- .../msg/ClusterPoseResultArray.msg | 6 ++++ .../msg/ClusterPosesRequest.msg | 35 +++++++++++++++++++ bb_perception_msgs/srv/ClusterPosesSrv.srv | 29 ++++----------- 5 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 bb_perception_msgs/msg/ClusterPoseResultArray.msg create mode 100644 bb_perception_msgs/msg/ClusterPosesRequest.msg diff --git a/bb_perception_msgs/CMakeLists.txt b/bb_perception_msgs/CMakeLists.txt index ea6a519..a44263c 100644 --- a/bb_perception_msgs/CMakeLists.txt +++ b/bb_perception_msgs/CMakeLists.txt @@ -31,7 +31,9 @@ set(message_files msg/ClusteredCloud.msg msg/ClusteredClouds.msg + msg/ClusterPosesRequest.msg msg/ClusterPoseResult.msg + msg/ClusterPoseResultArray.msg msg/PointCorrespondencesStamped.msg ) diff --git a/bb_perception_msgs/action/ClusterPosesAction.action b/bb_perception_msgs/action/ClusterPosesAction.action index d23dd2b..6341359 100644 --- a/bb_perception_msgs/action/ClusterPosesAction.action +++ b/bb_perception_msgs/action/ClusterPosesAction.action @@ -1,16 +1,9 @@ # Request -string odom_topic -string pose_stamped_topic -string clustered_child_frame_id "clustered_object" # Frame ID for the clustered transform +ClusterPosesRequest params float64 collection_duration 5.0 # Duration in seconds to collect synchronized messages -float64 sync_tolerance 0.1 # Time synchronization tolerance in seconds -int32 min_poses 10 # Minimum number of synchronized poses required -int32 min_cluster_size 2 -int32 min_samples 1 -float64 cluster_selection_epsilon 0.05 --- # Result -ClusterPoseResult cluster_result +ClusterPoseResultArray cluster_results --- # Feedback float64 collection_progress # 0.0 to 1.0 diff --git a/bb_perception_msgs/msg/ClusterPoseResultArray.msg b/bb_perception_msgs/msg/ClusterPoseResultArray.msg new file mode 100644 index 0000000..1044ff3 --- /dev/null +++ b/bb_perception_msgs/msg/ClusterPoseResultArray.msg @@ -0,0 +1,6 @@ +std_msgs/Header header + +# Key used to sort `results`. See ClusterPosesRequest. +int32 sort_key + +ClusterPoseResult[] results diff --git a/bb_perception_msgs/msg/ClusterPosesRequest.msg b/bb_perception_msgs/msg/ClusterPosesRequest.msg new file mode 100644 index 0000000..3f31550 --- /dev/null +++ b/bb_perception_msgs/msg/ClusterPosesRequest.msg @@ -0,0 +1,35 @@ +# Shared request fields used by both ClusterPosesSrv and ClusterPosesAction. + +# --- Subscriber configuration --- +string odom_topic +# Every listed PoseStamped topic feeds into the same accumulation buffer. +# Each gets its own ApproximateTimeSynchronizer paired with `odom_topic`. +string[] pose_stamped_topics +int32 sync_queue_size 100 +float64 sync_tolerance 0.05 + +# --- Output frame IDs --- +# Base TF frame ID broadcast for each clustered result. Each of the top_k +# results is broadcast as "_" ordered by +# `sort_key`. +string clustered_child_frame_id "clustered_object" + +# --- Clustering parameters --- +int32 min_poses 10 +int32 min_cluster_size 5 +int32 min_samples 5 +float64 cluster_selection_epsilon 0.0 + +# --- Result selection --- +# Number of clusters to return (and TFs to broadcast). The output array is +# truncated to this many entries after sorting. 0 means "all clusters found". +int32 top_k 1 + +# Sort key values for ordering the returned ClusterPoseResultArray. Each key +# defines its own "best-first" direction. +int32 SORT_BY_NUM_CLUSTER_POSES = 0 # largest first +int32 SORT_BY_MEAN_PROBABILITY = 1 # highest first +int32 SORT_BY_CLUSTERED_POSITION_STD = 2 # smallest first + +# How to sort the returned array +int32 sort_key 0 diff --git a/bb_perception_msgs/srv/ClusterPosesSrv.srv b/bb_perception_msgs/srv/ClusterPosesSrv.srv index 84aca99..03c805d 100644 --- a/bb_perception_msgs/srv/ClusterPosesSrv.srv +++ b/bb_perception_msgs/srv/ClusterPosesSrv.srv @@ -1,34 +1,17 @@ # Service for cluster_poses_service_node. # -# enabled=True -> start synchronized accumulation using the request fields below. +# enabled=True -> start synchronized accumulation using `params`. # enabled=False -> stop, cluster the accumulated poses, publish + TF-broadcast. -# All non-`enabled` request fields are ignored on stop; the -# configuration baked in at the previous enable=True call is used. +# `params` is ignored on stop; the configuration baked in at +# the previous enable=True call is used. bool enabled -# --- Output frame IDs (used when enabled=True) --- -# TF frame ID broadcast for the final clustered result on stop. -# Empty falls back to "unknown/clustered". -string clustered_child_frame_id "" - -# --- Synchronized subscriber configuration (baked at enable; cannot change while running) --- -string odom_topic -string pose_stamped_topic -int32 sync_queue_size 100 -float64 sync_tolerance 0.05 - -# --- Clustering parameters --- -int32 min_poses 10 -int32 min_cluster_size 5 -int32 min_samples 5 -float64 cluster_selection_epsilon 0.0 - -# --- Periodic clustering --- +ClusterPosesRequest params # When > 0, run clustering on the poses collected so far every -# `cluster_interval` seconds while enabled and publish a ClusterPoseResult. +# `cluster_interval` seconds while enabled and publish a ClusterPoseResultArray. float64 cluster_interval 0.0 --- bool is_enabled bool is_cluster_success -ClusterPoseResult cluster_result +ClusterPoseResultArray cluster_results From 90f2a7dbbd45ede0a186a52f95f3ca86a4381bc8 Mon Sep 17 00:00:00 2001 From: SamuelFoo Date: Mon, 25 May 2026 11:40:52 +0200 Subject: [PATCH 8/9] feat: update ClusterPoseResult message to use Pose instead of PoseStamped --- bb_perception_msgs/msg/ClusterPoseResult.msg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bb_perception_msgs/msg/ClusterPoseResult.msg b/bb_perception_msgs/msg/ClusterPoseResult.msg index 94cdc8e..c362e1b 100644 --- a/bb_perception_msgs/msg/ClusterPoseResult.msg +++ b/bb_perception_msgs/msg/ClusterPoseResult.msg @@ -1,4 +1,4 @@ -geometry_msgs/PoseStamped clustered_pose +geometry_msgs/Pose clustered_pose float64 clustered_position_std int32 num_cluster_poses int32 num_input_poses From 2109ece3b17e00c349492bba22f05c7bd96a6c6c Mon Sep 17 00:00:00 2001 From: SamuelFoo Date: Mon, 25 May 2026 12:29:58 +0200 Subject: [PATCH 9/9] feat: add max_detection_age_s parameter in ClusterPosesRequest --- bb_perception_msgs/msg/ClusterPosesRequest.msg | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bb_perception_msgs/msg/ClusterPosesRequest.msg b/bb_perception_msgs/msg/ClusterPosesRequest.msg index 3f31550..862ee57 100644 --- a/bb_perception_msgs/msg/ClusterPosesRequest.msg +++ b/bb_perception_msgs/msg/ClusterPosesRequest.msg @@ -19,6 +19,9 @@ int32 min_poses 10 int32 min_cluster_size 5 int32 min_samples 5 float64 cluster_selection_epsilon 0.0 +# Drop earlier detections when latest_detection_time - detection_time +# is greater than or equal to this value. Set <= 0.0 to disable age filtering. +float64 max_detection_age_s 0.0 # --- Result selection --- # Number of clusters to return (and TFs to broadcast). The output array is