Ros2 - Moveit2 - TimeParameter(时间参数化)
时间参数化
MoveIt 目前主要是一个运动规划框架 - 它规划关节或末端执行器的位置,但不规划速度或加速度。但是,MoveIt 确实利用后处理来对速度和加速度值的运动轨迹进行时间参数化。下面我们将解释 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 中设置两个缩放因子。MoveIt MotionPlanning RViz 插件中也提供了用于设置这两个因子的旋转框。
时间参数化算法
MoveIt 可以支持不同的算法来对运动轨迹进行后处理,以添加时间戳和速度/加速度值。目前 MoveIt 中只有一个选项:
PR #809和#1365中引入了时间最优轨迹生成 (TOTG) 。它可生成具有非常平滑和连续速度曲线的轨迹。该方法基于将路径段拟合到原始轨迹,然后从优化路径中采样新航路点。这与严格的时间参数化方法不同,因为生成的航路点可能会在一定公差范围内偏离原始轨迹。因此,使用此方法时可能需要进行额外的碰撞检查。它是 MoveIt 2 中所有位置的默认设置。
本教程记录了时间参数化算法作为规划请求适配器的使用方法。
限制加速度的轨迹平滑
时间参数化算法(例如 TOTG)可计算轨迹的速度和加速度,但所有时间参数化算法均不支持抖动限制。这并不理想——轨迹上的大抖动可能会导致运动不平稳或损坏硬件。作为进一步的后处理步骤,可以应用 Ruckig 抖动限制平滑算法来限制轨迹上的关节抖动。
要应用 Ruckig 平滑算法,应在joint_limits.yaml
文件中定义抖动限制。如果您没有为任何关节指定抖动限制,则将应用合理的默认值并打印警告。
最后,将 Ruckig 平滑算法添加到计划请求适配器列表(通常在中ompl_planning.yaml
)。Ruckig 平滑算法应最后运行,因此将其放在列表顶部:
response_adapters: - default_planning_request_adapters/AddRuckigTrajectorySmoothing - default_planning_request_adapters/AddTimeOptimalParameterization ...