一条绕开障碍的曲线只规定“经过哪里”。轨迹还规定“什么时候经过”,因此能计算速度、加速度、力矩与制动距离。路径碰撞检查通过,不代表机器人能按任意速度执行。Modern Robotics的轨迹章节明确区分路径参数和时间缩放。
一个关节的平滑启停
令 u=t/T,在0到1之间变化。五次时间缩放为:
s(u) = 10u³ - 15u⁴ + 6u⁵
q(t) = q0 + (q1-q0) s(u)
q_dot = (q1-q0) s'(u) / T
q_ddot = (q1-q0) s''(u) / T²
它让两端的速度和加速度均为零,但不保证两端的jerk,即加速度的时间导数为零。每段都停下再走容易做,却不一定满足连续加工或快速搬运的需求。经过中间点时,需要明确是否要求停车,以及段与段之间需要几阶连续。
本函数的 max|s'|=1.875,max|s''|≈5.774。若关节位移为1弧度,速度上限1弧度/秒,加速度上限2弧度/秒²,那么仅按这两个约束:
T >= max(1.875 / 1, sqrt(5.774 / 2)) = 1.875 s
多关节同步时,应取各关节计算得到的最大下界。真实运动还要满足力矩、jerk、碰撞和控制带宽约束,因此这个结果只是该插值方式下的运动学下界。
关节空间与笛卡尔空间
关节角分别插值通常容易保证关节限位,但末端在空间里会走弯曲路径。末端沿直线插值,则需要每个采样点都有连续可行的逆解;直线可能穿过不可达区域或靠近奇异位形。姿态插值还必须尊重旋转的几何结构,不能逐元素线性混合旋转矩阵。
为已有路径做时间参数化时,需要考虑路径的一阶与二阶导数。转角突变的折线若以非零速度经过,理论上会要求不连续速度或极大加速度。平滑处理会改变几何路径,所以平滑后应重新检查障碍间隙。MoveIt的轨迹处理说明介绍其时间参数化与后处理环节;具体算法与参数按所用发行版核对。
接口上必须讲清楚的量
轨迹点的时间是相对轨迹起点,还是绝对系统时间?命令是位置、速度还是力矩?控制器支持哪些字段组合?收到过期或不单调的时间戳会怎样?在这些问题没有明确前,增加轨迹采样点不能解决执行异常。
控制器跟不上时,先检查轨迹的最大速度、加速度、期望输入和实际饱和,再看跟踪误差。只把控制增益调大,可能把可执行性问题变成振荡。
练习
在两连杆抓放项目的脚本中找到 quintic,推导它的一阶、二阶导数,数值确认端点条件。把运动时长减半:同一路径的速度应增加到两倍,加速度增加到四倍。记录限幅后的误差变化,不要只观察最终是否到达。
面试自查:为什么“路径更短”不一定“执行更快”?梯形速度规划与五次多项式各自控制哪些边界条件?为什么提高输出频率不能修复几何路径本身的尖角?