20
20
#include < autoware/universe_utils/system/stop_watch.hpp>
21
21
#include < pcl_ros/transforms.hpp>
22
22
#include < rclcpp/rclcpp.hpp>
23
+ #include < tf2_eigen/tf2_eigen.hpp>
23
24
24
25
#include < boost/geometry.hpp>
25
26
26
27
#include < pcl_conversions/pcl_conversions.h>
27
28
#include < tf2/utils.h>
28
29
29
- #ifdef ROS_DISTRO_GALACTIC
30
- #include < tf2_eigen/tf2_eigen.h>
31
- #else
32
- #include < tf2_eigen/tf2_eigen.hpp>
33
- #endif
34
-
35
- #include < iostream>
36
30
#include < vector>
37
31
38
32
namespace
39
33
{
40
- pcl::PointCloud<pcl::PointXYZ> getTransformedPointCloud (
34
+ pcl::PointCloud<pcl::PointXYZ> get_transformed_point_cloud (
41
35
const sensor_msgs::msg::PointCloud2 & pointcloud_msg,
42
36
const geometry_msgs::msg::Transform & transform)
43
37
{
@@ -52,7 +46,7 @@ pcl::PointCloud<pcl::PointXYZ> getTransformedPointCloud(
52
46
return transformed_pointcloud;
53
47
}
54
48
55
- pcl::PointCloud<pcl::PointXYZ> filterPointCloudByTrajectory (
49
+ pcl::PointCloud<pcl::PointXYZ> filter_point_cloud_by_trajectory (
56
50
const pcl::PointCloud<pcl::PointXYZ> & pointcloud,
57
51
const autoware_planning_msgs::msg::Trajectory & trajectory, const double radius)
58
52
{
@@ -70,7 +64,7 @@ pcl::PointCloud<pcl::PointXYZ> filterPointCloudByTrajectory(
70
64
return filtered_pointcloud;
71
65
}
72
66
73
- double calcBrakingDistance (
67
+ double calc_braking_distance (
74
68
const double abs_velocity, const double max_deceleration, const double delay_time)
75
69
{
76
70
const double idling_distance = abs_velocity * delay_time;
@@ -82,12 +76,7 @@ double calcBrakingDistance(
82
76
83
77
namespace obstacle_collision_checker
84
78
{
85
- ObstacleCollisionChecker::ObstacleCollisionChecker (rclcpp::Node & node)
86
- : vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo())
87
- {
88
- }
89
-
90
- Output ObstacleCollisionChecker::update (const Input & input)
79
+ Output check_for_collisions (const Input & input)
91
80
{
92
81
Output output;
93
82
autoware::universe_utils::StopWatch<std::chrono::milliseconds> stop_watch;
@@ -97,31 +86,32 @@ Output ObstacleCollisionChecker::update(const Input & input)
97
86
const auto & raw_abs_velocity = std::abs (input.current_twist ->linear .x );
98
87
const auto abs_velocity = raw_abs_velocity < min_velocity ? 0.0 : raw_abs_velocity;
99
88
const auto braking_distance =
100
- calcBrakingDistance (abs_velocity, param_.max_deceleration , param_.delay_time );
101
- output.resampled_trajectory = cutTrajectory (
102
- resampleTrajectory (*input.predicted_trajectory , param_.resample_interval ), braking_distance);
89
+ calc_braking_distance (abs_velocity, input.param .max_deceleration , input.param .delay_time );
90
+ output.resampled_trajectory = cut_trajectory (
91
+ resample_trajectory (*input.predicted_trajectory , input.param .resample_interval ),
92
+ braking_distance);
103
93
output.processing_time_map [" resampleTrajectory" ] = stop_watch.toc (true );
104
94
105
95
// resample pointcloud
106
96
const auto obstacle_pointcloud =
107
- getTransformedPointCloud (*input.obstacle_pointcloud , input.obstacle_transform ->transform );
108
- const auto filtered_obstacle_pointcloud = filterPointCloudByTrajectory (
109
- obstacle_pointcloud, output.resampled_trajectory , param_ .search_radius );
97
+ get_transformed_point_cloud (*input.obstacle_pointcloud , input.obstacle_transform ->transform );
98
+ const auto filtered_obstacle_pointcloud = filter_point_cloud_by_trajectory (
99
+ obstacle_pointcloud, output.resampled_trajectory , input. param .search_radius );
110
100
111
101
output.vehicle_footprints =
112
- createVehicleFootprints (output.resampled_trajectory , param_, vehicle_info_ );
102
+ create_vehicle_footprints (output.resampled_trajectory , input. param , input. vehicle_info );
113
103
output.processing_time_map [" createVehicleFootprints" ] = stop_watch.toc (true );
114
104
115
- output.vehicle_passing_areas = createVehiclePassingAreas (output.vehicle_footprints );
105
+ output.vehicle_passing_areas = create_vehicle_passing_areas (output.vehicle_footprints );
116
106
output.processing_time_map [" createVehiclePassingAreas" ] = stop_watch.toc (true );
117
107
118
- output.will_collide = willCollide (filtered_obstacle_pointcloud, output.vehicle_passing_areas );
108
+ output.will_collide = will_collide (filtered_obstacle_pointcloud, output.vehicle_passing_areas );
119
109
output.processing_time_map [" willCollide" ] = stop_watch.toc (true );
120
110
121
111
return output;
122
112
}
123
113
124
- autoware_planning_msgs::msg::Trajectory ObstacleCollisionChecker::resampleTrajectory (
114
+ autoware_planning_msgs::msg::Trajectory resample_trajectory (
125
115
const autoware_planning_msgs::msg::Trajectory & trajectory, const double interval)
126
116
{
127
117
autoware_planning_msgs::msg::Trajectory resampled;
@@ -131,11 +121,9 @@ autoware_planning_msgs::msg::Trajectory ObstacleCollisionChecker::resampleTrajec
131
121
for (size_t i = 1 ; i < trajectory.points .size () - 1 ; ++i) {
132
122
const auto & point = trajectory.points .at (i);
133
123
134
- const auto p1 =
135
- autoware::universe_utils::fromMsg (resampled.points .back ().pose .position ).to_2d ();
136
- const auto p2 = autoware::universe_utils::fromMsg (point.pose .position ).to_2d ();
137
-
138
- if (boost::geometry::distance (p1, p2) > interval) {
124
+ const auto distance =
125
+ autoware::universe_utils::calcDistance2d (resampled.points .back (), point.pose .position );
126
+ if (distance > interval) {
139
127
resampled.points .push_back (point);
140
128
}
141
129
}
@@ -144,7 +132,7 @@ autoware_planning_msgs::msg::Trajectory ObstacleCollisionChecker::resampleTrajec
144
132
return resampled;
145
133
}
146
134
147
- autoware_planning_msgs::msg::Trajectory ObstacleCollisionChecker::cutTrajectory (
135
+ autoware_planning_msgs::msg::Trajectory cut_trajectory (
148
136
const autoware_planning_msgs::msg::Trajectory & trajectory, const double length)
149
137
{
150
138
autoware_planning_msgs::msg::Trajectory cut;
@@ -157,8 +145,8 @@ autoware_planning_msgs::msg::Trajectory ObstacleCollisionChecker::cutTrajectory(
157
145
158
146
const auto p1 = autoware::universe_utils::fromMsg (cut.points .back ().pose .position );
159
147
const auto p2 = autoware::universe_utils::fromMsg (point.pose .position );
160
- const auto points_distance = boost::geometry::distance (p1.to_2d (), p2.to_2d ());
161
148
149
+ const auto points_distance = boost::geometry::distance (p1, p2);
162
150
const auto remain_distance = length - total_length;
163
151
164
152
// Over length
@@ -187,7 +175,7 @@ autoware_planning_msgs::msg::Trajectory ObstacleCollisionChecker::cutTrajectory(
187
175
return cut;
188
176
}
189
177
190
- std::vector<LinearRing2d> ObstacleCollisionChecker::createVehicleFootprints (
178
+ std::vector<LinearRing2d> create_vehicle_footprints (
191
179
const autoware_planning_msgs::msg::Trajectory & trajectory, const Param & param,
192
180
const autoware::vehicle_info_utils::VehicleInfo & vehicle_info)
193
181
{
@@ -205,22 +193,21 @@ std::vector<LinearRing2d> ObstacleCollisionChecker::createVehicleFootprints(
205
193
return vehicle_footprints;
206
194
}
207
195
208
- std::vector<LinearRing2d> ObstacleCollisionChecker::createVehiclePassingAreas (
196
+ std::vector<LinearRing2d> create_vehicle_passing_areas (
209
197
const std::vector<LinearRing2d> & vehicle_footprints)
210
198
{
211
199
// Create hull from two adjacent vehicle footprints
212
200
std::vector<LinearRing2d> areas;
213
201
for (size_t i = 0 ; i < vehicle_footprints.size () - 1 ; ++i) {
214
202
const auto & footprint1 = vehicle_footprints.at (i);
215
203
const auto & footprint2 = vehicle_footprints.at (i + 1 );
216
- areas.push_back (createHullFromFootprints (footprint1, footprint2));
204
+ areas.push_back (create_hull_from_footprints (footprint1, footprint2));
217
205
}
218
206
219
207
return areas;
220
208
}
221
209
222
- LinearRing2d ObstacleCollisionChecker::createHullFromFootprints (
223
- const LinearRing2d & area1, const LinearRing2d & area2)
210
+ LinearRing2d create_hull_from_footprints (const LinearRing2d & area1, const LinearRing2d & area2)
224
211
{
225
212
autoware::universe_utils::MultiPoint2d combined;
226
213
for (const auto & p : area1) {
@@ -234,33 +221,32 @@ LinearRing2d ObstacleCollisionChecker::createHullFromFootprints(
234
221
return hull;
235
222
}
236
223
237
- bool ObstacleCollisionChecker::willCollide (
224
+ bool will_collide (
238
225
const pcl::PointCloud<pcl::PointXYZ> & obstacle_pointcloud,
239
226
const std::vector<LinearRing2d> & vehicle_footprints)
240
227
{
241
228
for (size_t i = 1 ; i < vehicle_footprints.size (); i++) {
242
229
// skip first footprint because surround obstacle checker handle it
243
230
const auto & vehicle_footprint = vehicle_footprints.at (i);
244
- if (hasCollision (obstacle_pointcloud, vehicle_footprint)) {
245
- RCLCPP_WARN (
246
- rclcpp::get_logger (" obstacle_collision_checker" ), " ObstacleCollisionChecker::willCollide" );
231
+ if (has_collision (obstacle_pointcloud, vehicle_footprint)) {
232
+ RCLCPP_WARN (rclcpp::get_logger (" obstacle_collision_checker" ), " willCollide" );
247
233
return true ;
248
234
}
249
235
}
250
236
251
237
return false ;
252
238
}
253
239
254
- bool ObstacleCollisionChecker::hasCollision (
240
+ bool has_collision (
255
241
const pcl::PointCloud<pcl::PointXYZ> & obstacle_pointcloud,
256
242
const LinearRing2d & vehicle_footprint)
257
243
{
258
244
for (const auto & point : obstacle_pointcloud.points ) {
259
245
if (boost::geometry::within (
260
246
autoware::universe_utils::Point2d{point.x , point.y }, vehicle_footprint)) {
261
247
RCLCPP_WARN (
262
- rclcpp::get_logger (" obstacle_collision_checker" ),
263
- " [ObstacleCollisionChecker] Collide to Point x: %f y: %f " , point. x , point.y );
248
+ rclcpp::get_logger (" obstacle_collision_checker" ), " Collide to Point x: %f y: %f " , point. x ,
249
+ point.y );
264
250
return true ;
265
251
}
266
252
}
0 commit comments