Skip to content

Commit 77a2abd

Browse files
committed
refactor(bicycle_tracker): add tracking_offset to adjust object position based on motion model
1 parent 2c5aad5 commit 77a2abd

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class BicycleTracker : public Tracker
3737

3838
double velocity_deviation_threshold_;
3939

40+
Eigen::Vector2d tracking_offset_;
41+
4042
BicycleMotionModel motion_model_;
4143
using IDX = BicycleMotionModel::IDX;
4244

perception/autoware_multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp

+21-4
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
namespace autoware::multi_object_tracker
4242
{
4343
BicycleTracker::BicycleTracker(const rclcpp::Time & time, const types::DynamicObject & object)
44-
: Tracker(time, object), logger_(rclcpp::get_logger("BicycleTracker"))
44+
: Tracker(time, object), logger_(rclcpp::get_logger("BicycleTracker")),
45+
tracking_offset_(Eigen::Vector2d::Zero())
4546
{
4647
// velocity deviation threshold
4748
// if the predicted velocity is close to the observed velocity,
@@ -220,11 +221,25 @@ bool BicycleTracker::measureWithShape(const types::DynamicObject & object)
220221
// update motion model
221222
motion_model_.updateExtendedState(object_extension.x);
222223

224+
// update offset into object position
225+
{
226+
// rotate back the offset vector from object coordinate to global coordinate
227+
const double yaw = motion_model_.getStateElement(IDX::YAW);
228+
const double offset_x_global =
229+
tracking_offset_.x() * std::cos(yaw) - tracking_offset_.y() * std::sin(yaw);
230+
const double offset_y_global =
231+
tracking_offset_.x() * std::sin(yaw) + tracking_offset_.y() * std::cos(yaw);
232+
motion_model_.adjustPosition(-gain * offset_x_global, -gain * offset_y_global);
233+
// update offset (object coordinate)
234+
tracking_offset_.x() = gain_inv * tracking_offset_.x();
235+
tracking_offset_.y() = gain_inv * tracking_offset_.y();
236+
}
237+
223238
return true;
224239
}
225240

226241
bool BicycleTracker::measure(
227-
const types::DynamicObject & object, const rclcpp::Time & time,
242+
const types::DynamicObject & in_object, const rclcpp::Time & time,
228243
const types::InputChannel & channel_info)
229244
{
230245
// check time gap
@@ -238,9 +253,11 @@ bool BicycleTracker::measure(
238253
}
239254

240255
// update object
241-
measureWithPose(object);
256+
types::DynamicObject updating_object = in_object;
257+
shapes::calcAnchorPointOffset(object_, tracking_offset_, updating_object);
258+
measureWithPose(updating_object);
242259
if (channel_info.trust_extension) {
243-
measureWithShape(object);
260+
measureWithShape(updating_object);
244261
}
245262

246263
return true;

0 commit comments

Comments
 (0)