2

看这个OMPL 优化教程,有一行:

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

那么,如何区分超时解决方案和阈值匹配解决方案呢?

4

1 回答 1

1

EXACT_SOLUTION 意味着规划器已经在开始和目标配置之间找到了一条有效路径,而不管其成本如何。APPROXIMATE_SOLUTION 是当规划时间结束并且规划器找不到任何解决方案时,它会返回最接近目标配置的路径。

对于您的问题,有两种解决方案:

第一个解决方案是检查返回的路径成本和规划时间。如果两个参数都低于您设置的值;因此,它是您正在寻找的解决方案。

第二个是更改计划程序代码以返回不同的解决方案状态,可以通过 StatusType 枚举进行编辑。

更改规划器代码后,您需要转到 OMPL 的构建目录(..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
        };
于 2019-06-11T05:12:01.620 回答