Skip to content

Commit 9c95d21

Browse files
fix(autoware_tracking_object_merger): add merge frame (#8418)
* fix(autoware_tracking_object_merger): add merge frame Signed-off-by: Kaan Çolak <kaancolak95@gmail.com> * style(pre-commit): autofix --------- Signed-off-by: Kaan Çolak <kaancolak95@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent e7addcb commit 9c95d21

File tree

5 files changed

+35
-11
lines changed

5 files changed

+35
-11
lines changed

perception/autoware_tracking_object_merger/config/decorative_tracker_merger.param.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
/**:
33
ros__parameters:
44
base_link_frame_id: "base_link"
5+
merge_frame_id: "map"
56
time_sync_threshold: 0.999
67
sub_object_timeout_sec: 0.8
78
publish_interpolated_sub_objects: true #for debug

perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/decorative_tracker_merger_node.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ class DecorativeTrackerMergerNode : public rclcpp::Node
9696
MEASUREMENT_STATE sub_sensor_type_;
9797
std::vector<TrackerState> inner_tracker_objects_;
9898
std::unordered_map<std::string, std::unique_ptr<DataAssociation>> data_association_map_;
99-
std::string target_frame_;
10099
std::string base_link_frame_id_;
100+
std::string merge_frame_id_;
101101
// buffer to save the sub objects
102102
std::vector<autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr> sub_objects_buffer_;
103103
double sub_object_timeout_sec_;

perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/utils/tracker_state.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ class TrackerState
146146
};
147147

148148
TrackedObjects getTrackedObjectsFromTrackerStates(
149-
std::vector<TrackerState> & tracker_states, const rclcpp::Time & time);
149+
std::vector<TrackerState> & tracker_states, const rclcpp::Time & time,
150+
const std::string & frame_id);
150151
} // namespace autoware::tracking_object_merger
151152

152153
#endif // AUTOWARE__TRACKING_OBJECT_MERGER__UTILS__TRACKER_STATE_HPP_

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

+28-7
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ DecorativeTrackerMergerNode::DecorativeTrackerMergerNode(const rclcpp::NodeOptio
115115
// Parameters
116116
publish_interpolated_sub_objects_ = declare_parameter<bool>("publish_interpolated_sub_objects");
117117
base_link_frame_id_ = declare_parameter<std::string>("base_link_frame_id");
118+
merge_frame_id_ = declare_parameter<std::string>("merge_frame_id", "map");
118119
time_sync_threshold_ = declare_parameter<double>("time_sync_threshold");
119120
sub_object_timeout_sec_ = declare_parameter<double>("sub_object_timeout_sec");
120121
// default setting parameter for tracker
@@ -196,14 +197,24 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
196197
const TrackedObjects::ConstSharedPtr & main_objects)
197198
{
198199
stop_watch_ptr_->toc("processing_time", true);
200+
201+
/* transform to target merge coordinate */
202+
TrackedObjects transformed_objects;
203+
if (!object_recognition_utils::transformObjects(
204+
*main_objects, merge_frame_id_, tf_buffer_, transformed_objects)) {
205+
return;
206+
}
207+
TrackedObjects::ConstSharedPtr transformed_main_objects =
208+
std::make_shared<TrackedObjects>(transformed_objects);
209+
199210
// try to merge sub object
200211
if (!sub_objects_buffer_.empty()) {
201212
// get interpolated sub objects
202213
// get newest sub objects which timestamp is earlier to main objects
203214
TrackedObjects::ConstSharedPtr closest_time_sub_objects;
204215
TrackedObjects::ConstSharedPtr closest_time_sub_objects_later;
205216
for (const auto & sub_object : sub_objects_buffer_) {
206-
if (getUnixTime(sub_object->header) < getUnixTime(main_objects->header)) {
217+
if (getUnixTime(sub_object->header) < getUnixTime(transformed_main_objects->header)) {
207218
closest_time_sub_objects = sub_object;
208219
} else {
209220
closest_time_sub_objects_later = sub_object;
@@ -212,7 +223,7 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
212223
}
213224
// get delay compensated sub objects
214225
const auto interpolated_sub_objects = interpolateObjectState(
215-
closest_time_sub_objects, closest_time_sub_objects_later, main_objects->header);
226+
closest_time_sub_objects, closest_time_sub_objects_later, transformed_main_objects->header);
216227
if (interpolated_sub_objects.has_value()) {
217228
// Merge sub objects
218229
const auto interp_sub_objs = interpolated_sub_objects.value();
@@ -225,9 +236,10 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
225236
}
226237

227238
// try to merge main object
228-
this->decorativeMerger(main_sensor_type_, main_objects);
229-
const auto & tracked_objects = getTrackedObjects(main_objects->header);
239+
this->decorativeMerger(main_sensor_type_, transformed_main_objects);
240+
const auto & tracked_objects = getTrackedObjects(transformed_main_objects->header);
230241
merged_object_pub_->publish(tracked_objects);
242+
231243
published_time_publisher_->publish_if_subscribed(
232244
merged_object_pub_, tracked_objects.header.stamp);
233245
processing_time_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
@@ -244,10 +256,19 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
244256
*/
245257
void DecorativeTrackerMergerNode::subObjectsCallback(const TrackedObjects::ConstSharedPtr & msg)
246258
{
247-
sub_objects_buffer_.push_back(msg);
259+
/* transform to target merge coordinate */
260+
TrackedObjects transformed_objects;
261+
if (!object_recognition_utils::transformObjects(
262+
*msg, merge_frame_id_, tf_buffer_, transformed_objects)) {
263+
return;
264+
}
265+
TrackedObjects::ConstSharedPtr transformed_sub_objects =
266+
std::make_shared<TrackedObjects>(transformed_objects);
267+
268+
sub_objects_buffer_.push_back(transformed_sub_objects);
248269
// remove old sub objects
249270
// const auto now = get_clock()->now();
250-
const auto now = rclcpp::Time(msg->header.stamp);
271+
const auto now = rclcpp::Time(transformed_sub_objects->header.stamp);
251272
const auto remove_itr = std::remove_if(
252273
sub_objects_buffer_.begin(), sub_objects_buffer_.end(), [now, this](const auto & sub_object) {
253274
return (now - rclcpp::Time(sub_object->header.stamp)).seconds() > sub_object_timeout_sec_;
@@ -392,7 +413,7 @@ TrackedObjects DecorativeTrackerMergerNode::getTrackedObjects(const std_msgs::ms
392413
{
393414
// get main objects
394415
rclcpp::Time current_time = rclcpp::Time(header.stamp);
395-
return getTrackedObjectsFromTrackerStates(inner_tracker_objects_, current_time);
416+
return getTrackedObjectsFromTrackerStates(inner_tracker_objects_, current_time, merge_frame_id_);
396417
}
397418

398419
// create new tracker

perception/autoware_tracking_object_merger/src/utils/tracker_state.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,8 @@ TrackerState::~TrackerState()
304304
}
305305

306306
TrackedObjects getTrackedObjectsFromTrackerStates(
307-
std::vector<TrackerState> & tracker_states, const rclcpp::Time & current_time)
307+
std::vector<TrackerState> & tracker_states, const rclcpp::Time & current_time,
308+
const std::string & frame_id)
308309
{
309310
TrackedObjects tracked_objects;
310311

@@ -325,7 +326,7 @@ TrackedObjects getTrackedObjectsFromTrackerStates(
325326

326327
// update header
327328
tracked_objects.header.stamp = current_time;
328-
tracked_objects.header.frame_id = "map"; // TODO(yoshiri): get frame_id from input
329+
tracked_objects.header.frame_id = frame_id;
329330
return tracked_objects;
330331
}
331332

0 commit comments

Comments
 (0)