跳到主要内容

关键点规划

一个机器人程序通常是由十几个到数百个点位串起来的. 这些点位并不是任意选的 — 哪些点是Home、哪些是过渡点、哪些是工作点 关系到程序的节拍安全性可维护性。本页给出 4 类关键点 的定义、选取原则, 以及路径规划的常见反模式。

4 类关键点

类别简称定位数量 (典型)
Home 点Home / HomePos程序入口 / 出口, 机械稳定姿态1
安全过渡点Safe / TransXX远离工件的高空点, 切换工作区域时的中转3~10
工作预位点Approach / PreXX工作点正上方 / 前方的安全逼近位与工作点 1:1
工作点Pick / Place / WeldN实际进行取料 / 放料 / 焊接 / 涂胶的精确点程序中绝大多数

Home 点

定义

程序的入口点和最终退出点, 必须满足:

  1. 机器人在此姿态下不下坠 (关节角度不在重力臂杆最长处)
  2. 远离工件、工装、人员 (至少 200 mm 安全距离)
  3. 机器人从任意工作位出发, 走 MoveJ 到 Home 不会撞到任何东西
  4. 关节角度远离关节限位和奇异点

推荐 Home 姿态

  • 6 轴工业臂: J1 = 0°, J2 = -90° (大臂水平), J3 = 90° (小臂向上), J4 = 0°, J5 = -90°, J6 = 0°
  • SCARA: J1 = 0°, J2 = 0°, Z 轴最高
  • Delta: 所有臂杆呈静态平衡状态 (垂直向下)
  • UR 协作臂: Home = [0, -90°, 0, -90°, 0, 0], 折叠姿态

Home 的多种用途

  • 程序开头回 Home, 确保起点可知
  • 每轮循环结束回 Home, 便于在任意位置按 Stop 安全停止
  • 上电后自动回 Home, 确认机械完好

安全过渡点

定义

从一个工作区到另一个工作区之间的中转点, 必须满足:

  1. 在所有工作区的安全高度以上 (比最高工件 + 夹具高 100 mm)
  2. 姿态与下一段工作点的进入姿态接近, 避免到达后再大幅调姿态
  3. 不在奇异点附近

使用时机

什么时候需要过渡点?

  • 从 Pick 位到 Place 位, 两位置距离 > 500 mm → 加 1~2 个过渡点
  • 需要跨越工装, 直接走 MoveL 会撞 → 加过渡点绕过
  • 工件大, 姿态从 Pick 的水平变成 Place 的倾斜 → 加过渡点提前调姿态

过渡点的优化

方法效果
用 MoveJ 连续最快, 路径不精确
加 Zone (平滑半径)MoveJ / MoveL 混用, 既快又不停顿
3D 视口验证看 TCP 轨迹, 确保不碰工件
MoveJ(Target := Home,        Velocity := 100, Zone := 0);     // 精确 Home
MoveJ(Target := Trans1, Velocity := 200, Zone := 50); // 过渡, 50 mm 平滑
MoveJ(Target := Trans2, Velocity := 200, Zone := 50); // 过渡
MoveJ(Target := PickApproach, Velocity := 150, Zone := 10); // 接近
MoveL(Target := Pick, Velocity := 30, Zone := 0); // 精确下降

工作预位点 (Approach)

定义

工作点正上方 / 前方的安全逼近位, 是必须存在的中间点. 原因:

  • 直接 MoveJ 到工作点, TCP 路径不确定, 可能撞工件侧边
  • 工作点需要精确到位, 但高速接近是浪费

典型布置

工作类型Approach 位置
取料 (Pick)工作点正上方 100~200 mm
放料 (Place)工作点正上方 100~200 mm
焊接 (Weld Start)焊点沿法向抬起 50 mm
焊接 (Weld End)焊点终点沿法向抬起 50 mm
涂胶 (Glue)胶道起点沿法向抬起 20 mm
去毛刺工件表面沿法向抬起 10 mm
喷涂工件表面沿喷涂方向 300 mm

典型运动模式

// 取料: Approach → Pick → Retreat
MoveJ(Target := Pick_Approach, Velocity := 150, Zone := 20); // 快速接近
MoveL(Target := Pick, Velocity := 30, Zone := 0); // 直线精确下降
DO_Gripper := TRUE; // 夹爪关
Wait(Time := 200); // 等待
MoveL(Target := Pick_Approach, Velocity := 50, Zone := 20); // 直线抬起 (避免拖工件)

工作点

定义

实际进行操作的精确点, 要求:

  • 相对于工件坐标系定义 (而非 World)
  • 姿态精确: 焊枪垂直焊缝 / 夹爪平行孔方向
  • 位置精确: 通常要求 ±0.5 mm 以内

工作点的批量生成

实际工况常有成百上千个工作点 (码垛、网格焊点), 手工示教不现实. 常见方法:

方法适用
Offset 数组计算码垛, 规则网格
CAD 导入焊接, 直接从焊接路径 CAD 提取
视觉引导随机位置工件, 实时计算
示教一行 + 数组偏移汽车点焊, 示教一行然后阵列
VAR
i, j : INT;
pBase : ROBOT_POS := (X := 0, Y := 0, Z := 0);
pWork : ROBOT_POS;
END_VAR

FOR j := 0 TO 4 DO // 5 行
FOR i := 0 TO 9 DO // 10 列 = 50 个焊点
pWork.X := pBase.X + 20.0 * i; // X 间距 20 mm
pWork.Y := pBase.Y + 20.0 * j; // Y 间距 20 mm
pWork.Z := pBase.Z;
MoveL(Target := pWork, Velocity := 50);
Weld();
END_FOR;
END_FOR;

路径规划原则

原则 1: 分层

World (最外层)
└─ Home
└─ 安全过渡点 (Trans)
└─ 预位点 (Approach)
└─ 工作点 (Work)

程序出入都严格按层级 进入 / 退出, 不跨层级跳。跨层级跳 (比如从 Trans 直接到 Work) → 路径不可控。

原则 2: 空行程用关节 + 高速 + 大 Zone

// 空行程 (不碰任何东西)
MoveJ(Target := Trans1, Velocity := 200, Zone := 80); // 高速大平滑
MoveJ(Target := Trans2, Velocity := 200, Zone := 80);

原则 3: 工作行程用直线 + 低速 + 小 Zone 或 0 Zone

// 工作行程 (碰工件)
MoveL(Target := Weld_Start, Velocity := 20, Zone := 0); // 精确到位
MoveL(Target := Weld_Mid, Velocity := 10, Zone := 2); // 小平滑
MoveL(Target := Weld_End, Velocity := 20, Zone := 0); // 精确退出

原则 4: 最小回转

规划时相邻点关节角变化应尽量小. J1 从 0 → 170° → 0 是大回转, 浪费 5~10 秒。改成 0 → -170° → 0 是小回转, 一样到达。

原则 5: 避开奇异点

路径经过奇异点 (腕奇异 J5 = 0° 附近) 会导致伪速度爆炸。规划时加 姿态约束 或插入绕开点。

最优路径计算

遗传算法 TSP

对 50+ 个独立工作点 (如焊点阵列), 手工排序耗时且不一定最优。Darra IDE 内置路径优化器:

  1. 点位管理面板 → 选中多个点位 → 右键 → 路径优化
  2. 选择优化目标:
    • 最短总路径 (默认)
    • 最短总时间 (考虑加减速)
    • 最少关节大回转
  3. 算法: 遗传算法 + 局部搜索
  4. 计算时间: 100 点 < 5 秒
  5. 结果: 输出点位顺序, 可导入程序

障碍物避让

有障碍物时, 两点之间不一定能直连。需要RRT-Connect 规划:

  1. IDE 加载障碍物模型 (见 模型导入)
  2. 指定起点 / 终点
  3. 运行 RRT-Connect, 自动找到无碰撞路径
  4. 后处理: 路径平滑 + 拐点简化

RRT 不保证最短路径, 但保证可行。实际应用中大多数场景手工规划过渡点更高效。

参数表

参数类型单位范围默认说明
HomeJointREAL[6]°--Home 关节角
SafeHeightLREALmm50..1000200安全过渡高度
ApproachOffsetLREALmm10..500100预位点相对工作点的偏移
ApproachDirVECTOR3--(0,0,1)预位方向 (工作坐标系下)
DefaultZoneLargeLREALmm10..20050空行程默认平滑半径
DefaultZoneSmallLREALmm0..202工作行程默认平滑半径

排错清单

现象原因解决
程序运行到一半撞工件缺预位点, MoveL 直接冲下来在每个工作点前加 Approach
节拍慢所有运动都用 MoveL + 0 Zone空行程改 MoveJ + 大 Zone
机器人到某点突然大角度转腕邻近点姿态连续性差调整点位姿态使相邻点欧拉角接近
每次循环机器人路径不一样MoveJ 起点不同结果不同改 MoveL 或加 Approach 确保进入姿态一致
Home 点一启动就撞人Home 距离工装太近重新选 Home, 离工装 > 200 mm
过渡点飞过工件上方, 抖动过渡点离工件太近, 减速避撞把过渡点抬高 100 mm

最佳实践

  1. 先画纸, 再示教: 程序流程图列出所有点位和顺序, 再到机器人前示教
  2. 4 类点分目录: 点位管理里按 Home / Safe / Approach / Work 分组, 一眼能看到什么缺失
  3. 命名规则: P_{区域}_{类别}_{序号}, 如 P_PickStn_Approach_1
  4. 一个文件最多 200 个点: 超了分模块, 每个子程序独立点集
  5. 路径仿真再下放: 每改一个点先在 3D 视口仿真, 看 TCP 曲线
  6. 日志驱动调优: 运行时记录每段耗时, 超预期的段拉出来看点位设置
  7. 关键点加注释: 点位列表旁边写"焊缝起点 / 装配孔 1", 接班人看得懂

相关文档