Skip to content

时间参数化

MoveIt 目前主要是一个运动学运动规划框架——它负责规划关节或末端执行器的位置,但不涉及速度和加速度。不过,MoveIt 会通过后处理(post-processing)对运动学轨迹进行时间参数化,为其赋予速度和加速度值。下面介绍 MoveIt 在这方面的相关设置与组件。

默认情况下,MoveIt 会将关节轨迹的速度和加速度限制设置为机器人 URDF 或 joint_limits.yaml 中允许的默认值。joint_limits.yaml 由 Setup Assistant 生成,其初始内容是 URDF 中对应数值的精确副本。如果有特殊的约束需求,用户可以修改这些值,使其小于 URDF 中的原始值。可以通过键 max_position, min_position, max_velocity, max_acceleration, max_jerk 来更改特定关节的属性,也可以通过键 has_velocity_limits, has_acceleration_limits, has_jerk_limits 来开启或关闭相应的关节限制。

时间参数化轨迹的速度也可以在运行时修改,实际速度是配置文件中设置的最大速度与最大加速度乘以一个比例系数(取值 0–1)。要针对单次运动规划调整速度,可以设置 MotionPlanRequest.msg 中描述的两个缩放因子。用于设置这两个因子的 Spinbox 控件也可以在 MoveIt MotionPlanning RViz 插件 中找到。

MoveIt 支持使用不同的算法对运动学轨迹进行后处理,以添加时间戳以及速度和加速度值。目前 MoveIt 中只有一个选项:

时间最优轨迹生成(TOTG)算法在 PR #809 和 #1365 中引入。它生成的轨迹具有非常平滑且连续的速度曲线。该方法首先将路径段拟合到原始轨迹上,然后从优化后的路径中采样新的航点(waypoint)。与严格的时间参数化方法不同,生成的航点可能会在一定容差范围内偏离原始轨迹,因此使用该方法时可能需要进行额外的碰撞检查。它是 MoveIt 2 中所有场景下的默认方法。

将时间参数化算法用作规划请求适配器(Planning Request Adapter)的用法,记录在运动规划流水线教程中。

像 TOTG 这样的时间参数化算法会为轨迹计算速度和加速度,但目前没有任何时间参数化算法支持加加速度(jerk)限制。这并不理想——轨迹上较大的加加速度可能导致运动抖动,甚至损坏硬件。作为进一步的后处理步骤,可以应用 Ruckig 加加速度受限(jerk-limited)平滑算法,以限制轨迹上各关节的加加速度。

要应用 Ruckig 平滑算法,应在 joint_limits.yaml 文件中定义加加速度限制。如果没有为任何关节指定加加速度限制,则会应用一个合理的默认值,并打印一条警告。

最后,将 Ruckig 平滑算法添加到规划请求适配器列表中(通常在 ompl_planning.yaml 中)。Ruckig 平滑算法应该最后运行,因此请将其放在列表的顶部:

response_adapters:
- default_planning_request_adapters/AddRuckigTrajectorySmoothing
- default_planning_request_adapters/AddTimeOptimalParameterization
...