@@ -82,28 +82,33 @@ bool isTargetObjectFront(
82
82
83
83
Polygon2d createExtendedPolygon (
84
84
const Pose & base_link_pose, const vehicle_info_util::VehicleInfo & vehicle_info,
85
- const double lon_length, const double lat_margin, CollisionCheckDebug & debug)
85
+ const double lon_length, const double lat_margin, const double is_stopped_obj,
86
+ CollisionCheckDebug & debug)
86
87
{
87
88
const double & base_to_front = vehicle_info.max_longitudinal_offset_m ;
88
89
const double & width = vehicle_info.vehicle_width_m ;
89
90
const double & base_to_rear = vehicle_info.rear_overhang_m ;
90
91
91
- const double lon_offset = std::max (lon_length + base_to_front, base_to_front);
92
-
92
+ // if stationary object, extend forward and backward by the half of lon length
93
+ const double forward_lon_offset = base_to_front + (is_stopped_obj ? lon_length / 2 : lon_length);
94
+ const double backward_lon_offset =
95
+ -base_to_rear - (is_stopped_obj ? lon_length / 2 : 0 ); // minus value
93
96
const double lat_offset = width / 2.0 + lat_margin;
94
97
95
98
{
96
- debug.extended_polygon_lon_offset = lon_offset;
97
- debug.extended_polygon_lat_offset = lat_offset;
99
+ debug.forward_lon_offset = forward_lon_offset;
100
+ debug.backward_lon_offset = backward_lon_offset;
101
+ debug.lat_offset = lat_offset;
98
102
}
99
103
100
- const auto p1 = tier4_autoware_utils::calcOffsetPose (base_link_pose, lon_offset, lat_offset, 0.0 );
104
+ const auto p1 =
105
+ tier4_autoware_utils::calcOffsetPose (base_link_pose, forward_lon_offset, lat_offset, 0.0 );
101
106
const auto p2 =
102
- tier4_autoware_utils::calcOffsetPose (base_link_pose, lon_offset , -lat_offset, 0.0 );
107
+ tier4_autoware_utils::calcOffsetPose (base_link_pose, forward_lon_offset , -lat_offset, 0.0 );
103
108
const auto p3 =
104
- tier4_autoware_utils::calcOffsetPose (base_link_pose, -base_to_rear , -lat_offset, 0.0 );
109
+ tier4_autoware_utils::calcOffsetPose (base_link_pose, backward_lon_offset , -lat_offset, 0.0 );
105
110
const auto p4 =
106
- tier4_autoware_utils::calcOffsetPose (base_link_pose, -base_to_rear , lat_offset, 0.0 );
111
+ tier4_autoware_utils::calcOffsetPose (base_link_pose, backward_lon_offset , lat_offset, 0.0 );
107
112
108
113
Polygon2d polygon;
109
114
appendPointToPolygon (polygon, p1.position );
@@ -118,7 +123,7 @@ Polygon2d createExtendedPolygon(
118
123
119
124
Polygon2d createExtendedPolygon (
120
125
const Pose & obj_pose, const Shape & shape, const double lon_length, const double lat_margin,
121
- CollisionCheckDebug & debug)
126
+ const double is_stopped_obj, CollisionCheckDebug & debug)
122
127
{
123
128
const auto obj_polygon = tier4_autoware_utils::toPolygon2d (obj_pose, shape);
124
129
if (obj_polygon.outer ().empty ()) {
@@ -139,19 +144,27 @@ Polygon2d createExtendedPolygon(
139
144
min_y = std::min (transformed_p.y , min_y);
140
145
}
141
146
142
- const double lon_offset = max_x + lon_length;
147
+ // if stationary object, extend forward and backward by the half of lon length
148
+ const double forward_lon_offset = max_x + (is_stopped_obj ? lon_length / 2 : lon_length);
149
+ const double backward_lon_offset = min_x - (is_stopped_obj ? lon_length / 2 : 0 ); // minus value
150
+
143
151
const double left_lat_offset = max_y + lat_margin;
144
152
const double right_lat_offset = min_y - lat_margin;
145
153
146
154
{
147
- debug.extended_polygon_lon_offset = lon_offset;
148
- debug.extended_polygon_lat_offset = (left_lat_offset + right_lat_offset) / 2 ;
155
+ debug.forward_lon_offset = forward_lon_offset;
156
+ debug.backward_lon_offset = backward_lon_offset;
157
+ debug.lat_offset = (left_lat_offset + right_lat_offset) / 2 ;
149
158
}
150
159
151
- const auto p1 = tier4_autoware_utils::calcOffsetPose (obj_pose, lon_offset, left_lat_offset, 0.0 );
152
- const auto p2 = tier4_autoware_utils::calcOffsetPose (obj_pose, lon_offset, right_lat_offset, 0.0 );
153
- const auto p3 = tier4_autoware_utils::calcOffsetPose (obj_pose, min_x, right_lat_offset, 0.0 );
154
- const auto p4 = tier4_autoware_utils::calcOffsetPose (obj_pose, min_x, left_lat_offset, 0.0 );
160
+ const auto p1 =
161
+ tier4_autoware_utils::calcOffsetPose (obj_pose, forward_lon_offset, left_lat_offset, 0.0 );
162
+ const auto p2 =
163
+ tier4_autoware_utils::calcOffsetPose (obj_pose, forward_lon_offset, right_lat_offset, 0.0 );
164
+ const auto p3 =
165
+ tier4_autoware_utils::calcOffsetPose (obj_pose, backward_lon_offset, right_lat_offset, 0.0 );
166
+ const auto p4 =
167
+ tier4_autoware_utils::calcOffsetPose (obj_pose, backward_lon_offset, left_lat_offset, 0.0 );
155
168
156
169
Polygon2d polygon;
157
170
appendPointToPolygon (polygon, p1.position );
@@ -338,14 +351,17 @@ std::vector<Polygon2d> getCollidedPolygons(
338
351
339
352
const auto & lon_offset = std::max (rss_dist, min_lon_length) * hysteresis_factor;
340
353
const auto & lat_margin = rss_parameters.lateral_distance_max_threshold * hysteresis_factor;
341
- const auto & extended_ego_polygon =
342
- is_object_front
343
- ? createExtendedPolygon (ego_pose, ego_vehicle_info, lon_offset, lat_margin, debug)
344
- : ego_polygon;
354
+ // TODO(watanabe) fix hard coding value
355
+ const bool is_stopped_object = object_velocity < 0.3 ;
356
+ const auto & extended_ego_polygon = is_object_front ? createExtendedPolygon (
357
+ ego_pose, ego_vehicle_info, lon_offset,
358
+ lat_margin, is_stopped_object, debug)
359
+ : ego_polygon;
345
360
const auto & extended_obj_polygon =
346
361
is_object_front
347
362
? obj_polygon
348
- : createExtendedPolygon (obj_pose, target_object.shape , lon_offset, lat_margin, debug);
363
+ : createExtendedPolygon (
364
+ obj_pose, target_object.shape , lon_offset, lat_margin, is_stopped_object, debug);
349
365
350
366
{
351
367
debug.rss_longitudinal = rss_dist;
0 commit comments