@@ -1378,7 +1378,6 @@ void ObstacleCruisePlannerNode::checkConsistency(
1378
1378
const auto current_closest_stop_obstacle =
1379
1379
obstacle_cruise_utils::getClosestStopObstacle (stop_obstacles);
1380
1380
1381
- // If previous closest obstacle ptr is not set
1382
1381
if (!prev_closest_stop_obstacle_ptr_) {
1383
1382
if (current_closest_stop_obstacle) {
1384
1383
prev_closest_stop_obstacle_ptr_ =
@@ -1387,44 +1386,23 @@ void ObstacleCruisePlannerNode::checkConsistency(
1387
1386
return ;
1388
1387
}
1389
1388
1390
- // Put previous closest target obstacle if necessary
1391
1389
const auto predicted_object_itr = std::find_if (
1392
1390
predicted_objects.objects .begin (), predicted_objects.objects .end (),
1393
1391
[&](PredictedObject predicted_object) {
1394
1392
return tier4_autoware_utils::toHexString (predicted_object.object_id ) ==
1395
1393
prev_closest_stop_obstacle_ptr_->uuid ;
1396
1394
});
1397
-
1398
- // If previous closest obstacle is not in the current perception lists
1399
- // just return the current target obstacles
1395
+ // If previous closest obstacle disappear from the perception result, do nothing anymore.
1400
1396
if (predicted_object_itr == predicted_objects.objects .end ()) {
1401
1397
return ;
1402
1398
}
1403
1399
1404
- // Previous closest obstacle is in the perception lists
1405
- const auto obstacle_itr = std::find_if (
1400
+ const auto is_disappeared_from_stop_obstacle = std::none_of (
1406
1401
stop_obstacles.begin (), stop_obstacles.end (),
1407
1402
[&](const auto & obstacle) { return obstacle.uuid == prev_closest_stop_obstacle_ptr_->uuid ; });
1408
-
1409
- // Previous closest obstacle is both in the perception lists and target obstacles
1410
- if (obstacle_itr != stop_obstacles.end ()) {
1411
- if (current_closest_stop_obstacle) {
1412
- if ((current_closest_stop_obstacle->uuid == prev_closest_stop_obstacle_ptr_->uuid )) {
1413
- // prev_closest_obstacle is current_closest_stop_obstacle just return the target
1414
- // obstacles(in target obstacles)
1415
- prev_closest_stop_obstacle_ptr_ =
1416
- std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1417
- } else {
1418
- // New obstacle becomes new stop obstacle
1419
- prev_closest_stop_obstacle_ptr_ =
1420
- std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1421
- }
1422
- } else {
1423
- // Previous closest stop obstacle becomes cruise obstacle
1424
- prev_closest_stop_obstacle_ptr_ = nullptr ;
1425
- }
1426
- } else {
1427
- // prev obstacle is not in the target obstacles, but in the perception list
1403
+ if (is_disappeared_from_stop_obstacle) {
1404
+ // re-evaluate as a stop candidate, and overwrite the current decision if "maintain stop"
1405
+ // condition is satisfied
1428
1406
const double elapsed_time = (current_time - prev_closest_stop_obstacle_ptr_->stamp ).seconds ();
1429
1407
if (
1430
1408
predicted_object_itr->kinematics .initial_twist_with_covariance .twist .linear .x <
@@ -1433,13 +1411,13 @@ void ObstacleCruisePlannerNode::checkConsistency(
1433
1411
stop_obstacles.push_back (*prev_closest_stop_obstacle_ptr_);
1434
1412
return ;
1435
1413
}
1414
+ }
1436
1415
1437
- if (current_closest_stop_obstacle) {
1438
- prev_closest_stop_obstacle_ptr_ =
1439
- std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1440
- } else {
1441
- prev_closest_stop_obstacle_ptr_ = nullptr ;
1442
- }
1416
+ if (current_closest_stop_obstacle) {
1417
+ prev_closest_stop_obstacle_ptr_ =
1418
+ std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1419
+ } else {
1420
+ prev_closest_stop_obstacle_ptr_ = nullptr ;
1443
1421
}
1444
1422
}
1445
1423
0 commit comments