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