3. 运动指令编程

URScript 的运动指令决定了 TCP(工具中心点)在空间中如何从当前位姿到达目标位姿。四条核心指令 movej、movel、movep、movec 看似只是"移动"的不同写法,实际上它们对应四种完全不同的轨迹规划策略:关节空间插补、笛卡尔直线插补、过程路径插补和圆弧插补。选错指令,轻则路径绕远、节拍变慢,重则撞到工装或让线缆过度扭转。理解它们的语法、参数与规划差异,是写出可靠运动程序的基础。

一、四条指令的语法与参数含义

四条指令的通用形式都是"目标位姿 + 运动参数"的组合,但目标位姿的表示方式和参数集合略有差别。

movej(q, a=1.4, v=1.05, t=0, r=0)
movel(p, a=1.2, v=0.25, t=0, r=0)
movep(p, a=1.2, v=0.25, t=0, r=0)
movec(p_via, p_to, a=1.2, v=0.25, t=0, r=0)

其中 q 是关节角向量,形如 [0, -1.57, 1.57, -1.57, -1.57, 0],单位为弧度;p 是笛卡尔位姿,形如 p[x, y, z, rx, ry, rz],位置单位为米,姿态为旋转向量(轴角)表示。movec 需要两个位姿:p_via 是圆弧上的中间途经点,p_to 是圆弧终点。

四个运动参数含义一致,但作用方式不同:

  • a:工具加速度,单位 rad/s²(关节运动)或 m/s²(笛卡尔运动),默认 1.4 或 1.2。
  • v:工具速度,单位 rad/s 或 m/s,默认 1.05 或 0.25。
  • t:指定运动时间(秒)。当 t>0 时,控制器忽略 a 和 v,按给定时间完成运动;t=0 表示由 a、v 决定速度曲线。
  • r:混合半径(blend radius),单位米。当 r>0 时,机器人在接近目标点前提前过渡到下一段轨迹,形成圆滑拐角,而不是完全停下。
关键约定:t 与 a/v 互斥。若同时给出,t 优先。混合半径 r 只影响路径过渡,不改变目标点本身。

二、轨迹规划差异:四种插补方式

这是四条指令最本质的区别,也是选择指令的核心依据。

movej 走关节空间。控制器在六个关节的角度值之间做插补,TCP 在空间中的实际路径是一条不可预测的曲线。优点是运动最快、不会出现奇异点、不会超出关节限位;缺点是路径不可控,不适合对轨迹有要求的场合。它通常用于大范围转移、回原点、换工具等"只关心终点、不关心中间"的场景。

movel 走笛卡尔直线。TCP 沿当前点到目标点的直线运动,姿态同步插补。路径可预测,适合焊接、涂胶、直线搬运等需要精确直线轨迹的作业。代价是:如果直线路径经过奇异点或超出工作空间,控制器会报错;速度也通常低于 movej。

movep 走过程路径。它同样在笛卡尔空间运动,但允许在路径上设置途经点,并支持在运动过程中保持恒定速度通过,适合需要平滑连续轨迹的场合,例如沿复杂轮廓连续涂胶。与 movel 相比,movep 对路径的约束更宽松,更强调"过程连续"而非"严格直线"。

movec 走圆弧。通过起点、中间点 p_via 和终点 p_to 三点确定一段圆弧,TCP 沿圆弧运动。它专门用于圆弧轨迹作业,如圆弧焊缝、圆形倒角、圆弧抓取。注意:三点不能共线,否则圆弧退化,控制器会报错。

四种运动指令的轨迹规划差异 movej 关节空间插补 起点 终点 不可预测曲线 movel 笛卡尔直线插补 起点 终点 严格直线 movep 过程路径插补 起点 终点 途经点 平滑连续 movec 圆弧插补 起点 终点 p_via 三点定弧 参数与规划特性对比 指令 目标表示 插补空间 路径可控性 典型用途 movej 关节角 q 关节空间 低(曲线不可预测) 大范围转移、回原点 movel 位姿 p 笛卡尔空间 高(严格直线) 焊接、直线搬运 movep 位姿 p + 途经点 笛卡尔空间 中(过程连续) 连续涂胶、轮廓跟踪 movec p_via + p_to 笛卡尔空间 高(圆弧约束) 圆弧焊缝、圆形倒角

三、混合半径 r 与速度参数的实际影响

混合半径 r 是工程中最容易被忽视、却对节拍影响最大的参数。当 r=0 时,机器人必须精确到达目标点并减速到零,再加速前往下一点,形成"走走停停"的轨迹。当 r>0 时,控制器在距离目标点 r 处开始向下一段轨迹过渡,机器人不停车直接拐弯。

例如一段由三个 movel 组成的搬运路径,若全部使用 r=0,每个拐角都要经历"减速—停止—加速",节拍明显拉长;若设置 r=0.05(5 cm),拐角处速度保持连续,节拍可显著缩短,但实际路径会偏离原目标点约 5 cm。因此 r 的取值必须在"节拍"和"路径精度"之间权衡:精定位点用 r=0,中间过渡点用 r=0.02~0.1。

速度参数 v 和加速度 a 共同决定速度曲线。控制器按梯形或 S 形速度规划:先以 a 加速到 v,匀速运行,再以 a 减速到零。若路径太短,可能达不到设定速度 v,此时实际峰值速度由路径长度和 a 决定。这也是为什么短距离 movel 即使设了 v=0.5,实际也跑不到 0.5 m/s。

常见错误:在 movec 中把 p_via 和 p_to 设成与起点共线的三点,圆弧退化导致控制器报错。务必保证三点不共线,且圆弧半径在工作空间内。

四、选型决策与示例程序

实际编程时可按以下逻辑选择:只关心终点、不关心中间路径 → movej;需要严格直线 → movel;需要连续平滑通过多个点 → movep;需要圆弧 → movec。下面是一段综合示例,演示从安全位到作业位、直线接近、圆弧作业、再返回的完整流程:

def pick_and_arc():
  # 1. 关节运动快速到达安全位(只关心终点)
  movej([0, -1.57, 1.57, -1.57, -1.57, 0], a=1.4, v=1.05, r=0)

  # 2. 直线接近作业起点,精定位
  movel(p[0.3, 0.1, 0.4, 3.14, 0, 0], a=1.2, v=0.25, r=0)

  # 3. 圆弧作业:经过中间点到达终点
  movec(p[0.4, 0.2, 0.4, 3.14, 0, 0],
        p[0.5, 0.1, 0.4, 3.14, 0, 0],
        a=1.2, v=0.15, r=0)

  # 4. 平滑过渡返回,中间点用混合半径
  movel(p[0.3, 0.1, 0.5, 3.14, 0, 0], a=1.2, v=0.3, r=0.05)
  movel(p[0.1, 0.0, 0.5, 3.14, 0, 0], a=1.2, v=0.3, r=0)
end

这段程序中,第 1 段用 movej 快速转移,第 2 段用 movel 精确到位,第 3 段用 movec 完成圆弧轨迹,第 4 段用带混合半径的 movel 平滑返回。每段指令的选择都对应明确的轨迹规划需求,而不是随意替换。掌握这四条指令的语法、参数与规划差异,就能在节拍、精度和路径可控性之间做出合理取舍。