机器人控制
什么是奇异点?如何避免?
奇异点 (Singularity) 是机器人在某些姿态下丧失一个或多个自由度的位置。在奇异点附近,机器人需要极高的关节速度才能实现微小的 TCP 运动,可能导致关节速度超限或轨迹偏差。
常见奇异点类型
| 类型 | 描述 | 发生条件 |
|---|---|---|
| 腕部奇异点 | 关节 4 和关节 6 轴线共线 | 关节 5 接近 0 度 |
| 肩部奇异点 | TCP 接近基座正上方 | 手臂完全伸展或折叠 |
| 肘部奇异点 | 关节 2 和关节 3 使手臂完全伸直 | 工作空间边缘 |
解决方案
- 路径规划时避开奇异点区域
(* 运动前检查奇异点 *)
IF CheckSingularity(TargetPose) THEN
(* 修改接近角度或使用关节运动绕过 *)
MOVJ(IntermediatePoint);
MOVL(TargetPose);
ELSE
MOVL(TargetPose);
END_IF;
- 使用关节运动 (MOVJ) 穿越奇异点区域 — 关节运动不受奇异点影响
- 奇异阻尼 — Darra Robot Core 内置 Jacobian 阻尼奇异处理,在接近奇异点时自动降速
IDE 3D 视口中可显示工作空间可达性云图,红色区域表示接近奇异点,规划路径时应避开。
关节超限报警怎么处理?
关节超限表示目标位置超出了机器人的物理运动范围。
排查步骤
- 检查目标点位 — 在 IDE 中打开点位编辑器,确认各关节角在限位范围内
- 检查 DH 参数 — 错误的 DH 参数会导致逆解结果异常
- 检查工具坐标系 — TCP 偏移错误可能导致实际关节角与预期不符
- 检查工件坐标系 — 工件坐标系偏移可能将目标点推到工作空间外
关节限位设置
(* 关节限位配置 (弧度) *)
JointLimits[0].Min := -3.14; JointLimits[0].Max := 3.14; (* J1: -180~+180 *)
JointLimits[1].Min := -2.09; JointLimits[1].Max := 2.09; (* J2: -120~+120 *)
JointLimits[2].Min := -3.14; JointLimits[2].Max := 1.22; (* J3: -180~+70 *)
JointLimits[3].Min := -3.49; JointLimits[3].Max := 3.49; (* J4: -200~+200 *)
JointLimits[4].Min := -2.09; JointLimits[4].Max := 2.09; (* J5: -120~+120 *)
JointLimits[5].Min := -6.28; JointLimits[5].Max := 6.28; (* J6: -360~+360 *)
如何进行工具标定 (TCP 标定)?
工具标定用于确定工具末端相对于法兰盘的精确偏移。Darra PLC 支持多点法标定。
四点法标定步骤
- 在工作空间中固定一个尖点 (参考点)
- 从 4 个不同姿态移动工具末端到同一参考点
- 每次到达后记录关节角度
(* 记录4个标定点 *)
CalibrationPoint[0] := GetCurrentJoints(); (* 姿态1 *)
CalibrationPoint[1] := GetCurrentJoints(); (* 姿态2 *)
CalibrationPoint[2] := GetCurrentJoints(); (* 姿态3 *)
CalibrationPoint[3] := GetCurrentJoints(); (* 姿态4 *)
(* 计算 TCP 偏移 *)
TCPOffset := CalculateTCP(CalibrationPoint);
(* 结果: TCPOffset = [dx, dy, dz, rx, ry, rz] *)
- 在「工具坐标系」对话框中应用计算结果
标定点的 4 个姿态应尽量差异大 (相互正交),以提高计算精度。标定精度通常可达 0.1mm。
MOVJ 和 MOVL 什么时候用?
| 指令 | 路径 | 速度 | 适用场景 |
|---|---|---|---|
MOVJ | 关节空间最短路径,TCP 路径不可预测 | 快 | 空间转移、避障 |
MOVL | TCP 直线运动 | 较慢 | 接近工件、焊接、涂胶 |
MOVC | TCP 圆弧运动 | 较慢 | 圆弧轨迹 |
经验法则:
- 不关心路径时用
MOVJ(快) - 关心路径时用
MOVL/MOVC(精确) - 接近/离开工件时用
MOVL(安全)
运动速度设置多少合适?
| 场景 | 速度倍率 | 说明 |
|---|---|---|
| 首次调试 | 5~10% | 观察路径是否正确 |
| 示教 | 10~30% | 点动示教 |
| 空载试运行 | 30~50% | 验证完整流程 |
| 带载试运行 | 50~80% | 验证负载下的精度 |
| 正常生产 | 80~100% | 满速运行 |
首次运行新程序时,必须以低速 (< 10%) 试运行,确认路径无碰撞后再逐步提速。
多个机器人如何同步运动?
Darra PLC 支持多机器人协调运动:
(* 两台机器人同步运动 *)
SyncGroup.Add(Robot1, Target1);
SyncGroup.Add(Robot2, Target2);
SyncGroup.Execute(SyncMode := SYNC_TIME); (* 时间同步: 同时到达 *)
同步模式:
- SYNC_TIME — 同时到达:较快的机器人降速
- SYNC_PATH — 路径同步:按比例同步进度
- SYNC_START — 同时启动:各自速度独立
仿真和实机运动有差异怎么办?
仿真与实机差异的常见原因:
- DH 参数误差 — 实际机械尺寸与标称值的制造偏差
- 减速比/编码器分辨率 — ScaleFactor 配置不精确
- 机械间隙 — 减速器间隙导致的位置偏差
- 惯量/摩擦力 — 仿真未考虑动力学特性
解决方案:
- 使用实际测量的 DH 参数替换标称值
- 校准编码器 ScaleFactor (通过精密量具比对)
- 仿真中启用物理引擎 (PhysicsIntegrator)
现场配置与调试运维常见问题
Q: TCP 标定后 Z 偏移仍然偏大
典型现象: 四点法标定完成后, 实际作业 TCP 在 Z 方向偏 1-5 mm。
排查顺序:
| 检查 | 处理 |
|---|---|
| 工具机械安装松动 | 用扭力扳手按厂家规定扭矩上紧 |
| 末端负载压弯法兰 | 带负载标定, 或用刚性标定工具 |
| 标定点 4 个姿态差异不够 | 四个姿态之间角度差 >45°, 分散在不同空间 |
| 基座/机架变形 | 检查地脚螺栓是否松动, 再次水平校准 |
| 标定尖针不在同一点 | 尖针要固定不动, 四次触碰同一精确位置 |
| TCP 工具参数手误录错 | 重录并比对 |
验证标定精度:
- 把 TCP 移到已知参考点 (比如标定尖针处)
- 切换不同姿态 (让 J6 旋转 90°)
- TCP 应该不动, 偏移
<0.5mm为合格
Q: 机器人报"关节超限"怎么办
关节超限分硬限位和软限位:
| 限位 | 位置 | 触发后果 |
|---|---|---|
| 硬限位 | 机械挡块 | 碰撞损坏, 不能依赖 |
| 机械软限位 | 电机驱动器内 | 驱动器报警, 急停 |
| 软限位 | DarraRT 参数 | 运动规划阶段拒绝 |
处理步骤:
- 确认机器人当前关节角 (示教盒或监视面板)
- 与项目参数比对
JointLimits配置 - 零位漂移? 做一次零位校准 (回零点, 触发零位开关)
- 实际使用范围需要调大? 修改
JointLimits.Max/Min并重新下载 - 极限工况建议软限位比硬限位留
>5°余量
零位校准流程 (通用):
1. 手动模式慢速旋转关节, 接近零位开关
2. 慢速通过开关, 驱动器记录零位索引
3. 自动模式执行"归零" → 各轴自动回零, 记录位置
4. 校准后与机械基准 (刻线) 比对, 偏差 `<0.1°`
Q: 机器人姿态奇异走不动
见本文上方 什么是奇异点?如何避免?, 运维层再补:
- 现场快速识别: 报警类型
ROBOT_SINGULARITY或JOINT_SPEED_LIMIT - 临时规避: 用 MOVJ 穿过奇异区, 再用 MOVL 精确作业
- 永久规避: 修改路径, 增加引导点改变手腕姿态
- 参考姿态建议: 让 J5 远离
0°和180°(主要手腕奇异)
Q: 负载参数错导致抖动
机器人高速运动时抖动, 大概率是负载动力学参数错误 (重量、重心、惯量)。
修正方式:
| 方法 | 精度 | 难度 |
|---|---|---|
| 厂家手册取值 | 低 | 易 |
| 第三方 CAD 建模计算 | 中 | 中 |
| DarraRT 自动负载辨识 | 高 | 易 |
| 实测称重 + 悬挂法 | 高 | 难 |
DarraRT 自动辨识流程:
- 机器人 → 负载辨识向导
- 机器人按预设轨迹运行 3-5 分钟 (缓慢多姿态)
- 系统采集各关节电流, 反解出动力学参数
- 保存为"负载配置", 生产时绑定
Q: 使能回路断机器人就停
使能回路 (Enable Chain) 是安全关键信号, 包含:
急停按钮(NC) → 安全门开关(NC) → 三位使能开关(中位) → 驱动器使能
任一断开, 驱动器立即下使能 (伺服关), 机器人停在当前位置。
现场调试时机器人"一下使能就停":
| 原因 | 处理 |
|---|---|
| 急停按钮被拍下未复位 | 旋转急停按钮复位, 复位前必须确认安全 |
| 安全门未关好 | 检查安全门开关磁铁/限位到位 |
| 三位开关只按到中位没轻握 | 示教盒三位开关轻握 = 使能, 松开/重按 = 断使能 |
| 急停回路继电器故障 | 用万用表量通断, 老化元件更换 |
| 安全 PLC 参数错 | 安全 PLC 配置中使能条件 AND 关系 |
有些现场为"快速调试"短接急停, 严重违反安全标准, 一旦发生伤害责任人承担全部法律责任。
Q: 机器人与 PLC 协同时序问题
机器人作为 PLC 下的子系统, 常见三信号握手协议:
| PLC → 机器人 | 机器人 → PLC | 含义 |
|---|---|---|
| Start (上升沿) | — | 请求执行 |
| — | Busy | 正在执行 |
| — | Done | 执行完成 (保持到 Start 下降) |
| — | Error | 错误, 带 ErrorCode |
(* PLC 端协调 *)
IF ReadyToPick AND NOT Robot.Busy THEN
Robot.Start := TRUE; (* 触发机器人作业 *)
END_IF;
IF Robot.Done THEN
Robot.Start := FALSE; (* 撤掉请求 *)
PickedCount := PickedCount + 1;
END_IF;
IF Robot.Error THEN
Robot.Start := FALSE;
LogError('robot', Robot.ErrorCode);
Alarm_RobotError := TRUE;
END_IF;
时序常见陷阱:
| 陷阱 | 修正 |
|---|---|
| Start 持续置位, 机器人反复启动 | 必须检测上升沿或等待 Done |
| 未等 Done 就发下一个 Start | 加 "NOT Robot.Busy" 条件 |
| Busy 和 Done 同时为 TRUE | 状态机设计错误, 只能一个 |
Q: 视觉给坐标但机器人抓偏了
抓偏通常来自三个环节之一: 手眼标定、视觉精度、抓手精度。
排查顺序:
-
固定视觉给的坐标, 不动真实物体, 让机器人去抓
- 如果每次抓到同一位置, 视觉坐标是稳定的
- 机器人系统误差 = 固定偏差, 补偿即可
-
固定视觉视野, 换不同位置的物体
- 视觉每次给的坐标与实际误差一致 = 标定精度问题
- 误差随位置变化 = 视觉畸变 (镜头/标定板)
-
检查手眼标定
- Eye-in-hand: 相机随机器人末端移动, 重新标定
- Eye-to-hand: 相机固定, 标定板在机器人末端多姿态采集
- 标定点
>=9个, 分散在视野内
-
抓手夹具精度
- 夹具本身变形? 换钢制或加厚
- 物体摆放不稳? 加导向结构
- 抓取姿态错误导致物体翻转? 约束摆放方向
Q: 机器人跑一会儿速度降低
运行 10-30 分钟后速度自动降低, 典型热保护触发:
| 原因 | 排查 |
|---|---|
| 电机过热 | 驱动器监视电机温度, >80°C 降速保护 |
| 减速机磨损 | 振动声音异常, 换减速机 |
| 润滑油不足 | 按维护计划加注 |
| 负载超规 | 检查实际负载是否超额定 |
| 环境温度高 | 机柜空调或降额使用 |
运维监控建议:
(* 监视电机温度, 预警而非等保护 *)
FOR i := 0 TO 5 DO
IF MotorTemp[i] > 70.0 THEN
Alarm_MotorHot[i] := TRUE;
(* 主动降低运动速度, 留出冷却时间 *)
SpeedOverride := 0.8;
END_IF;
END_FOR;
Q: 机器人断电后再开机位置丢失
带绝对编码器的机器人不会丢位置, 但需要备用电池:
| 电池状态 | 后果 |
|---|---|
| 电量正常 | 断电开机直接工作 |
| 电量低报警 | 驱动器警告, 应计划更换 |
| 电量耗尽 | 开机必须重新校零位 |
| 电池漏液 | 立即断电检查, 防腐蚀电路板 |
电池寿命一般 3-5 年, 建议每年例行检查, 第 3 年主动更换。
Q: 现场维护周期建议
| 周期 | 任务 |
|---|---|
| 每天 | 开机自检, 观察有无异响 |
| 每周 | 清洁机身, 检查电缆绑扎 |
| 每月 | 检查零位偏差, 检查负载参数 |
| 每季度 | 减速机油位/油质, 编码器电池电量 |
| 半年 | 全轴间隙测量 (百分表) |
| 一年 | 全面精度校验 (激光跟踪仪 ISO 9283) |