@@ -1248,7 +1248,6 @@ void ObstacleCruisePlannerNode::checkConsistency(
1248
1248
const auto current_closest_stop_obstacle =
1249
1249
obstacle_cruise_utils::getClosestStopObstacle (stop_obstacles);
1250
1250
1251
- // If previous closest obstacle ptr is not set
1252
1251
if (!prev_closest_stop_obstacle_ptr_) {
1253
1252
if (current_closest_stop_obstacle) {
1254
1253
prev_closest_stop_obstacle_ptr_ =
@@ -1257,44 +1256,23 @@ void ObstacleCruisePlannerNode::checkConsistency(
1257
1256
return ;
1258
1257
}
1259
1258
1260
- // Put previous closest target obstacle if necessary
1261
1259
const auto predicted_object_itr = std::find_if (
1262
1260
predicted_objects.objects .begin (), predicted_objects.objects .end (),
1263
1261
[&](PredictedObject predicted_object) {
1264
1262
return tier4_autoware_utils::toHexString (predicted_object.object_id ) ==
1265
1263
prev_closest_stop_obstacle_ptr_->uuid ;
1266
1264
});
1267
-
1268
- // If previous closest obstacle is not in the current perception lists
1269
- // just return the current target obstacles
1265
+ // If previous closest obstacle disappear from the perception result, do nothing anymore.
1270
1266
if (predicted_object_itr == predicted_objects.objects .end ()) {
1271
1267
return ;
1272
1268
}
1273
1269
1274
- // Previous closest obstacle is in the perception lists
1275
- const auto obstacle_itr = std::find_if (
1270
+ const auto is_disappeared_from_stop_obstacle = std::none_of (
1276
1271
stop_obstacles.begin (), stop_obstacles.end (),
1277
1272
[&](const auto & obstacle) { return obstacle.uuid == prev_closest_stop_obstacle_ptr_->uuid ; });
1278
-
1279
- // Previous closest obstacle is both in the perception lists and target obstacles
1280
- if (obstacle_itr != stop_obstacles.end ()) {
1281
- if (current_closest_stop_obstacle) {
1282
- if ((current_closest_stop_obstacle->uuid == prev_closest_stop_obstacle_ptr_->uuid )) {
1283
- // prev_closest_obstacle is current_closest_stop_obstacle just return the target
1284
- // obstacles(in target obstacles)
1285
- prev_closest_stop_obstacle_ptr_ =
1286
- std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1287
- } else {
1288
- // New obstacle becomes new stop obstacle
1289
- prev_closest_stop_obstacle_ptr_ =
1290
- std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1291
- }
1292
- } else {
1293
- // Previous closest stop obstacle becomes cruise obstacle
1294
- prev_closest_stop_obstacle_ptr_ = nullptr ;
1295
- }
1296
- } else {
1297
- // prev obstacle is not in the target obstacles, but in the perception list
1273
+ if (is_disappeared_from_stop_obstacle) {
1274
+ // re-evaluate as a stop candidate, and overwrite the current decision if "maintain stop"
1275
+ // condition is satisfied
1298
1276
const double elapsed_time = (current_time - prev_closest_stop_obstacle_ptr_->stamp ).seconds ();
1299
1277
if (
1300
1278
predicted_object_itr->kinematics .initial_twist_with_covariance .twist .linear .x <
@@ -1303,13 +1281,13 @@ void ObstacleCruisePlannerNode::checkConsistency(
1303
1281
stop_obstacles.push_back (*prev_closest_stop_obstacle_ptr_);
1304
1282
return ;
1305
1283
}
1284
+ }
1306
1285
1307
- if (current_closest_stop_obstacle) {
1308
- prev_closest_stop_obstacle_ptr_ =
1309
- std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1310
- } else {
1311
- prev_closest_stop_obstacle_ptr_ = nullptr ;
1312
- }
1286
+ if (current_closest_stop_obstacle) {
1287
+ prev_closest_stop_obstacle_ptr_ =
1288
+ std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1289
+ } else {
1290
+ prev_closest_stop_obstacle_ptr_ = nullptr ;
1313
1291
}
1314
1292
}
1315
1293
0 commit comments