2. UR机器人上下料动作分解
节拍优化的第一步不是“让机器人跑得更快”,而是把一次上下料循环拆成可测量、可归因的时间片段。UR(Universal Robots)这类协作机器人本身运动速度有限,真正决定节拍上限的,往往是各阶段之间的衔接、等待和外部设备响应。因此本节的核心任务是:建立一套统一的阶段划分口径,并给出每个阶段的时间测量方法,使后续优化有据可依。
一、为什么必须先做动作分解
如果只测“一个循环总耗时”,得到的是一个黑箱数字。当总节拍为 18 s 时,你无法判断是机器人运动慢、夹爪开合慢、还是机床门未及时打开。动作分解的价值在于把总时间拆成若干可独立观测、可独立优化的片段,并明确每一段的“责任方”——是机器人程序、末端执行器、机床、还是安全逻辑。
在 UR 的语境下,动作分解还有一层特殊意义:UR 程序由 MoveJ、MoveL、MoveP 等运动指令和 I/O 指令组成,程序执行时间与运动距离、关节姿态、加速度、负载、路点数量强相关。只有把程序结构与物理动作对应起来,才能定位“时间花在哪里”。
二、阶段划分口径
建议将一次完整上下料循环划分为五个基础阶段,并明确各阶段的起止判据。起止判据必须基于可观测信号,而不是主观感觉。
- 取料(Pick):从机器人开始向取料位运动,到夹爪闭合、确认抓取成功并抬离取料位为止。起点可定义为“取料运动指令开始执行”,终点为“夹爪闭合到位信号 + 抬升动作完成”。
- 搬运(Transfer):从取料位抬升结束,到机器人携带工件到达放料位上方准备放料为止。这一段通常包含 MoveJ 或 MoveL 的路径运动,是机器人运动时间的主要来源。
- 等待(Wait):机器人已到达目标位,但因外部条件未满足而暂停的时间。典型场景包括等待机床门打开、等待卡盘松开、等待上一工件被取走、等待安全门信号。等待时间往往不体现在机器人程序中,而是由 I/O 握手或 Wait 指令产生。
- 放料(Place):从机器人开始下降进入放料位,到夹爪松开、确认放置完成并退出放料位为止。终点可定义为“夹爪松开到位 + 退出动作完成”。
- 返回(Return):从放料位退出结束,到机器人回到取料位上方、准备下一次取料为止。返回阶段常被忽视,但它同样占用节拍,且可能包含等待下一次取料条件的隐藏时间。
需要强调的是,等待阶段可能出现在任意两个阶段之间,而不是固定位置。例如取料前等待来料到位、搬运中等待安全门、放料后等待机床关门。因此在实际测量中,应把“等待”作为可插入的独立片段,而不是硬性排在第三位。
三、各阶段时间构成详解
取料阶段的时间由三部分组成:机器人从当前位置运动到取料位上方的时间、下降接近工件的时间、夹爪闭合与确认的时间。其中夹爪闭合时间取决于夹爪类型和气路,通常为 0.2~0.8 s;若使用真空吸盘,还需计入真空建立时间。UR 程序中,夹爪动作通常通过 Set DO 指令触发,随后用 Wait DI 等待到位信号。若省略 Wait,程序会立即执行下一条运动指令,导致工件未夹紧就抬升,这是常见的节拍“虚快”陷阱。
搬运阶段是机器人运动时间的主体。UR 的 MoveJ 适合大范围关节运动,速度快但路径不可控;MoveL 适合直线路径,速度较慢但轨迹精确。搬运时间与以下参数直接相关:路径点数量、TCP 速度与加速度设置、负载质量、关节姿态是否接近奇异点。一个实用经验是:在 UR 示教器上查看“程序运行时间”与“实际循环时间”的差值,若差值较大,说明等待或 I/O 握手占用了额外时间。
等待阶段是最容易被低估的部分。它可能来自:机床门开启时间(气动门通常 0.5~1.5 s)、卡盘松开/夹紧时间、上一工序完成信号、安全光幕触发后的复位延时。等待时间的特点是“机器人不动,但节拍在走”。测量等待时间最直接的方法是在 UR 程序中用 Wait 指令前后的时间戳做差,或用外部采集设备记录机器人“程序运行中”信号与“运动中”信号的差异。
放料阶段与取料阶段对称,但有一个关键差异:放料时机器人需要先确认工件已放入夹具或定位销,再松开夹爪。若夹具存在干涉,机器人可能需要微调姿态,这会额外增加时间。放料阶段的测量终点应定义为“夹爪松开到位且机器人开始退出”,而不是“夹爪松开指令发出”。
返回阶段常被合并到下一个取料阶段中统计,但建议单独测量。返回路径可能与搬运路径不同,且返回终点通常是“取料位上方安全高度”,而非取料位本身。若返回后还需要等待来料到位,这段等待应单独归入等待阶段,避免与运动时间混淆。
四、测量方法与操作要点
推荐采用“程序时间戳 + 外部信号采集”的组合方式。具体操作如下:
- 在 UR 程序中定义五个全局计时变量,例如 t_pick、t_transfer、t_wait、t_place、t_return,初始值为 0。
- 在每个阶段的起点和终点插入赋值语句,用
get_actual_tcp_pose()或系统时间函数记录时刻。UR 的 Polyscope 支持通过“赋值”指令读取系统时间,也可用脚本指令time = get_system_time()。 - 将各阶段耗时写入寄存器或通过 Modbus/TCP 发送到外部 PLC,便于长期统计。
- 同时用 PLC 或数据采集卡记录夹爪、机床门、卡盘等关键 I/O 的电平变化,与机器人时间戳对齐。
- 连续采集至少 20 个循环,剔除异常值后取平均值和标准差。标准差过大说明系统存在不稳定因素,如来料位置偏差、气路压力波动。
五、一个教学示例
假设某 UR5 上下料单元,工件为 0.8 kg 圆柱件,夹爪为两指气动夹爪,机床为气动门。一次循环的示例测量数据如下(属于合理假设的教学示例,非实测):
| 阶段 | 时间(s) | 主要构成 |
|---|---|---|
| 取料 | 2.4 | 运动 1.5 s + 夹爪闭合 0.6 s + 确认 0.3 s |
| 搬运 | 3.8 | MoveJ 路径,含 3 个路点 |
| 等待 | 1.2 | 等待机床门打开到位 |
| 放料 | 2.6 | 下降 1.0 s + 松开 0.5 s + 退出 1.1 s |
| 返回 | 2.0 | 回安全高度并等待来料 |
| 其他 | 0.5 | I/O 握手与程序分支 |
| 合计 | 12.5 | — |
从该示例可以看出,搬运和放料合计占 6.4 s,超过总节拍的一半;等待 1.2 s 虽然不长,但属于纯浪费。优化方向应优先考虑:减少搬运路点、提高 MoveJ 加速度、将机床门开启信号提前触发、优化放料路径避免微调。这些判断都依赖于阶段分解后的数据,而不是凭感觉调整。
完成动作分解与测量后,你就拥有了一张“时间地图”。下一阶段的优化工作,就是在这张地图上寻找可压缩的片段,并评估每个片段的压缩代价与风险。