@@ -358,25 +358,29 @@ bool AEB::hasCollision(
358
358
const double current_v, const Path & ego_path, const std::vector<ObjectData> & objects)
359
359
{
360
360
// calculate RSS
361
- const auto current_p = tier4_autoware_utils::createPoint (0.0 , 0.0 , 0.0 );
361
+ const auto current_p = tier4_autoware_utils::createPoint (
362
+ ego_path[0 ].position .x , ego_path[0 ].position .y , ego_path[0 ].position .z );
362
363
const double & t = t_response_;
363
364
for (const auto & obj : objects) {
364
365
const double & obj_v = obj.velocity ;
365
366
const double rss_dist = current_v * t + (current_v * current_v) / (2 * std::fabs (a_ego_min_)) -
366
367
obj_v * obj_v / (2 * std::fabs (a_obj_min_)) + longitudinal_offset_;
367
- const double dist_ego_to_object =
368
- motion_utils::calcSignedArcLength (ego_path, current_p, obj.position ) -
369
- vehicle_info_.max_longitudinal_offset_m ;
370
- if (dist_ego_to_object < rss_dist) {
371
- // collision happens
372
- ObjectData collision_data = obj;
373
- collision_data.rss = rss_dist;
374
- collision_data.distance_to_object = dist_ego_to_object;
375
- collision_data_keeper_.update (collision_data);
376
- return true ;
368
+
369
+ // check the object is front the ego or not
370
+ if ((obj.position .x - ego_path[0 ].position .x ) > 0 ) {
371
+ const double dist_ego_to_object =
372
+ motion_utils::calcSignedArcLength (ego_path, current_p, obj.position ) -
373
+ vehicle_info_.max_longitudinal_offset_m ;
374
+ if (dist_ego_to_object < rss_dist) {
375
+ // collision happens
376
+ ObjectData collision_data = obj;
377
+ collision_data.rss = rss_dist;
378
+ collision_data.distance_to_object = dist_ego_to_object;
379
+ collision_data_keeper_.update (collision_data);
380
+ return true ;
381
+ }
377
382
}
378
383
}
379
-
380
384
return false ;
381
385
}
382
386
0 commit comments