19
19
#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_
20
20
#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_
21
21
22
- #include " tracker_base.hpp"
22
+ #include " multi_object_tracker/tracker/model/tracker_base.hpp"
23
+ #include " multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp"
23
24
24
25
#include < kalman_filter/kalman_filter.hpp>
25
26
@@ -28,42 +29,19 @@ class NormalVehicleTracker : public Tracker
28
29
private:
29
30
autoware_auto_perception_msgs::msg::DetectedObject object_;
30
31
rclcpp::Logger logger_;
31
- int last_nearest_corner_index_;
32
32
33
33
private:
34
- KalmanFilter ekf_;
35
- rclcpp::Time last_update_time_;
36
- enum IDX { X = 0 , Y = 1 , YAW = 2 , VEL = 3 , SLIP = 4 };
37
-
38
34
struct EkfParams
39
35
{
40
- char dim_x = 5 ;
41
- float q_stddev_acc_long;
42
- float q_stddev_acc_lat;
43
- float q_stddev_yaw_rate_min;
44
- float q_stddev_yaw_rate_max;
45
- float q_cov_slip_rate_min;
46
- float q_cov_slip_rate_max;
47
- float q_max_slip_angle;
48
- float p0_cov_vel;
49
- float p0_cov_slip;
50
- float r_cov_x;
51
- float r_cov_y;
52
- float r_cov_yaw;
53
- float r_cov_vel;
54
- float p0_cov_x;
55
- float p0_cov_y;
56
- float p0_cov_yaw;
36
+ double r_cov_x;
37
+ double r_cov_y;
38
+ double r_cov_yaw;
39
+ double r_cov_vel;
57
40
} ekf_params_;
58
-
59
- double max_vel_;
60
- double max_slip_;
61
- double lf_;
62
- double lr_;
63
- float z_;
64
41
double velocity_deviation_threshold_;
65
42
66
- private:
43
+ double z_;
44
+
67
45
struct BoundingBox
68
46
{
69
47
double length;
@@ -73,25 +51,41 @@ class NormalVehicleTracker : public Tracker
73
51
BoundingBox bounding_box_;
74
52
BoundingBox last_input_bounding_box_;
75
53
Eigen::Vector2d tracking_offset_;
54
+ int last_nearest_corner_index_;
55
+
56
+ private:
57
+ BicycleMotionModel motion_model_;
58
+ const char DIM = motion_model_.DIM;
59
+ using IDX = BicycleMotionModel::IDX;
76
60
77
61
public:
78
62
NormalVehicleTracker (
79
63
const rclcpp::Time & time, const autoware_auto_perception_msgs::msg::DetectedObject & object,
80
64
const geometry_msgs::msg::Transform & self_transform);
81
65
82
66
bool predict (const rclcpp::Time & time) override ;
83
- bool predict (const double dt, KalmanFilter & ekf) const ;
84
67
bool measure (
85
68
const autoware_auto_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
86
69
const geometry_msgs::msg::Transform & self_transform) override ;
70
+ autoware_auto_perception_msgs::msg::DetectedObject getUpdatingObject (
71
+ const autoware_auto_perception_msgs::msg::DetectedObject & object,
72
+ const geometry_msgs::msg::Transform & self_transform);
87
73
bool measureWithPose (const autoware_auto_perception_msgs::msg::DetectedObject & object);
88
74
bool measureWithShape (const autoware_auto_perception_msgs::msg::DetectedObject & object);
89
75
bool getTrackedObject (
90
76
const rclcpp::Time & time,
91
77
autoware_auto_perception_msgs::msg::TrackedObject & object) const override ;
92
- void setNearestCornerOrSurfaceIndex (const geometry_msgs::msg::Transform & self_transform);
93
- double getMeasurementYaw (const autoware_auto_perception_msgs::msg::DetectedObject & object);
94
78
virtual ~NormalVehicleTracker () {}
79
+
80
+ private:
81
+ void setNearestCornerOrSurfaceIndex (const geometry_msgs::msg::Transform & self_transform)
82
+ {
83
+ Eigen::MatrixXd X_t (DIM, 1 );
84
+ motion_model_.getStateVector (X_t);
85
+ last_nearest_corner_index_ = utils::getNearestCornerOrSurface (
86
+ X_t (IDX::X), X_t (IDX::Y), X_t (IDX::YAW), bounding_box_.width , bounding_box_.length ,
87
+ self_transform);
88
+ }
95
89
};
96
90
97
91
#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_
0 commit comments