From 43037f515d5705fc08a7815ee85824397c6dce99 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 14 Sep 2022 12:55:27 +0300 Subject: [PATCH] aruco_detect: check for duplicates in marker transforms, send all transforms in one message --- aruco_pose/src/aruco_detect.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/aruco_pose/src/aruco_detect.cpp b/aruco_pose/src/aruco_detect.cpp index 4a6cfac7..fe1ad5be 100644 --- a/aruco_pose/src/aruco_detect.cpp +++ b/aruco_pose/src/aruco_detect.cpp @@ -187,6 +187,8 @@ private: array_.markers.reserve(ids.size()); aruco_pose::Marker marker; + vector transforms; + transforms.reserve(ids.size()); geometry_msgs::TransformStamped transform; transform.header.stamp = msg->header.stamp; transform.header.frame_id = msg->header.frame_id; @@ -204,20 +206,33 @@ private: snapOrientation(marker.pose.orientation, snap_to.transform.rotation, auto_flip_); } - // TODO: check IDs are unique if (send_tf_) { transform.child_frame_id = getChildFrameId(ids[i]); // check if such static transform is in the map if (map_markers_ids_.find(ids[i]) == map_markers_ids_.end()) { - transform.transform.rotation = marker.pose.orientation; - fillTranslation(transform.transform.translation, tvecs[i]); - br_->sendTransform(transform); + // check if a markers with that id is already added + bool send = true; + for (auto &t : transforms) { + if (t.child_frame_id == transform.child_frame_id) { + send = false; + break; + } + } + if (send) { + transform.transform.rotation = marker.pose.orientation; + fillTranslation(transform.transform.translation, tvecs[i]); + transforms.push_back(transform); + } } } } array_.markers.push_back(marker); } + + if (send_tf_) { + br_->sendTransform(transforms); + } } markers_pub_.publish(array_);