Skip to content

Commit bf81f14

Browse files
mergify[bot]rhaschke
authored andcommitted
Map ompl's APPROXIMATE_SOLUTION -> TIMED_OUT / PLANNING_FAILED (backport moveit#2455) (moveit#2460)
ompl's APPROXIMATE_SOLUTION is not suitable for actual execution. It just states that we got closer to the goal... The most prominent reason for an approximate solution is a timeout. Thus, return TIMED_OUT and print the used timeouts for convenience. (cherry picked from commit c0c6baf) Co-authored-by: Robert Haschke <[email protected]>
1 parent c7e8e97 commit bf81f14

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

moveit_planners/ompl/ompl_interface/src/model_based_planning_context.cpp

+16-5
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@ const moveit_msgs::msg::MoveItErrorCodes ompl_interface::ModelBasedPlanningConte
860860
RCLCPP_DEBUG(LOGGER, "%s: Solving the planning problem once...", name_.c_str());
861861
ob::PlannerTerminationCondition ptc = constructPlannerTerminationCondition(timeout, start);
862862
registerTerminationCondition(ptc);
863-
result.val = ompl_simple_setup_->solve(ptc) == ompl::base::PlannerStatus::EXACT_SOLUTION;
863+
std::ignore = ompl_simple_setup_->solve(ptc);
864864
last_plan_time_ = ompl_simple_setup_->getLastPlanComputationTime();
865865
unregisterTerminationCondition();
866866
// fill the result status code
@@ -976,7 +976,7 @@ void ompl_interface::ModelBasedPlanningContext::unregisterTerminationCondition()
976976
int32_t ompl_interface::ModelBasedPlanningContext::logPlannerStatus(const og::SimpleSetupPtr& ompl_simple_setup)
977977
{
978978
auto result = moveit_msgs::msg::MoveItErrorCodes::PLANNING_FAILED;
979-
ompl::base::PlannerStatus ompl_status = ompl_simple_setup->getLastPlannerStatus();
979+
const ompl::base::PlannerStatus ompl_status = ompl_simple_setup->getLastPlannerStatus();
980980
switch (ompl::base::PlannerStatus::StatusType(ompl_status))
981981
{
982982
case ompl::base::PlannerStatus::UNKNOWN:
@@ -996,12 +996,23 @@ int32_t ompl_interface::ModelBasedPlanningContext::logPlannerStatus(const og::Si
996996
result = moveit_msgs::msg::MoveItErrorCodes::UNRECOGNIZED_GOAL_TYPE;
997997
break;
998998
case ompl::base::PlannerStatus::TIMEOUT:
999-
RCLCPP_WARN(LOGGER, "Timed out");
999+
RCLCPP_WARN(LOGGER, "Timed out: %.1fs ≥ %.1fs", ompl_simple_setup->getLastPlanComputationTime(),
1000+
request_.allowed_planning_time);
10001001
result = moveit_msgs::msg::MoveItErrorCodes::TIMED_OUT;
10011002
break;
10021003
case ompl::base::PlannerStatus::APPROXIMATE_SOLUTION:
1003-
RCLCPP_WARN(LOGGER, "Solution is approximate");
1004-
result = moveit_msgs::msg::MoveItErrorCodes::SUCCESS;
1004+
// timeout is a common reason for APPROXIMATE_SOLUTION
1005+
if (ompl_simple_setup->getLastPlanComputationTime() > request_.allowed_planning_time)
1006+
{
1007+
RCLCPP_WARN(LOGGER, "Planning timed out: %.1fs ≥ %.1fs", ompl_simple_setup->getLastPlanComputationTime(),
1008+
request_.allowed_planning_time);
1009+
result = moveit_msgs::msg::MoveItErrorCodes::TIMED_OUT;
1010+
}
1011+
else
1012+
{
1013+
RCLCPP_WARN(LOGGER, "Solution is approximate");
1014+
result = moveit_msgs::msg::MoveItErrorCodes::PLANNING_FAILED;
1015+
}
10051016
break;
10061017
case ompl::base::PlannerStatus::EXACT_SOLUTION:
10071018
result = moveit_msgs::msg::MoveItErrorCodes::SUCCESS;

0 commit comments

Comments
 (0)