Skip to content

Commit 11628a3

Browse files
update for checkConsistency()
Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp>
1 parent fd5827e commit 11628a3

File tree

1 file changed

+40
-43
lines changed
  • planning/obstacle_cruise_planner/src

1 file changed

+40
-43
lines changed

planning/obstacle_cruise_planner/src/node.cpp

+40-43
Original file line numberDiff line numberDiff line change
@@ -815,12 +815,6 @@ ObstacleCruisePlannerNode::determineEgoBehaviorAgainstObstacles(
815815
}
816816
slow_down_condition_counter_.removeCounterUnlessUpdated();
817817

818-
std::sort(
819-
stop_obstacles.begin(), stop_obstacles.end(),
820-
[](const StopObstacle & o1, const StopObstacle & o2) {
821-
return o1.dist_to_collide_on_decimated_traj < o2.dist_to_collide_on_decimated_traj;
822-
});
823-
824818
// Check target obstacles' consistency
825819
checkConsistency(objects.header.stamp, objects, stop_obstacles);
826820

@@ -1381,50 +1375,53 @@ void ObstacleCruisePlannerNode::checkConsistency(
13811375
const rclcpp::Time & current_time, const PredictedObjects & predicted_objects,
13821376
std::vector<StopObstacle> & stop_obstacles)
13831377
{
1384-
const auto current_closest_stop_obstacle =
1385-
obstacle_cruise_utils::getClosestStopObstacle(stop_obstacles);
1386-
1387-
if (!prev_closest_stop_obstacle_ptr_) {
1388-
if (current_closest_stop_obstacle) {
1389-
prev_closest_stop_obstacle_ptr_ =
1390-
std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1378+
std::vector<StopObstacle> current_closest_stop_obstacles{};
1379+
std::sort(
1380+
stop_obstacles.begin(), stop_obstacles.end(),
1381+
[](const StopObstacle & o1, const StopObstacle & o2) {
1382+
return o1.dist_to_collide_on_decimated_traj < o2.dist_to_collide_on_decimated_traj;
1383+
});
1384+
for (const auto & stop_obstacle : stop_obstacles) {
1385+
if (std::none_of(
1386+
current_closest_stop_obstacles.begin(), current_closest_stop_obstacles.end(),
1387+
[&stop_obstacle](StopObstacle & cco) {
1388+
return cco.classification.label == stop_obstacle.classification.label;
1389+
})) {
1390+
current_closest_stop_obstacles.push_back(stop_obstacle);
13911391
}
1392-
return;
13931392
}
13941393

1395-
const auto predicted_object_itr = std::find_if(
1396-
predicted_objects.objects.begin(), predicted_objects.objects.end(),
1397-
[&](PredictedObject predicted_object) {
1398-
return tier4_autoware_utils::toHexString(predicted_object.object_id) ==
1399-
prev_closest_stop_obstacle_ptr_->uuid;
1400-
});
1401-
// If previous closest obstacle disappear from the perception result, do nothing anymore.
1402-
if (predicted_object_itr == predicted_objects.objects.end()) {
1403-
return;
1404-
}
1394+
static std::vector<StopObstacle> prev_closest_stop_obstacles{};
1395+
for (const auto & prev_closest_stop_obstacle : prev_closest_stop_obstacles) {
1396+
const auto predicted_object_itr = std::find_if(
1397+
predicted_objects.objects.begin(), predicted_objects.objects.end(),
1398+
[&](PredictedObject predicted_object) {
1399+
return tier4_autoware_utils::toHexString(predicted_object.object_id) ==
1400+
prev_closest_stop_obstacle_ptr_->uuid;
1401+
});
1402+
// If previous closest obstacle disappear from the perception result, do nothing anymore.
1403+
if (predicted_object_itr == predicted_objects.objects.end()) {
1404+
continue;
1405+
}
14051406

1406-
const auto is_disappeared_from_stop_obstacle = std::none_of(
1407-
stop_obstacles.begin(), stop_obstacles.end(),
1408-
[&](const auto & obstacle) { return obstacle.uuid == prev_closest_stop_obstacle_ptr_->uuid; });
1409-
if (is_disappeared_from_stop_obstacle) {
1410-
// re-evaluate as a stop candidate, and overwrite the current decision if "maintain stop"
1411-
// condition is satisfied
1412-
const double elapsed_time = (current_time - prev_closest_stop_obstacle_ptr_->stamp).seconds();
1413-
if (
1414-
predicted_object_itr->kinematics.initial_twist_with_covariance.twist.linear.x <
1415-
behavior_determination_param_.obstacle_velocity_threshold_from_stop_to_cruise &&
1416-
elapsed_time < behavior_determination_param_.stop_obstacle_hold_time_threshold) {
1417-
stop_obstacles.push_back(*prev_closest_stop_obstacle_ptr_);
1418-
return;
1407+
const auto is_disappeared_from_stop_obstacle = std::none_of(
1408+
stop_obstacles.begin(), stop_obstacles.end(),
1409+
[&](const auto & obstacle) { return obstacle.uuid == prev_closest_stop_obstacle.uuid; });
1410+
if (is_disappeared_from_stop_obstacle) {
1411+
// re-evaluate as a stop candidate, and overwrite the current decision if "maintain stop"
1412+
// condition is satisfied
1413+
const double elapsed_time = (current_time - prev_closest_stop_obstacle.stamp).seconds();
1414+
if (
1415+
predicted_object_itr->kinematics.initial_twist_with_covariance.twist.linear.x <
1416+
behavior_determination_param_.obstacle_velocity_threshold_from_stop_to_cruise &&
1417+
elapsed_time < behavior_determination_param_.stop_obstacle_hold_time_threshold) {
1418+
stop_obstacles.push_back(prev_closest_stop_obstacle);
1419+
current_closest_stop_obstacles.push_back(prev_closest_stop_obstacle);
1420+
}
14191421
}
14201422
}
14211423

1422-
if (current_closest_stop_obstacle) {
1423-
prev_closest_stop_obstacle_ptr_ =
1424-
std::make_shared<StopObstacle>(*current_closest_stop_obstacle);
1425-
} else {
1426-
prev_closest_stop_obstacle_ptr_ = nullptr;
1427-
}
1424+
prev_closest_stop_obstacles = std::move(current_closest_stop_obstacles);
14281425
}
14291426

14301427
bool ObstacleCruisePlannerNode::isObstacleCrossing(

0 commit comments

Comments
 (0)