跳到主要内容

手动拖动示教

手动拖动示教 (Hand Guiding / Drag Teach), 又称零力示教, 是指关闭位置伺服后, 操作员直接手动拖动机器人末端到目标位置, 由控制器在后台记录轨迹。相比 JOG 点动, 拖动示教:

  • 速度更快 (复杂轨迹 5 分钟 vs 1 小时示教)
  • 操作更直观 (所想即所得)
  • 适合复杂曲面手持操作 (如打磨、涂胶) 的路径示教

拖动示教的代价是机器人必须带电流环 / 力矩环伺服以及精确的重力补偿 + 摩擦补偿模型, 目前主要应用于协作机器人 (cobot)部分高端工业机器人

原理

零力控制核心方程

关节空间下机器人动力学:

τ = M(q)·q̈ + C(q, q̇)·q̇ + G(q) + τ_friction + τ_ext

其中 τ_ext 为外力施加到关节的等效力矩. 零力控制希望伺服力矩恰好抵消 M + C + G + τ_friction, 使得外力 τ_ext 可以自由地拖动机器人:

τ_cmd = M̂(q)·q̈_d + Ĉ(q, q̇)·q̇ + Ĝ(q) + τ̂_friction

其中 q̈_d 可设置为 0 (纯零力) 或根据外力做虚拟阻抗控制 (零力 + 阻尼)。

精度三大关键

项目要求不准的后果
重力补偿 Ĝ(q)工具质量与质心精度 ±2%手松开后机器人下坠或上抬
摩擦补偿 τ̂_friction每轴库伦 + 粘滞摩擦辨识拖动起步卡顿
惯量补偿 M̂(q)加速阶段; 低速可忽略拖动不流畅

支持的机器人型号

品牌型号重力补偿摩擦补偿推荐拖动
Universal RobotsUR3e / UR5e / UR10e / UR16e内置内置
AUBOi3 / i5 / i10 / i16内置内置
JAKAZu3 / Zu5 / Zu7 / Zu12内置内置
ELiteCS 系列内置内置
遨博 (AUBO)i 系列内置内置
大族Elfin / E05内置内置
新松SR 协作系列内置内置
节卡JAKA Minicobo内置内置
ABBGoFa / SWIFTI内置内置
KukaLBR iiwa / LBR iisy内置 (7 轴扭矩)内置
FanucCRX 系列内置内置
ABB IRB 1200/2600 工业臂-需辨识需辨识有限
Kuka KR Agilus-需辨识需辨识有限
Fanuc M-10iD-需辨识需辨识
传统工业臂 (无扭矩反馈)---

协作机器人标配拖动示教, 工业臂只有部分高端支持 (需要 MTS 扭矩传感器或电流估扭).

前置条件

  1. 机器人支持扭矩控制模式 (可查 ESI 或手册)
  2. 工具已安装并配置负载 (质量 + 质心), 否则重力补偿错
  3. 已完成摩擦辨识 (系统首次使用或更换工具时)
  4. 使能开关按下 (三位中间档保持)
  5. 工作区清空, 拖动时可能撞到周边物体

工具负载配置

拖动前必须精确配置工具参数:

VAR
SetLoad : MC_SetLoadParams;
END_VAR

SetLoad(
Robot := Robot1,
Execute := TRUE,
Mass := 2.5, // kg
CogX := 0.0, // 质心 X (mm, 相对法兰)
CogY := 0.0,
CogZ := 80.0, // 质心 Z
Ixx := 0.005, // 惯量主值 (kg·m²)
Iyy := 0.005,
Izz := 0.002
);

质量测量建议:

  • 用电子秤 (精度 ±0.01 kg)
  • 质心位置: 拆下工具, 放到支点上找平衡, 或用 CAD 模型导出

不准的负载 → 手松开工具下坠 / 上抬 (比如质量实际 3 kg 配成 2 kg, 手松开末端会以 1 kg 的力下坠).

摩擦辨识

辨识流程

  1. 设备 → 机器人 → 摩擦辨识向导
  2. 系统自动让机器人慢速 + 中速 + 高速分别转每个关节, 正反方向各一次
  3. 记录电流 vs 速度曲线, 拟合出库伦摩擦 F_c 和粘滞摩擦 F_v:
τ_friction(q̇) = F_c · sign(q̇) + F_v · q̇
  1. 辨识时间约 5 分钟 (6 轴), 过程中人不可干预
  2. 辨识完成后保存到机器人配置文件

辨识触发时机

时机是否必须重新辨识
首次安装必须
换工具 (改变负载)不需要 (摩擦是机身的)
环境温度变化 > 15°C建议
使用 6 个月以上建议 (润滑状态变化)
更换减速器必须
机器人摔过 / 撞过必须

拖动示教操作步骤

1. 进入拖动模式

  • 示教器上按 Drag 按键 (多数协作机器人示教器有专用按钮)
  • 或在程序里调用:
VAR
EnableDrag : MC_HandGuiding;
END_VAR

EnableDrag(
Robot := Robot1,
Enable := bDragMode,
DragMode := DRAG_ZERO_FORCE, // 零力 / 零力+阻尼 / 单轴限制
ForceThreshold := 5.0, // N, 外力低于此阈值视为静止
DampingX := 10.0, // Nm/m/s, 阻尼系数
DampingY := 10.0,
DampingZ := 10.0
);

进入拖动模式后, 伺服切到零力控制, 抬手即可感觉到机器人变"软"。

2. 拖动记录

  • 连续记录: 按住示教器上 Record 键, 松开即停, 生成一条连续轨迹, 默认采样 10 ms / 点
  • 点位记录: 走到目标点后单按 Point, 记录为命名点位
  • 路径记录: 整段拖动完成后命名保存为路径, 点位会自动稀疏化 (距离 < 1 mm 的点合并)

3. 退出拖动

  • 再按一次 Drag 退出
  • 或松开使能开关 (会自动退出并刹车)

4. 路径回放

VAR
Playback : MC_MovePath;
END_VAR

Playback(
Robot := Robot1,
Execute := bPlay,
PathId := 1, // 拖动记录的路径 ID
Velocity := 100.0, // mm/s
Smooth := 5.0 // 平滑半径 mm
);

阻抗参数

拖动并非完全零力, 系统可叠加虚拟阻抗提升可控性:

参数说明低值高值
Mass虚拟质量软, 轻盈但易过冲沉重, 稳定
Damping阻尼拖得快拖得稳但费力
Stiffness刚度纯零力带回弹力 (测不到目标位时自动回中)

典型参数:

  • 自由拖动 (Free Drag): Mass = 0, Damping = 10, Stiffness = 0
  • 点到点对齐: Mass = 5, Damping = 20, Stiffness = 50 (接近目标时有吸引力)
  • 平面约束: Damping Z 轴设高, 其他轴低 → 只能在水平面内拖

单轴锁定拖动

对焊接等应用, 希望工具只能沿某一轴移动, 其他方向锁定. 配置:

DragMode := DRAG_CONSTRAINED;
LockAxis := [FALSE, FALSE, TRUE, TRUE, TRUE, TRUE]; // 锁 Z / Rx / Ry / Rz, 允许 X / Y

操作员手拖工具, 感觉上工具像在"桌面上滑"一样, 无论怎么推, 高度 (Z) 和姿态都不变。

安全注意事项

  1. 工作区清空: 拖动时机器人完全被动, 可能撞到周边, 清走夹具、工件以外的物体
  2. 手放牢: 手一定要托住工具, 不能抓轴 (夹手)
  3. 工具尖端朝远离身体: 焊枪 / 切割头尖端朝外, 防止戳伤
  4. 低速熟练: 第一次拖先小范围试试, 熟悉"软"的感觉
  5. 使能开关不要死按: 一只手操作示教器, 一只手扶工具, 使能开关按到中间档 (按到底等于急停)
  6. 断电保护: 部分机型拖动时伺服力矩小, 负载稍大会下坠, 断电前先把机器人抬到安全折叠姿态

排错清单

现象原因解决
松手后机器人下坠负载质量填小了重新测量工具质量并填大
松手后机器人上抬负载质量填大了减小 Mass 参数
拖动卡顿 / 起步费力摩擦补偿不足重做摩擦辨识
拖不动进错模式 (还在位置伺服)再按一次 Drag 键确认进入
拖动过程中突然锁死接近奇异点或关节极限反向稍退, 换关节 JOG 过渡
某个方向感觉重 / 轻阻尼不对称调整 Damping X/Y/Z 一致
记录路径抖采样率与机械共振降低记录采样率到 20 ms

最佳实践

  1. 负载精确比拖动体验更重要: 差 5% 负载 = 拖动时有明显漂移
  2. 工具快换: 快换板配好负载参数, 换工具时调用 MC_SetLoad 切换
  3. 记录路径后稀疏化: 连续记录点太多, 回放前用 IDE 的路径简化工具压到 5~10 mm 间距
  4. 拖动 + JOG 混用: 粗略位置用拖动, 最后 mm 级用工具 JOG 小增量精调
  5. 避免边缘姿态: 拖动到机器人能力边缘 (臂伸直) 时会僵硬, 推不动
  6. 定期重新辨识: 半年或换季重新做一次摩擦辨识
  7. 禁止带人拖: 协作机器人能检测碰撞停, 但别用人体测试, 撞伤人不开玩笑

相关文档