目录
OMPL
OMPL设置
ompl_planning.yaml 文件中的参数
Projection Evaluator
Enforce Planning in Joint Space
Other Settings
Smoothing Paths 平滑路径
Determinism
OMPL Optimization Objectives
Post-Processing Smoothing 后处理平滑
OMPL
开源运动规划库(The Open Motion Planning Library)是最先进的基于采样的运动规划算法的强大集合,是MoveIt中的默认规划器。
OMPL设置
在机器人moveit_config包中的ompl_planning.yaml文件中找到这些设置。
ompl_planning.yaml
文件中的参数
longest_valid_segment_fraction
它定义了用于碰撞检测机器人动作的离散化并极大地影响基于OMPL的解决方案的性能和可靠性。在这种情况下,运动可以看作是图中两个节点之间的一条边,其中节点是沿着轨迹的路点。OMPL中的默认运动碰撞检查器只是将边缘离散化为多个子状态以进行碰撞检查。目前OMPL / MoveIt中没有连续冲突检查,尽管这是当前讨论的一个领域。
具体来说,longest_valid_segment_fraction
是机器人状态空间的一小部分,如果机器人当前没有碰撞,我们假设机器人可以在保持无碰撞的同时行进。例如,如果longest_valid_segment_fraction = 0.01
,那么我们假设如果两个节点之间的一条边小于状态空间的1/100,那么我们不需要明确地检查沿着该边缘的任何子状态,只需要检查它连接的两个节点。
maximum_waypoint_distance
在动态重新配置文件中,maximum_waypoint_distance
定义了用于碰撞检查的机器人运动的相同离散化,但它在绝对水平上进行,而不是使用状态空间的分数。例如,如果maximum_waypoint_distance = 0.1
,如果一条边比状态空间距离短0.1
,那么我们不会明确检查沿该边的任何子状态。
如果同时longest_valid_segment_fraction
和maximum_waypoint_distance
被设置,则选择产生最保守的离散(在一个会产生在给定的边缘最状态到冲突检查)的变量中。
设置longest_valid_segment_fraction
(或maximum_waypoint_distance
)太低,碰撞检查/运动规划将非常慢。设置得太高,在小或狭窄物体周围会错过碰撞。此外,高冲突检查分辨率将导致路径平滑器输出难以理解的运动,因为它们能够“捕获”无效路径,然后尝试通过在其周围采样来修复它们,但是不完美。
此处记录了此参数对两个MoveIt教程示例的影响的快速分析。
Projection Evaluator
projection_evaluator
可以在关节或连杆的列表来近似配置空间的覆盖范围。
Enforce Planning in Joint Space
取决于MoveIt在问题表示joint space关节空间
和cartesian space笛卡尔空间
选择的规划问题。设置组参数enforce_joint_model_state_space
会使用关节空间
执行所有规划。
默认情况下,带有方向路径约束的规划请求在笛卡尔空间中
采样,以便调用IK作为生成采样器。
通过执行关节空间,规划过程将使用拒绝抽样来查找有效请求。请不要认为这会大大增加计划时间。
Other Settings
根据您使用的规划器,其他设置可用于调整/参数扫描。这些设置的默认值在MoveIt Setup Assistant中自动生成,并列在ompl_planning.yaml
文件中 - 建议您调整它们。
Smoothing Paths 平滑路径
在这里,我们讨论了改进OMPL中间接,非优化路径的常见问题的各种方法。我们鼓励核心开发人员和研究人员帮助改进OMPL和MoveIt代码库,以便这不再是一个常见问题,而是更多解决问题。
Determinism
OMPL中的规划者本质上是具有概率性的,并不总是返回相同的解决方案。其他库(如基于搜索的规划库(SBPL),在给定相同环境,起始和目标的情况下,提供了确定性结果,你将始终获得相同的路径。SBPL是基于Astar的,因此你将获得最佳结果,直至你选择的搜索分辨率。然而,SBPL有很多缺点,例如难以调优特殊的hueristics。
OMPL Optimization Objectives
作为OMPL规划库一部分的多个规划人员能够针对指定的优化目标进行优化。本教程描述了配置这些目标所需的步骤。目前在MoveIt中显示的渐近最优规划器是:
- RRT*
- PRM*
OMPL中的其他优化规划器,但尚未在MoveIt中显示:
- LazyPRM*
- RRT#
- RRTX
- Informed RRT*
- Batch Informed Trees (BIT*)
- Lower Bound Tree RRT (LBTRRT)
- Sparse Stable RRT
- Transition-based RRT (T-RRT)
- SPARS
- SPARS2
- FMT*
- CForest
并提供以下优化目标:
- PathLengthOptimizationObjective(默认)
- MechanicalWorkOptimizationObjective
- MaximizeMinClearanceObjective
- StateCostIntegralObjective
- MinimaxObjective
这些优化目标的配置可以在ompl_planning.yaml中完成。将名称为optimization_objective的参数添加为配置参数。参数的值设置为所选优化目标的名称。例如,要使用MaximizeMinClearanceObjective配置RRTstar,ompl_planning.yaml中的planner条目将如下所示:
RRTstarkConfigDefault :type : geometric :: RRTstar optimization_objective : MaximizeMinClearanceObjective 范围: 0.0 goal_bias : 0.05 delay_collision_checking : 1
有关OMPL最佳规划器的更多信息,请参阅OMPL - 最佳规划文档。
Post-Processing Smoothing 后处理平滑
注意,平滑有助于减少间接路径的数量有限。注意,这里我们讨论仅基于几何(运动学)的平滑。速度/加速度/加加速度平滑在其他地方处理,请参阅时间参数化。
你可以通过增加计划时间来调整MoveIt在平滑上花费的时间。在找到初始计划之后但在allowed_planning_time
用尽之前的剩余时间将用于平滑。MoveIt还进行路径杂交,采用N个不同规划运行的最佳部分并将它们拼接在一起。因此,num_planning_attempts
也会影响质量。
虽然目前没有显示在MoveIt(TODO)的顶层,但可以通过在model_based_planning_context.cpp中
将简化持续时间设置为0(无限制)来实现更平滑。这将启用OMPL的simplifyMax()
函数
。
除了内部OMPL平滑器之外,最近已经做出了使用STOMP / CHOMP进行后处理的努力。看这篇博文。