Skip to content

Commit d9d3932

Browse files
authored
refactor(object_merger): use common utils (autowarefoundation#1409)
Signed-off-by: Takayuki Murooka <takayuki5168@gmail.com>
1 parent 4ce0707 commit d9d3932

File tree

6 files changed

+15
-380
lines changed

6 files changed

+15
-380
lines changed

perception/object_merger/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ ament_auto_add_library(mu_successive_shortest_path SHARED
2323
)
2424

2525
ament_auto_add_library(object_association_merger SHARED
26-
src/object_association_merger/utils/utils.cpp
2726
src/object_association_merger/data_association/data_association.cpp
2827
src/object_association_merger/node.cpp
2928
)

perception/object_merger/include/object_association_merger/utils/utils.hpp

-23
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,6 @@
3232

3333
namespace utils
3434
{
35-
double getPolygonArea(const geometry_msgs::msg::Polygon & footprint);
36-
double getRectangleArea(const geometry_msgs::msg::Vector3 & dimensions);
37-
double getCircleArea(const geometry_msgs::msg::Vector3 & dimensions);
38-
double getArea(const autoware_auto_perception_msgs::msg::Shape & shape);
39-
double get2dIoU(
40-
const std::tuple<
41-
const geometry_msgs::msg::Pose &, const autoware_auto_perception_msgs::msg::Shape &> & object1,
42-
const std::tuple<
43-
const geometry_msgs::msg::Pose &, const autoware_auto_perception_msgs::msg::Shape &> & object2);
44-
double get2dIoU(
45-
const autoware_auto_perception_msgs::msg::DetectedObject & object1,
46-
const autoware_auto_perception_msgs::msg::DetectedObject & object2);
47-
double get2dPrecision(
48-
const autoware_auto_perception_msgs::msg::DetectedObject & source_object,
49-
const autoware_auto_perception_msgs::msg::DetectedObject & target_object);
50-
double get2dRecall(
51-
const autoware_auto_perception_msgs::msg::DetectedObject & source_object,
52-
const autoware_auto_perception_msgs::msg::DetectedObject & target_object);
53-
std::uint8_t getHighestProbLabel(
54-
const std::vector<autoware_auto_perception_msgs::msg::ObjectClassification> & classification);
55-
geometry_msgs::msg::Polygon rotatePolygon(
56-
const geometry_msgs::msg::Polygon & polygon, const double & angle);
57-
5835
enum MSG_COV_IDX {
5936
X_X = 0,
6037
X_Y = 1,

perception/object_merger/package.xml

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<depend>autoware_auto_perception_msgs</depend>
1616
<depend>eigen</depend>
1717
<depend>mussp</depend>
18+
<depend>perception_utils</depend>
1819
<depend>rclcpp</depend>
1920
<depend>rclcpp_components</depend>
2021
<depend>tf2</depend>

perception/object_merger/src/object_association_merger/data_association/data_association.cpp

+8-15
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
#include "object_association_merger/data_association/solver/gnn_solver.hpp"
1818
#include "object_association_merger/utils/utils.hpp"
19+
#include "perception_utils/perception_utils.hpp"
20+
#include "tier4_autoware_utils/geometry/geometry.hpp"
1921

2022
#include <algorithm>
2123
#include <list>
@@ -25,15 +27,6 @@
2527

2628
namespace
2729
{
28-
double getDistance(
29-
const geometry_msgs::msg::Point & point0, const geometry_msgs::msg::Point & point1)
30-
{
31-
const double diff_x = point1.x - point0.x;
32-
const double diff_y = point1.y - point0.y;
33-
// const double diff_z = point1.z - point0.z;
34-
return std::sqrt(diff_x * diff_x + diff_y * diff_y);
35-
}
36-
3730
double getFormedYawAngle(
3831
const geometry_msgs::msg::Quaternion & quat0, const geometry_msgs::msg::Quaternion & quat1,
3932
const bool distinguish_front_or_back = true)
@@ -128,17 +121,19 @@ Eigen::MatrixXd DataAssociation::calcScoreMatrix(
128121
for (size_t objects1_idx = 0; objects1_idx < objects1.objects.size(); ++objects1_idx) {
129122
const autoware_auto_perception_msgs::msg::DetectedObject & object1 =
130123
objects1.objects.at(objects1_idx);
131-
const std::uint8_t object1_label = utils::getHighestProbLabel(object1.classification);
124+
const std::uint8_t object1_label =
125+
perception_utils::getHighestProbLabel(object1.classification);
132126

133127
for (size_t objects0_idx = 0; objects0_idx < objects0.objects.size(); ++objects0_idx) {
134128
const autoware_auto_perception_msgs::msg::DetectedObject & object0 =
135129
objects0.objects.at(objects0_idx);
136-
const std::uint8_t object0_label = utils::getHighestProbLabel(object0.classification);
130+
const std::uint8_t object0_label =
131+
perception_utils::getHighestProbLabel(object0.classification);
137132

138133
double score = 0.0;
139134
if (can_assign_matrix_(object1_label, object0_label)) {
140135
const double max_dist = max_dist_matrix_(object1_label, object0_label);
141-
const double dist = getDistance(
136+
const double dist = tier4_autoware_utils::calcDistance2d(
142137
object0.kinematics.pose_with_covariance.pose.position,
143138
object1.kinematics.pose_with_covariance.pose.position);
144139

@@ -159,9 +154,7 @@ Eigen::MatrixXd DataAssociation::calcScoreMatrix(
159154
// 2d iou gate
160155
if (passed_gate) {
161156
const double min_iou = min_iou_matrix_(object1_label, object0_label);
162-
const double iou = utils::get2dIoU(
163-
{object0.kinematics.pose_with_covariance.pose, object0.shape},
164-
{object1.kinematics.pose_with_covariance.pose, object1.shape});
157+
const double iou = perception_utils::get2dIoU(object0, object1);
165158
if (iou < min_iou) passed_gate = false;
166159
}
167160

perception/object_merger/src/object_association_merger/node.cpp

+6-52
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "object_association_merger/node.hpp"
1616

1717
#include "object_association_merger/utils/utils.hpp"
18+
#include "perception_utils/perception_utils.hpp"
1819
#include "tier4_autoware_utils/tier4_autoware_utils.hpp"
1920

2021
#include <boost/optional.hpp>
@@ -30,53 +31,6 @@ using Label = autoware_auto_perception_msgs::msg::ObjectClassification;
3031

3132
namespace
3233
{
33-
boost::optional<geometry_msgs::msg::Transform> getTransform(
34-
const tf2_ros::Buffer & tf_buffer, const std::string & source_frame_id,
35-
const std::string & target_frame_id, const rclcpp::Time & time)
36-
{
37-
try {
38-
geometry_msgs::msg::TransformStamped self_transform_stamped;
39-
self_transform_stamped = tf_buffer.lookupTransform(
40-
/*target*/ target_frame_id, /*src*/ source_frame_id, time,
41-
rclcpp::Duration::from_seconds(0.5));
42-
return self_transform_stamped.transform;
43-
} catch (tf2::TransformException & ex) {
44-
RCLCPP_WARN_STREAM(rclcpp::get_logger("object_association_merger"), ex.what());
45-
return boost::none;
46-
}
47-
}
48-
49-
bool transformDetectedObjects(
50-
const autoware_auto_perception_msgs::msg::DetectedObjects & input_msg,
51-
const std::string & target_frame_id, const tf2_ros::Buffer & tf_buffer,
52-
autoware_auto_perception_msgs::msg::DetectedObjects & output_msg)
53-
{
54-
output_msg = input_msg;
55-
56-
/* transform to world coordinate */
57-
if (input_msg.header.frame_id != target_frame_id) {
58-
output_msg.header.frame_id = target_frame_id;
59-
tf2::Transform tf_target2objects_world;
60-
tf2::Transform tf_target2objects;
61-
tf2::Transform tf_objects_world2objects;
62-
{
63-
const auto ros_target2objects_world =
64-
getTransform(tf_buffer, input_msg.header.frame_id, target_frame_id, input_msg.header.stamp);
65-
if (!ros_target2objects_world) {
66-
return false;
67-
}
68-
tf2::fromMsg(*ros_target2objects_world, tf_target2objects_world);
69-
}
70-
for (auto & object : output_msg.objects) {
71-
tf2::fromMsg(object.kinematics.pose_with_covariance.pose, tf_objects_world2objects);
72-
tf_target2objects = tf_target2objects_world * tf_objects_world2objects;
73-
tf2::toMsg(tf_target2objects, object.kinematics.pose_with_covariance.pose);
74-
// TODO(yukkysaito) transform covariance
75-
}
76-
}
77-
return true;
78-
}
79-
8034
bool isUnknownObjectOverlapped(
8135
const autoware_auto_perception_msgs::msg::DetectedObject & unknown_object,
8236
const autoware_auto_perception_msgs::msg::DetectedObject & known_object,
@@ -87,8 +41,8 @@ bool isUnknownObjectOverlapped(
8741
unknown_object.kinematics.pose_with_covariance.pose,
8842
known_object.kinematics.pose_with_covariance.pose);
8943
if (sq_distance_threshold < sq_distance) return false;
90-
const auto precision = utils::get2dPrecision(unknown_object, known_object);
91-
const auto recall = utils::get2dRecall(unknown_object, known_object);
44+
const auto precision = perception_utils::get2dPrecision(unknown_object, known_object);
45+
const auto recall = perception_utils::get2dRecall(unknown_object, known_object);
9246
return precision > precision_threshold || recall > recall_threshold;
9347
}
9448
} // namespace
@@ -140,9 +94,9 @@ void ObjectAssociationMergerNode::objectsCallback(
14094
/* transform to base_link coordinate */
14195
autoware_auto_perception_msgs::msg::DetectedObjects transformed_objects0, transformed_objects1;
14296
if (
143-
!transformDetectedObjects(
97+
!perception_utils::transformObjects(
14498
*input_objects0_msg, base_link_frame_id_, tf_buffer_, transformed_objects0) ||
145-
!transformDetectedObjects(
99+
!perception_utils::transformObjects(
146100
*input_objects1_msg, base_link_frame_id_, tf_buffer_, transformed_objects1)) {
147101
return;
148102
}
@@ -185,7 +139,7 @@ void ObjectAssociationMergerNode::objectsCallback(
185139
unknown_objects.reserve(output_msg.objects.size());
186140
known_objects.reserve(output_msg.objects.size());
187141
for (const auto & object : output_msg.objects) {
188-
if (utils::getHighestProbLabel(object.classification) == Label::UNKNOWN) {
142+
if (perception_utils::getHighestProbLabel(object.classification) == Label::UNKNOWN) {
189143
unknown_objects.push_back(object);
190144
} else {
191145
known_objects.push_back(object);

0 commit comments

Comments
 (0)