@@ -115,6 +115,7 @@ DecorativeTrackerMergerNode::DecorativeTrackerMergerNode(const rclcpp::NodeOptio
115
115
// Parameters
116
116
publish_interpolated_sub_objects_ = declare_parameter<bool >(" publish_interpolated_sub_objects" );
117
117
base_link_frame_id_ = declare_parameter<std::string>(" base_link_frame_id" );
118
+ merge_frame_id_ = declare_parameter<std::string>(" merge_frame_id" , " map" );
118
119
time_sync_threshold_ = declare_parameter<double >(" time_sync_threshold" );
119
120
sub_object_timeout_sec_ = declare_parameter<double >(" sub_object_timeout_sec" );
120
121
// default setting parameter for tracker
@@ -196,14 +197,24 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
196
197
const TrackedObjects::ConstSharedPtr & main_objects)
197
198
{
198
199
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
+
199
210
// try to merge sub object
200
211
if (!sub_objects_buffer_.empty ()) {
201
212
// get interpolated sub objects
202
213
// get newest sub objects which timestamp is earlier to main objects
203
214
TrackedObjects::ConstSharedPtr closest_time_sub_objects;
204
215
TrackedObjects::ConstSharedPtr closest_time_sub_objects_later;
205
216
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 )) {
207
218
closest_time_sub_objects = sub_object;
208
219
} else {
209
220
closest_time_sub_objects_later = sub_object;
@@ -212,7 +223,7 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
212
223
}
213
224
// get delay compensated sub objects
214
225
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 );
216
227
if (interpolated_sub_objects.has_value ()) {
217
228
// Merge sub objects
218
229
const auto interp_sub_objs = interpolated_sub_objects.value ();
@@ -225,9 +236,10 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
225
236
}
226
237
227
238
// 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 );
230
241
merged_object_pub_->publish (tracked_objects);
242
+
231
243
published_time_publisher_->publish_if_subscribed (
232
244
merged_object_pub_, tracked_objects.header .stamp );
233
245
processing_time_publisher_->publish <tier4_debug_msgs::msg::Float64Stamped>(
@@ -244,10 +256,19 @@ void DecorativeTrackerMergerNode::mainObjectsCallback(
244
256
*/
245
257
void DecorativeTrackerMergerNode::subObjectsCallback (const TrackedObjects::ConstSharedPtr & msg)
246
258
{
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);
248
269
// remove old sub objects
249
270
// 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 );
251
272
const auto remove_itr = std::remove_if (
252
273
sub_objects_buffer_.begin (), sub_objects_buffer_.end (), [now, this ](const auto & sub_object) {
253
274
return (now - rclcpp::Time (sub_object->header .stamp )).seconds () > sub_object_timeout_sec_;
@@ -392,7 +413,7 @@ TrackedObjects DecorativeTrackerMergerNode::getTrackedObjects(const std_msgs::ms
392
413
{
393
414
// get main objects
394
415
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_ );
396
417
}
397
418
398
419
// create new tracker
0 commit comments