看看这个OMPL optimization tutorial,有一行代码:
ob::PlannerStatus solved = planner->solve(1.4/*seconds timeout*/);使用此PlannerStatus定义。
但是,为了便于讨论,我使用的是具有一定成本阈值的RRT#算法,假设为10.0。如果我将其设置得太低,算法会在1.4秒后终止,并打印一条消息:
Info: ... Final solution cost 17.071
Info: Solution found in 1.418528 seconds并返回ob::PlannerStatus::EXACT_SOLUTION -我想我确实有一个精确的,但可能不是最优的解决方案。
如果我使用一组不同的数据运行,我可以看到类似以下内容:
Info: ... Final solution cost 9.543
Info: Solution found in 0.003216 seconds然而,这也会返回ob::PlannerStatus::EXACT_SOLUTION。
那么,如何区分超时解决方案和阈值匹配解决方案呢?
发布于 2019-06-11 13:12:02
EXACT_SOLUTION意味着计划者已经找到了开始配置和目标配置之间的有效路径,而不考虑其成本。APPROXIMATE_SOLUTION是指计划时间结束,计划程序找不到任何解决方案,因此它返回最接近目标配置的路径。
对于您的问题,有两种解决方案:
第一种解决方案是检查返回的路径成本和规划时间。如果两个参数都低于您设置的值;因此,这就是您要寻找的解决方案。
第二种方法是更改计划器代码以返回不同的解决方案状态,这些状态可以通过StatusType枚举进行编辑。
一旦更改了规划器代码,您需要转到OMPL的build目录(..build/Release),并在终端中运行"make install“。
您可以将枚举添加到ompl::base::PlannerStatus
/// The possible values of the status returned by a planner
enum StatusType
{
/// Uninitialized status
UNKNOWN = 0,
/// Invalid start state or no start state specified
INVALID_START,
/// Invalid goal state
INVALID_GOAL,
/// The goal is of a type that a planner does not recognize
UNRECOGNIZED_GOAL_TYPE,
/// The planner failed to find a solution
TIMEOUT,
/// The planner found an approximate solution
APPROXIMATE_SOLUTION,
/// The planner found an exact solution
EXACT_SOLUTION,
/// The planner crashed
CRASH,
/// The planner did not find a solution for some other reason
ABORT,
/// The number of possible status values
TYPE_COUNT
};https://stackoverflow.com/questions/53426661
复制相似问题