上一节中我们提到了一个planning request adapters 的概念,在这一节中我们将对其展开详细了解。
planning request adapters 是运动规划中 Motion Planning Pipline 涉及到的概念,如下图所示,Plan Request Adapters 和 Motion planners 共同形成了 Motion Planning Pipline。

Plan Request Adapters 有两个主要作用:
以下是 MoveIt 提供的几种默认的运动规划适配器:
| 阶段 | Plan Request Adapters | 作用 | 使用场景 |
|---|---|---|---|
| pre-processing | FixStartStateBounds | 将机器人初始状态限制在 URDF 中定义的关节约束区间内 | 机器人可能处于一个或者多个关节略微超出关节限制的情况,此时, Motion Planner 将认为起始状态在关节范围之外而无法规划,通常用于超出边界并不严重的情况 |
| pre-processing | FixWorkspaceBounds | 指定一个默认大小的工作空间 | |
| pre-processing | FixStartStateCollision | 通过少量扰动关节值来在指定配置(碰撞中)附近对新的无碰撞配置进行采样。它将扰动值的量由“jiggle_fraction”参数指定,该参数将扰动控制为关节总运动范围的百分比。 | |
| pre-processing | FixStartStatePathConstraints | 尝试在机器人的当前配置与遵循路径约束的新位置之间规划路径。新位置将作为规划的起始状态。 | 机器人的初始姿态不满足路径约束 |
| post-processing | AddTimeParameterization | motion planners 生成的是一条即和路径,该路径不遵循速度、加速度约束,也不是时间参数化的。该 adapter 可以为这条空间轨迹进行速度、加速度约束,为每个轨迹点加入速度、加速度、时间等参数。 | 说白了就是轨迹规划 |
| pre-processing | ResolveConstraintFrames | Goal constraints can be set using subframes (e.g. a pose goal in the frame cup/handle, where handle is a subframe on the object cup). This adapter changes the frame of constraints to an object or robot frame (e.g. cup). | 坐标约束转换 |
研究轨迹规划,我当然更关心 AddTimeParameterization,官方文档参考:Time Parameterization Algorithms
得到 Motion Planners 规划之后的几何路径之后,MoveIt 可以支持不同的算法来对运动轨迹进行后处理,以添加时间戳和速度/加速度值。目前在 MoveIt 中默认提供三种:
MoveIt 中 IPTP 源码实现
IPTP 算法是 Motion Planning Pipline 中的 默认 Planning Request Adapter。
关于该算法的相关论文资料尚未找到,欢迎了解的朋友评论区留言。
特点:
MoveIt 中 ISP 源码实现
没有相关论文,在 MoveIt 源码头文件中找到这样一段算法描述:
ISP 算法为等距插补,是针对 IPTP 算法的改进,详细讨论参见 Improved IPTP by fitting a cubic spline
MoveIt 中 TOTG 源码实现
TOTG 论文及源码开源地址
该方法在 Melodic 版本之后才整合到 MoveIt 中,生成的轨迹速度非常平滑连续,具有非常平滑和连续速度分布的轨迹。该方法基于将路径段拟合到原始轨迹,然后从优化路径中采样新的路点。这与严格的时间参数化方法不同,因为生成的航路点可能会在一定的容差内偏离原始轨迹。因此,使用此方法时可能需要额外的碰撞检查。
特点:
以上三种默认 Adapters 在 ompl_planning_pipeline.launch.xml 中设置选用即可。
| 规划算法 | 调用形式 |
|---|---|
| Iterative Parabolic Time Parameterization | AddTimeParameterization |
| Iterative Spline Parameterization | AddIterativeSplineParameterization |
| Time-optimal Trajectory Generation | AddTimeOptimalParameterization |
以上三种算法实现效果的简单对比:Add time-optimal trajectory parameterization