Skip to content

Commit e495efb

Browse files
committed
fix: define type for object list
Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
1 parent b4993c2 commit e495efb

File tree

4 files changed

+37
-39
lines changed

4 files changed

+37
-39
lines changed

perception/multi_object_tracker/include/multi_object_tracker/multi_object_tracker_core.hpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@
5555
namespace multi_object_tracker
5656
{
5757

58-
using autoware_auto_perception_msgs::msg::DetectedObject;
59-
using autoware_auto_perception_msgs::msg::DetectedObjects;
60-
using autoware_auto_perception_msgs::msg::TrackedObjects;
58+
using DetectedObject = autoware_auto_perception_msgs::msg::DetectedObject;
59+
using DetectedObjects = autoware_auto_perception_msgs::msg::DetectedObjects;
60+
using TrackedObjects = autoware_auto_perception_msgs::msg::TrackedObjects;
6161

6262
class MultiObjectTracker : public rclcpp::Node
6363
{
@@ -94,7 +94,7 @@ class MultiObjectTracker : public rclcpp::Node
9494
// callback functions
9595
void onTimer();
9696
void onTrigger();
97-
void onMessage(const std::vector<std::pair<size_t, DetectedObjects>> & objects_data);
97+
void onMessage(const ObjectsList & objects_list);
9898

9999
// publish processes
100100
void runProcess(const DetectedObjects & input_objects_msg);

perception/multi_object_tracker/include/multi_object_tracker/processor/input_manager.hpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828

2929
namespace multi_object_tracker
3030
{
31-
using autoware_auto_perception_msgs::msg::DetectedObjects;
31+
using DetectedObjects = autoware_auto_perception_msgs::msg::DetectedObjects;
32+
using ObjectsList = std::vector<std::pair<uint, DetectedObjects>>;
3233

3334
struct InputChannel
3435
{
@@ -43,12 +44,12 @@ struct InputChannel
4344
class InputStream
4445
{
4546
public:
46-
explicit InputStream(rclcpp::Node & node, size_t & index);
47+
explicit InputStream(rclcpp::Node & node, uint & index);
4748

4849
void init(const InputChannel & input_channel);
4950

5051
void setQueueSize(size_t que_size) { que_size_ = que_size; }
51-
void setTriggerFunction(std::function<void(const size_t &)> func_trigger)
52+
void setTriggerFunction(std::function<void(const uint &)> func_trigger)
5253
{
5354
func_trigger_ = func_trigger;
5455
}
@@ -57,7 +58,7 @@ class InputStream
5758

5859
void getObjectsOlderThan(
5960
const rclcpp::Time & object_latest_time, const rclcpp::Time & object_oldest_time,
60-
std::vector<std::pair<size_t, DetectedObjects>> & objects);
61+
ObjectsList & objects_list);
6162
void getNames(std::string & long_name, std::string & short_name)
6263
{
6364
long_name = long_name_;
@@ -78,7 +79,7 @@ class InputStream
7879

7980
private:
8081
rclcpp::Node & node_;
81-
size_t index_;
82+
uint index_;
8283

8384
std::string input_topic_;
8485
std::string long_name_;
@@ -87,7 +88,7 @@ class InputStream
8788
size_t que_size_{30};
8889
std::deque<DetectedObjects> objects_que_;
8990

90-
std::function<void(const size_t &)> func_trigger_;
91+
std::function<void(const uint &)> func_trigger_;
9192

9293
bool is_time_initialized_{false};
9394
double expected_rate_;
@@ -108,12 +109,11 @@ class InputManager
108109
void init(const std::vector<InputChannel> & input_channels);
109110
void setTriggerFunction(std::function<void()> func_trigger) { func_trigger_ = func_trigger; }
110111

111-
void onTrigger(const size_t & index) const;
112+
void onTrigger(const uint & index) const;
112113

113114
void getObjectTimeInterval(
114115
const rclcpp::Time & now, rclcpp::Time & object_latest_time, rclcpp::Time & object_oldest_time);
115-
bool getObjects(
116-
const rclcpp::Time & now, std::vector<std::pair<size_t, DetectedObjects>> & objects_list);
116+
bool getObjects(const rclcpp::Time & now, ObjectsList & objects_list);
117117

118118
private:
119119
rclcpp::Node & node_;

perception/multi_object_tracker/src/multi_object_tracker_core.cpp

+12-14
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,6 @@ MultiObjectTracker::MultiObjectTracker(const rclcpp::NodeOptions & node_options)
8787
std::vector<std::string> input_names_long = get_parameter("input_names_long").as_string_array();
8888
std::vector<std::string> input_names_short = get_parameter("input_names_short").as_string_array();
8989

90-
input_channels_.resize(input_topic_names.size());
91-
assert(input_topic_names.size() == input_names_long.size());
92-
assert(input_topic_names.size() == input_names_short.size());
93-
for (size_t i = 0; i < input_topic_names.size(); i++) {
94-
input_channels_[i].index = i;
95-
input_channels_[i].input_topic = input_topic_names[i];
96-
input_channels_[i].long_name = input_names_long[i];
97-
input_channels_[i].short_name = input_names_short[i];
98-
}
99-
10090
// ROS interface - Publisher
10191
tracked_objects_pub_ = create_publisher<TrackedObjects>("output", rclcpp::QoS{1});
10292

@@ -106,6 +96,15 @@ MultiObjectTracker::MultiObjectTracker(const rclcpp::NodeOptions & node_options)
10696
return;
10797
}
10898
input_topic_size_ = input_topic_names.size();
99+
input_channels_.resize(input_topic_size_);
100+
assert(input_names_long.size() == input_topic_size_);
101+
assert(input_names_short.size() == input_topic_size_);
102+
for (size_t i = 0; i < input_topic_size_; i++) {
103+
input_channels_[i].index = i;
104+
input_channels_[i].input_topic = input_topic_names[i];
105+
input_channels_[i].long_name = input_names_long[i];
106+
input_channels_[i].short_name = input_names_short[i];
107+
}
109108

110109
// Initialize input manager
111110
input_manager_ = std::make_unique<InputManager>(*this);
@@ -174,7 +173,7 @@ void MultiObjectTracker::onTrigger()
174173
{
175174
const rclcpp::Time current_time = this->now();
176175
// get objects from the input manager and run process
177-
std::vector<std::pair<size_t, DetectedObjects>> objects_list;
176+
std::vector<std::pair<uint, DetectedObjects>> objects_list;
178177
const bool is_objects_ready = input_manager_->getObjects(current_time, objects_list);
179178
if (!is_objects_ready) return;
180179

@@ -206,7 +205,7 @@ void MultiObjectTracker::onTimer()
206205
if (elapsed_time < maximum_publish_latency) return;
207206

208207
// get objects from the input manager and run process
209-
std::vector<std::pair<size_t, DetectedObjects>> objects_list;
208+
ObjectsList objects_list;
210209
const bool is_objects_ready = input_manager_->getObjects(current_time, objects_list);
211210
if (is_objects_ready) {
212211
onMessage(objects_list);
@@ -216,8 +215,7 @@ void MultiObjectTracker::onTimer()
216215
checkAndPublish(current_time);
217216
}
218217

219-
void MultiObjectTracker::onMessage(
220-
const std::vector<std::pair<size_t, DetectedObjects>> & objects_list)
218+
void MultiObjectTracker::onMessage(const ObjectsList & objects_list)
221219
{
222220
const rclcpp::Time current_time = this->now();
223221
const rclcpp::Time oldest_time(objects_list.front().second.header.stamp);

perception/multi_object_tracker/src/processor/input_manager.cpp

+12-12
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
namespace multi_object_tracker
2020
{
2121

22-
InputStream::InputStream(rclcpp::Node & node, size_t & index) : node_(node), index_(index)
22+
InputStream::InputStream(rclcpp::Node & node, uint & index) : node_(node), index_(index)
2323
{
2424
}
2525

@@ -104,7 +104,7 @@ void InputStream::onMessage(
104104

105105
void InputStream::getObjectsOlderThan(
106106
const rclcpp::Time & object_latest_time, const rclcpp::Time & object_oldest_time,
107-
std::vector<std::pair<size_t, DetectedObjects>> & objects_list)
107+
ObjectsList & objects_list)
108108
{
109109
assert(object_latest_time.nanoseconds() > object_oldest_time.nanoseconds());
110110

@@ -119,7 +119,7 @@ void InputStream::getObjectsOlderThan(
119119

120120
// Add the object if the object is older than the specified latest time
121121
if (object_latest_time >= object_time) {
122-
std::pair<size_t, DetectedObjects> object_pair(index_, object);
122+
std::pair<uint, DetectedObjects> object_pair(index_, object);
123123
objects_list.push_back(object_pair);
124124
// remove the object from the queue
125125
objects_que_.pop_front();
@@ -147,7 +147,8 @@ void InputManager::init(const std::vector<InputChannel> & input_channels)
147147
sub_objects_array_.resize(input_size_);
148148

149149
for (size_t i = 0; i < input_size_; i++) {
150-
InputStream input_stream(node_, i);
150+
uint index(i);
151+
InputStream input_stream(node_, index);
151152
input_stream.init(input_channels[i]);
152153
input_stream.setTriggerFunction(
153154
std::bind(&InputManager::onTrigger, this, std::placeholders::_1));
@@ -166,10 +167,10 @@ void InputManager::init(const std::vector<InputChannel> & input_channels)
166167
is_initialized_ = true;
167168
}
168169

169-
void InputManager::onTrigger(const size_t & index) const
170+
void InputManager::onTrigger(const uint & index) const
170171
{
171172
// input stream index of 0 is the target(main) input stream
172-
const size_t target_idx = 0;
173+
const uint target_idx = 0;
173174

174175
// when the main stream triggers, call the trigger function
175176
if (index == target_idx && func_trigger_) {
@@ -203,11 +204,11 @@ void InputManager::getObjectTimeInterval(
203204
}
204205

205206
// Get proper latency
206-
constexpr double target_latency = 0.15; // [s], measurement to tracking latency
207+
constexpr double target_latency = 0.18; // [s], measurement to tracking latency
207208
// process latency of a main detection + margin
208-
209209
constexpr double acceptable_latency =
210-
0.35; // [s], acceptable band from the target latency, larger than the target latency
210+
0.32; // [s], acceptable band from the target latency, larger than the target latency
211+
211212
object_latest_time = now - rclcpp::Duration::from_seconds(target_latency);
212213
object_oldest_time = now - rclcpp::Duration::from_seconds(acceptable_latency);
213214

@@ -217,8 +218,7 @@ void InputManager::getObjectTimeInterval(
217218
object_oldest_time > latest_object_time_ ? object_oldest_time : latest_object_time_;
218219
}
219220

220-
bool InputManager::getObjects(
221-
const rclcpp::Time & now, std::vector<std::pair<size_t, DetectedObjects>> & objects_list)
221+
bool InputManager::getObjects(const rclcpp::Time & now, ObjectsList & objects_list)
222222
{
223223
if (!is_initialized_) {
224224
RCLCPP_INFO(node_.get_logger(), "InputManager::getObjects Input manager is not initialized");
@@ -241,7 +241,7 @@ bool InputManager::getObjects(
241241
// Sort objects by timestamp
242242
std::sort(
243243
objects_list.begin(), objects_list.end(),
244-
[](const std::pair<size_t, DetectedObjects> & a, const std::pair<size_t, DetectedObjects> & b) {
244+
[](const std::pair<uint, DetectedObjects> & a, const std::pair<uint, DetectedObjects> & b) {
245245
return (rclcpp::Time(a.second.header.stamp) - rclcpp::Time(b.second.header.stamp)).seconds() <
246246
0;
247247
});

0 commit comments

Comments
 (0)