手动拖动示教
手动拖动示教 (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 Robots | UR3e / UR5e / UR10e / UR16e | 内置 | 内置 | 是 |
| AUBO | i3 / i5 / i10 / i16 | 内置 | 内置 | 是 |
| JAKA | Zu3 / Zu5 / Zu7 / Zu12 | 内置 | 内置 | 是 |
| ELite | CS 系列 | 内置 | 内置 | 是 |
| 遨博 (AUBO) | i 系列 | 内置 | 内置 | 是 |
| 大族 | Elfin / E05 | 内置 | 内置 | 是 |
| 新松 | SR 协作系列 | 内置 | 内置 | 是 |
| 节卡 | JAKA Minicobo | 内置 | 内置 | 是 |
| ABB | GoFa / SWIFTI | 内置 | 内置 | 是 |
| Kuka | LBR iiwa / LBR iisy | 内置 (7 轴扭矩) | 内置 | 是 |
| Fanuc | CRX 系列 | 内置 | 内置 | 是 |
| ABB IRB 1200/2600 工业臂 | - | 需辨识 | 需辨识 | 有限 |
| Kuka KR Agilus | - | 需辨识 | 需辨识 | 有限 |
| Fanuc M-10iD | - | 需辨识 | 需辨识 | 否 |
| 传统工业臂 (无扭矩反馈) | - | - | - | 否 |
协作机器人标配拖动示教, 工业臂只有部分高端支持 (需要 MTS 扭矩传感器或电流估扭).
前置条件
- 机器人支持扭矩控制模式 (可查 ESI 或手册)
- 工具已安装并配置负载 (质量 + 质心), 否则重力补偿错
- 已完成摩擦辨识 (系统首次使用或更换工具时)
- 使能开关按下 (三位中间档保持)
- 工作区清空, 拖动时可能撞到周边物体
工具负载配置
拖动前必须精确配置工具参数:
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 的力下坠).
摩擦辨识
辨识流程
- 设备 → 机器人 → 摩擦辨识向导
- 系统自动让机器人慢速 + 中速 + 高速分别转每个关节, 正反方向各一次
- 记录电流 vs 速度曲线, 拟合出库伦摩擦
F_c和粘滞摩擦F_v:
τ_friction(q̇) = F_c · sign(q̇) + F_v · q̇
- 辨识时间约 5 分钟 (6 轴), 过程中人不可干预
- 辨识完成后保存到机器人配置文件
辨识触发时机
| 时机 | 是否必须重新辨识 |
|---|---|
| 首次安装 | 必须 |
| 换工具 (改变负载) | 不需要 (摩擦是机身的) |
| 环境温度变化 > 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) 和姿态都不变。
安全注意事项
- 工作区清空: 拖动时机器人完全被动, 可能撞到周边, 清走夹具、工件以外的物体
- 手放牢: 手一定要托住工具, 不能抓轴 (夹手)
- 工具尖端朝远离身体: 焊枪 / 切割头尖端朝外, 防止戳伤
- 低速熟练: 第一次拖先小范围试试, 熟悉"软"的感觉
- 使能开关不要死按: 一只手操作示教器, 一只手扶工具, 使能开关按到中间档 (按到底等于急停)
- 断电保护: 部分机型拖动时伺服力矩小, 负载稍大会下坠, 断电前先把机器人抬到安全折叠姿态
排错清单
| 现象 | 原因 | 解决 |
|---|---|---|
| 松手后机器人下坠 | 负载质量填小了 | 重新测量工具质量并填大 |
| 松手后机器人上抬 | 负载质量填大了 | 减小 Mass 参数 |
| 拖动卡顿 / 起步费力 | 摩擦补偿不足 | 重做摩擦辨识 |
| 拖不动 | 进错模式 (还在位置伺服) | 再按一次 Drag 键确认进入 |
| 拖动过程中突然锁死 | 接近奇异点或关节极限 | 反向稍退, 换关节 JOG 过渡 |
| 某个方向感觉重 / 轻 | 阻尼不对称 | 调整 Damping X/Y/Z 一致 |
| 记录路径抖 | 采样率与机械共振 | 降低记录采样率到 20 ms |
最佳实践
- 负载精确比拖动体验更重要: 差 5% 负载 = 拖动时有明显漂移
- 工具快换: 快换板配好负载参数, 换工具时调用
MC_SetLoad切换 - 记录路径后稀疏化: 连续记录点太多, 回放前用 IDE 的路径简化工具压到 5~10 mm 间距
- 拖动 + JOG 混用: 粗略位置用拖动, 最后 mm 级用工具 JOG 小增量精调
- 避免边缘姿态: 拖动到机器人能力边缘 (臂伸直) 时会僵硬, 推不动
- 定期重新辨识: 半年或换季重新做一次摩擦辨识
- 禁止带人拖: 协作机器人能检测碰撞停, 但别用人体测试, 撞伤人不开玩笑