Skip to content

Commit 5807f7a

Browse files
authored
feat(multi_object_tracker): process modulation (#6742)
* fix: reduce lower limit of publish interval Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: enlarge publish range upper limit Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: set parameter tested and agreed Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: define functions on each tracking steps Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: remove time argument to avoid misuse Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: refine function inputs and outputs Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: create tracking process class Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: clean up Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: move processor to subfolder Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: output filter is moved to the processor side Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: rename tracker management process, process parameter Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * chore: revise comments Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: remove not-related dependency Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> --------- Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
1 parent c381661 commit 5807f7a

File tree

7 files changed

+414
-238
lines changed

7 files changed

+414
-238
lines changed

Diff for: perception/multi_object_tracker/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ include_directories(
2323
set(MULTI_OBJECT_TRACKER_SRC
2424
src/multi_object_tracker_core.cpp
2525
src/debugger.cpp
26+
src/processor/processor.cpp
2627
src/data_association/data_association.cpp
2728
src/data_association/mu_successive_shortest_path/mu_successive_shortest_path_wrapper.cpp
2829
src/tracker/motion_model/motion_model_base.cpp

Diff for: perception/multi_object_tracker/include/multi_object_tracker/debugger.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class TrackerDebugger
5656
} debug_settings_;
5757
double pipeline_latency_ms_ = 0.0;
5858
diagnostic_updater::Updater diagnostic_updater_;
59+
bool shouldPublishTentativeObjects() const { return debug_settings_.publish_tentative_objects; }
5960

6061
private:
6162
void loadParameters();

Diff for: perception/multi_object_tracker/include/multi_object_tracker/multi_object_tracker_core.hpp

+15-21
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "multi_object_tracker/data_association/data_association.hpp"
2323
#include "multi_object_tracker/debugger.hpp"
24+
#include "multi_object_tracker/processor/processor.hpp"
2425
#include "multi_object_tracker/tracker/model/tracker_base.hpp"
2526

2627
#include <rclcpp/rclcpp.hpp>
@@ -46,6 +47,7 @@
4647
#include <map>
4748
#include <memory>
4849
#include <string>
50+
#include <unordered_map>
4951
#include <vector>
5052

5153
class MultiObjectTracker : public rclcpp::Node
@@ -54,42 +56,34 @@ class MultiObjectTracker : public rclcpp::Node
5456
explicit MultiObjectTracker(const rclcpp::NodeOptions & node_options);
5557

5658
private:
59+
// ROS interface
5760
rclcpp::Publisher<autoware_auto_perception_msgs::msg::TrackedObjects>::SharedPtr
5861
tracked_objects_pub_;
5962
rclcpp::Subscription<autoware_auto_perception_msgs::msg::DetectedObjects>::SharedPtr
6063
detected_object_sub_;
64+
tf2_ros::Buffer tf_buffer_;
65+
tf2_ros::TransformListener tf_listener_;
66+
67+
// debugger
68+
std::unique_ptr<TrackerDebugger> debugger_;
69+
std::unique_ptr<tier4_autoware_utils::PublishedTimePublisher> published_time_publisher_;
6170

6271
// publish timer
6372
rclcpp::TimerBase::SharedPtr publish_timer_;
6473
rclcpp::Time last_published_time_;
6574
double publisher_period_;
6675

67-
// debugger class
68-
std::unique_ptr<TrackerDebugger> debugger_;
69-
70-
tf2_ros::Buffer tf_buffer_;
71-
tf2_ros::TransformListener tf_listener_;
72-
73-
std::map<std::uint8_t, std::string> tracker_map_;
74-
75-
std::unique_ptr<tier4_autoware_utils::PublishedTimePublisher> published_time_publisher_;
76+
// internal states
77+
std::string world_frame_id_; // tracking frame
78+
std::unique_ptr<DataAssociation> data_association_;
79+
std::unique_ptr<TrackerProcessor> processor_;
7680

81+
// callback functions
7782
void onMeasurement(
7883
const autoware_auto_perception_msgs::msg::DetectedObjects::ConstSharedPtr input_objects_msg);
7984
void onTimer();
8085

81-
std::string world_frame_id_; // tracking frame
82-
std::list<std::shared_ptr<Tracker>> list_tracker_;
83-
std::unique_ptr<DataAssociation> data_association_;
84-
85-
void checkTrackerLifeCycle(
86-
std::list<std::shared_ptr<Tracker>> & list_tracker, const rclcpp::Time & time);
87-
void sanitizeTracker(
88-
std::list<std::shared_ptr<Tracker>> & list_tracker, const rclcpp::Time & time);
89-
std::shared_ptr<Tracker> createNewTracker(
90-
const autoware_auto_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
91-
const geometry_msgs::msg::Transform & self_transform) const;
92-
86+
// publish processes
9387
void checkAndPublish(const rclcpp::Time & time);
9488
void publish(const rclcpp::Time & time) const;
9589
inline bool shouldTrackerPublish(const std::shared_ptr<const Tracker> tracker) const;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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+
17+
#ifndef MULTI_OBJECT_TRACKER__PROCESSOR__PROCESSOR_HPP_
18+
#define MULTI_OBJECT_TRACKER__PROCESSOR__PROCESSOR_HPP_
19+
20+
#include "multi_object_tracker/tracker/model/tracker_base.hpp"
21+
22+
#include <rclcpp/rclcpp.hpp>
23+
24+
#include <autoware_auto_perception_msgs/msg/detected_objects.hpp>
25+
#include <autoware_auto_perception_msgs/msg/tracked_objects.hpp>
26+
27+
#include <list>
28+
#include <map>
29+
#include <memory>
30+
#include <string>
31+
#include <unordered_map>
32+
#include <vector>
33+
34+
class TrackerProcessor
35+
{
36+
public:
37+
explicit TrackerProcessor(const std::map<std::uint8_t, std::string> & tracker_map);
38+
39+
const std::list<std::shared_ptr<Tracker>> & getListTracker() const { return list_tracker_; }
40+
// tracker processes
41+
void predict(const rclcpp::Time & time);
42+
void update(
43+
const autoware_auto_perception_msgs::msg::DetectedObjects & transformed_objects,
44+
const geometry_msgs::msg::Transform & self_transform,
45+
const std::unordered_map<int, int> & direct_assignment);
46+
void spawn(
47+
const autoware_auto_perception_msgs::msg::DetectedObjects & detected_objects,
48+
const geometry_msgs::msg::Transform & self_transform,
49+
const std::unordered_map<int, int> & reverse_assignment);
50+
void prune(const rclcpp::Time & time);
51+
52+
// output
53+
bool isConfidentTracker(const std::shared_ptr<Tracker> & tracker) const;
54+
void getTrackedObjects(
55+
const rclcpp::Time & time,
56+
autoware_auto_perception_msgs::msg::TrackedObjects & tracked_objects) const;
57+
void getTentativeObjects(
58+
const rclcpp::Time & time,
59+
autoware_auto_perception_msgs::msg::TrackedObjects & tentative_objects) const;
60+
61+
private:
62+
std::map<std::uint8_t, std::string> tracker_map_;
63+
std::list<std::shared_ptr<Tracker>> list_tracker_;
64+
65+
// parameters
66+
float max_elapsed_time_; // [s]
67+
float min_iou_; // [ratio]
68+
float min_iou_for_unknown_object_; // [ratio]
69+
double distance_threshold_; // [m]
70+
int confident_count_threshold_; // [count]
71+
72+
void removeOldTracker(const rclcpp::Time & time);
73+
void removeOverlappedTracker(const rclcpp::Time & time);
74+
std::shared_ptr<Tracker> createNewTracker(
75+
const autoware_auto_perception_msgs::msg::DetectedObject & object, const rclcpp::Time & time,
76+
const geometry_msgs::msg::Transform & self_transform) const;
77+
};
78+
79+
#endif // MULTI_OBJECT_TRACKER__PROCESSOR__PROCESSOR_HPP_

Diff for: perception/multi_object_tracker/package.xml

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
<depend>tf2</depend>
2626
<depend>tf2_ros</depend>
2727
<depend>tier4_autoware_utils</depend>
28-
<depend>tier4_perception_msgs</depend>
2928
<depend>unique_identifier_msgs</depend>
3029

3130
<test_depend>ament_lint_auto</test_depend>

0 commit comments

Comments
 (0)