Skip to content

Commit 308eefb

Browse files
refactor(autoware_multi_object_tracker): define a new internal object class (#9706)
* feat: Add dynamic_object.hpp to object_model directory Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: Update autoware_perception_msgs include statements in association.hpp and dynamic_object.hpp Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: replace object message type to the DynamicObject type Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: Update autoware_perception_msgs include statements in association.hpp and dynamic_object.hpp Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: add channel index to the DynamicObjects Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * Revert "chore: add channel index to the DynamicObjects" This reverts commit c7e73f0. Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: replace trackedobject in the process Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: Replace transformObjects with shapes::transformObjects for object transformation Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: add channel index to the DynamicObjects Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * feat: separate shape related functions Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: clean up utils.hpp Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: Update function signatures to use DynamicObjectList instead of DynamicObjects Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: Add channel index to DynamicObject and DynamicObjectList Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: Refactor processor and debugger classes to remove channel_index parameter Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: Refactor multiple_vehicle_tracker.cpp and debugger.cpp Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * Refactor object tracker classes to remove self_transform parameter Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * Refactor object tracker classes to use shapes namespace for shape-related functions Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * Refactor object tracker classes to use types.hpp for object model types Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * Refactor object tracker classes to remove unused utils.hpp Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * Refactor object tracker classes to use types.hpp for object model types Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: rename to types.cpp Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * rename getDynamicObject to toDynamicObject Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * Update perception/autoware_multi_object_tracker/lib/object_model/shapes.cpp Co-authored-by: Yukihiro Saito <yukky.saito@gmail.com> --------- Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> Co-authored-by: Yukihiro Saito <yukky.saito@gmail.com>
1 parent 4045fb3 commit 308eefb

38 files changed

+723
-465
lines changed

perception/autoware_multi_object_tracker/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ set(${PROJECT_NAME}_src
3030
set(${PROJECT_NAME}_lib
3131
lib/association/association.cpp
3232
lib/association/mu_successive_shortest_path/mu_ssp.cpp
33+
lib/object_model/types.cpp
34+
lib/object_model/shapes.cpp
3335
lib/tracker/motion_model/motion_model_base.cpp
3436
lib/tracker/motion_model/bicycle_motion_model.cpp
3537
# cspell: ignore ctrv

perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
#include <Eigen/Core>
2828
#include <Eigen/Geometry>
2929

30-
#include "autoware_perception_msgs/msg/detected_objects.hpp"
30+
#include <autoware_perception_msgs/msg/detected_objects.hpp>
3131

3232
#include <list>
3333
#include <memory>
@@ -58,7 +58,7 @@ class DataAssociation
5858
const Eigen::MatrixXd & src, std::unordered_map<int, int> & direct_assignment,
5959
std::unordered_map<int, int> & reverse_assignment);
6060
Eigen::MatrixXd calcScoreMatrix(
61-
const autoware_perception_msgs::msg::DetectedObjects & measurements,
61+
const types::DynamicObjectList & measurements,
6262
const std::list<std::shared_ptr<Tracker>> & trackers);
6363
virtual ~DataAssociation() {}
6464
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright 2024 TIER IV, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
//
15+
//
16+
// Author: v1.0 Taekjin Lee
17+
18+
#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__OBJECT_MODEL__SHAPES_HPP_
19+
#define AUTOWARE__MULTI_OBJECT_TRACKER__OBJECT_MODEL__SHAPES_HPP_
20+
21+
#include "autoware/multi_object_tracker/object_model/types.hpp"
22+
23+
#include <Eigen/Core>
24+
25+
#include <tf2_ros/buffer.h>
26+
27+
#include <string>
28+
29+
namespace autoware::multi_object_tracker
30+
{
31+
namespace shapes
32+
{
33+
bool transformObjects(
34+
const types::DynamicObjectList & input_msg, const std::string & target_frame_id,
35+
const tf2_ros::Buffer & tf_buffer, types::DynamicObjectList & output_msg);
36+
37+
double get2dIoU(
38+
const types::DynamicObject & source_object, const types::DynamicObject & target_object,
39+
const double min_union_area = 0.01);
40+
41+
bool convertConvexHullToBoundingBox(
42+
const types::DynamicObject & input_object, types::DynamicObject & output_object);
43+
44+
bool getMeasurementYaw(
45+
const types::DynamicObject & object, const double & predicted_yaw, double & measurement_yaw);
46+
47+
int getNearestCornerOrSurface(
48+
const double x, const double y, const double yaw, const double width, const double length,
49+
const geometry_msgs::msg::Transform & self_transform);
50+
51+
void calcAnchorPointOffset(
52+
const double w, const double l, const int indx, const types::DynamicObject & input_object,
53+
const double & yaw, types::DynamicObject & offset_object, Eigen::Vector2d & tracking_offset);
54+
} // namespace shapes
55+
} // namespace autoware::multi_object_tracker
56+
57+
#endif // AUTOWARE__MULTI_OBJECT_TRACKER__OBJECT_MODEL__SHAPES_HPP_
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Copyright 2024 TIER IV, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
//
15+
//
16+
// Author: v1.0 Taekjin Lee
17+
18+
#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__OBJECT_MODEL__TYPES_HPP_
19+
#define AUTOWARE__MULTI_OBJECT_TRACKER__OBJECT_MODEL__TYPES_HPP_
20+
21+
#include <autoware_perception_msgs/msg/detected_object.hpp>
22+
#include <autoware_perception_msgs/msg/detected_object_kinematics.hpp>
23+
#include <autoware_perception_msgs/msg/detected_objects.hpp>
24+
#include <autoware_perception_msgs/msg/object_classification.hpp>
25+
#include <autoware_perception_msgs/msg/shape.hpp>
26+
#include <autoware_perception_msgs/msg/tracked_object.hpp>
27+
#include <autoware_perception_msgs/msg/tracked_object_kinematics.hpp>
28+
#include <geometry_msgs/msg/polygon.hpp>
29+
#include <geometry_msgs/msg/pose_with_covariance.hpp>
30+
#include <geometry_msgs/msg/twist_with_covariance.hpp>
31+
#include <geometry_msgs/msg/vector3.hpp>
32+
#include <std_msgs/msg/header.hpp>
33+
#include <unique_identifier_msgs/msg/uuid.hpp>
34+
35+
#include <boost/optional.hpp>
36+
37+
#include <vector>
38+
39+
namespace autoware::multi_object_tracker
40+
{
41+
namespace types
42+
{
43+
enum OrientationAvailability : uint8_t {
44+
UNAVAILABLE = 0,
45+
SIGN_UNKNOWN = 1,
46+
AVAILABLE = 2,
47+
};
48+
49+
struct ObjectKinematics
50+
{
51+
geometry_msgs::msg::PoseWithCovariance pose_with_covariance;
52+
geometry_msgs::msg::TwistWithCovariance twist_with_covariance;
53+
bool has_position_covariance = false;
54+
OrientationAvailability orientation_availability;
55+
bool has_twist = false;
56+
bool has_twist_covariance = false;
57+
};
58+
59+
struct DynamicObject
60+
{
61+
unique_identifier_msgs::msg::UUID object_id = unique_identifier_msgs::msg::UUID();
62+
uint channel_index;
63+
float existence_probability;
64+
std::vector<autoware_perception_msgs::msg::ObjectClassification> classification;
65+
ObjectKinematics kinematics;
66+
autoware_perception_msgs::msg::Shape shape;
67+
};
68+
69+
struct DynamicObjectList
70+
{
71+
std_msgs::msg::Header header;
72+
uint channel_index;
73+
std::vector<DynamicObject> objects;
74+
};
75+
76+
DynamicObject toDynamicObject(
77+
const autoware_perception_msgs::msg::DetectedObject & det_object, const uint channel_index = 0);
78+
79+
DynamicObjectList toDynamicObjectList(
80+
const autoware_perception_msgs::msg::DetectedObjects & det_objects, const uint channel_index = 0);
81+
82+
autoware_perception_msgs::msg::TrackedObject toTrackedObjectMsg(const DynamicObject & dyn_object);
83+
84+
} // namespace types
85+
86+
} // namespace autoware::multi_object_tracker
87+
88+
#endif // AUTOWARE__MULTI_OBJECT_TRACKER__OBJECT_MODEL__TYPES_HPP_

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

+11-13
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,20 @@
1919
#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_
2020
#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_
2121

22-
#include "autoware/kalman_filter/kalman_filter.hpp"
2322
#include "autoware/multi_object_tracker/object_model/object_model.hpp"
23+
#include "autoware/multi_object_tracker/object_model/types.hpp"
2424
#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp"
2525
#include "autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp"
2626

27+
#include <autoware/kalman_filter/kalman_filter.hpp>
28+
2729
namespace autoware::multi_object_tracker
2830
{
2931

3032
class BicycleTracker : public Tracker
3133
{
3234
private:
33-
autoware_perception_msgs::msg::DetectedObject object_;
35+
types::DynamicObject object_;
3436
rclcpp::Logger logger_;
3537

3638
object_model::ObjectModel object_model_ = object_model::bicycle;
@@ -50,23 +52,19 @@ class BicycleTracker : public Tracker
5052

5153
public:
5254
BicycleTracker(
53-
const rclcpp::Time & time, const autoware_perception_msgs::msg::DetectedObject & object,
54-
const geometry_msgs::msg::Transform & self_transform, const size_t channel_size,
55-
const uint & channel_index);
55+
const rclcpp::Time & time, const types::DynamicObject & object, const size_t channel_size);
5656

5757
bool predict(const rclcpp::Time & time) override;
5858
bool measure(
59-
const autoware_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
59+
const types::DynamicObject & object, const rclcpp::Time & time,
6060
const geometry_msgs::msg::Transform & self_transform) override;
61-
bool measureWithPose(const autoware_perception_msgs::msg::DetectedObject & object);
62-
bool measureWithShape(const autoware_perception_msgs::msg::DetectedObject & object);
63-
bool getTrackedObject(
64-
const rclcpp::Time & time,
65-
autoware_perception_msgs::msg::TrackedObject & object) const override;
61+
bool measureWithPose(const types::DynamicObject & object);
62+
bool measureWithShape(const types::DynamicObject & object);
63+
bool getTrackedObject(const rclcpp::Time & time, types::DynamicObject & object) const override;
6664

6765
private:
68-
autoware_perception_msgs::msg::DetectedObject getUpdatingObject(
69-
const autoware_perception_msgs::msg::DetectedObject & object,
66+
types::DynamicObject getUpdatingObject(
67+
const types::DynamicObject & object,
7068
const geometry_msgs::msg::Transform & self_transform) const;
7169
};
7270

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

+5-8
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_
2020
#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_
2121

22-
#include "autoware/kalman_filter/kalman_filter.hpp"
22+
#include "autoware/multi_object_tracker/object_model/types.hpp"
2323
#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp"
2424
#include "autoware/multi_object_tracker/tracker/model/vehicle_tracker.hpp"
2525

26+
#include <autoware/kalman_filter/kalman_filter.hpp>
2627
#include <rclcpp/time.hpp>
2728

2829
namespace autoware::multi_object_tracker
@@ -36,17 +37,13 @@ class MultipleVehicleTracker : public Tracker
3637

3738
public:
3839
MultipleVehicleTracker(
39-
const rclcpp::Time & time, const autoware_perception_msgs::msg::DetectedObject & object,
40-
const geometry_msgs::msg::Transform & self_transform, const size_t channel_size,
41-
const uint & channel_index);
40+
const rclcpp::Time & time, const types::DynamicObject & object, const size_t channel_size);
4241

4342
bool predict(const rclcpp::Time & time) override;
4443
bool measure(
45-
const autoware_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
44+
const types::DynamicObject & object, const rclcpp::Time & time,
4645
const geometry_msgs::msg::Transform & self_transform) override;
47-
bool getTrackedObject(
48-
const rclcpp::Time & time,
49-
autoware_perception_msgs::msg::TrackedObject & object) const override;
46+
bool getTrackedObject(const rclcpp::Time & time, types::DynamicObject & object) const override;
5047
virtual ~MultipleVehicleTracker() {}
5148
};
5249

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

+8-10
Original file line numberDiff line numberDiff line change
@@ -19,32 +19,30 @@
1919
#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_
2020
#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_
2121

22-
#include "autoware/kalman_filter/kalman_filter.hpp"
22+
#include "autoware/multi_object_tracker/object_model/types.hpp"
2323
#include "tracker_base.hpp"
2424

25+
#include <autoware/kalman_filter/kalman_filter.hpp>
26+
2527
namespace autoware::multi_object_tracker
2628
{
2729

2830
class PassThroughTracker : public Tracker
2931
{
3032
private:
31-
autoware_perception_msgs::msg::DetectedObject object_;
32-
autoware_perception_msgs::msg::DetectedObject prev_observed_object_;
33+
types::DynamicObject object_;
34+
types::DynamicObject prev_observed_object_;
3335
rclcpp::Logger logger_;
3436
rclcpp::Time last_update_time_;
3537

3638
public:
3739
PassThroughTracker(
38-
const rclcpp::Time & time, const autoware_perception_msgs::msg::DetectedObject & object,
39-
const geometry_msgs::msg::Transform & self_transform, const size_t channel_size,
40-
const uint & channel_index);
40+
const rclcpp::Time & time, const types::DynamicObject & object, const size_t channel_size);
4141
bool predict(const rclcpp::Time & time) override;
4242
bool measure(
43-
const autoware_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
43+
const types::DynamicObject & object, const rclcpp::Time & time,
4444
const geometry_msgs::msg::Transform & self_transform) override;
45-
bool getTrackedObject(
46-
const rclcpp::Time & time,
47-
autoware_perception_msgs::msg::TrackedObject & object) const override;
45+
bool getTrackedObject(const rclcpp::Time & time, types::DynamicObject & object) const override;
4846
};
4947

5048
} // namespace autoware::multi_object_tracker

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

+6-8
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_
2020
#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_
2121

22-
#include "autoware/kalman_filter/kalman_filter.hpp"
22+
#include "autoware/multi_object_tracker/object_model/types.hpp"
2323
#include "autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp"
2424
#include "autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp"
2525
#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp"
2626

27+
#include <autoware/kalman_filter/kalman_filter.hpp>
28+
2729
namespace autoware::multi_object_tracker
2830
{
2931

@@ -35,17 +37,13 @@ class PedestrianAndBicycleTracker : public Tracker
3537

3638
public:
3739
PedestrianAndBicycleTracker(
38-
const rclcpp::Time & time, const autoware_perception_msgs::msg::DetectedObject & object,
39-
const geometry_msgs::msg::Transform & self_transform, const size_t channel_size,
40-
const uint & channel_index);
40+
const rclcpp::Time & time, const types::DynamicObject & object, const size_t channel_size);
4141

4242
bool predict(const rclcpp::Time & time) override;
4343
bool measure(
44-
const autoware_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
44+
const types::DynamicObject & object, const rclcpp::Time & time,
4545
const geometry_msgs::msg::Transform & self_transform) override;
46-
bool getTrackedObject(
47-
const rclcpp::Time & time,
48-
autoware_perception_msgs::msg::TrackedObject & object) const override;
46+
bool getTrackedObject(const rclcpp::Time & time, types::DynamicObject & object) const override;
4947
virtual ~PedestrianAndBicycleTracker() {}
5048
};
5149

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

+11-13
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,20 @@
1919
#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_
2020
#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_
2121

22-
#include "autoware/kalman_filter/kalman_filter.hpp"
2322
#include "autoware/multi_object_tracker/object_model/object_model.hpp"
23+
#include "autoware/multi_object_tracker/object_model/types.hpp"
2424
#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp"
2525
#include "autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp"
2626

27+
#include <autoware/kalman_filter/kalman_filter.hpp>
28+
2729
namespace autoware::multi_object_tracker
2830
{
2931

3032
class PedestrianTracker : public Tracker
3133
{
3234
private:
33-
autoware_perception_msgs::msg::DetectedObject object_;
35+
types::DynamicObject object_;
3436
rclcpp::Logger logger_;
3537

3638
object_model::ObjectModel object_model_ = object_model::pedestrian;
@@ -56,23 +58,19 @@ class PedestrianTracker : public Tracker
5658

5759
public:
5860
PedestrianTracker(
59-
const rclcpp::Time & time, const autoware_perception_msgs::msg::DetectedObject & object,
60-
const geometry_msgs::msg::Transform & self_transform, const size_t channel_size,
61-
const uint & channel_index);
61+
const rclcpp::Time & time, const types::DynamicObject & object, const size_t channel_size);
6262

6363
bool predict(const rclcpp::Time & time) override;
6464
bool measure(
65-
const autoware_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
65+
const types::DynamicObject & object, const rclcpp::Time & time,
6666
const geometry_msgs::msg::Transform & self_transform) override;
67-
bool measureWithPose(const autoware_perception_msgs::msg::DetectedObject & object);
68-
bool measureWithShape(const autoware_perception_msgs::msg::DetectedObject & object);
69-
bool getTrackedObject(
70-
const rclcpp::Time & time,
71-
autoware_perception_msgs::msg::TrackedObject & object) const override;
67+
bool measureWithPose(const types::DynamicObject & object);
68+
bool measureWithShape(const types::DynamicObject & object);
69+
bool getTrackedObject(const rclcpp::Time & time, types::DynamicObject & object) const override;
7270

7371
private:
74-
autoware_perception_msgs::msg::DetectedObject getUpdatingObject(
75-
const autoware_perception_msgs::msg::DetectedObject & object,
72+
types::DynamicObject getUpdatingObject(
73+
const types::DynamicObject & object,
7674
const geometry_msgs::msg::Transform & self_transform) const;
7775
};
7876

0 commit comments

Comments
 (0)