跳到主要内容

奇异点处理

奇异点 (Singularity) 是机器人运动学中雅可比矩阵秩亏的位姿 — 在这些位姿上, 机器人失去某些方向的运动能力, 或要求某关节以无限大角速度才能维持 TCP 的有限笛卡尔速度。实际表现就是:

  • MoveL 走到某一点时突然某个关节飞速旋转
  • 报警 "Singularity" 并急停
  • JOG 笛卡尔方向时机器人完全不动剧烈颤抖

本页讲 6 轴工业臂的 3 类奇异点, 检测方法, 和 4 种处理策略。

奇异点本质

正运动学 x = f(q), 其雅可比矩阵 J(q) = ∂f/∂q 给出了关节速度 q̇ 与笛卡尔速度 ẋ 的关系:

ẋ = J(q) · q̇

逆解时:

q̇ = J⁻¹(q) · ẋ

det(J) = 0J 秩亏时, J⁻¹ 不存在或趋无穷, 即奇异点。几何上, 奇异点处机器人失去一个自由度, 无法在那一瞬间沿某方向运动。

6 轴工业臂的 3 类奇异点

1. 肩奇异 (Shoulder Singularity)

发生位置: 腕心 (J5 轴中心) 落在 J1 旋转轴 (机身 Z 轴) 上, 即"机器人中心正上方或正下方"。

几何描述: 以机身 Z 轴为中心的半径 ≈ 50 mm 的圆柱范围内。

现象:

  • J1 方向自由度退化: 在该点无法沿 TCP 的水平圆周方向 (绕 Z) 有限速度运动, J1 趋无穷
  • 笛卡尔 JOG 某方向触发 → J1 告警

避免:

  • 工作区规划: 避免 TCP 穿越机身正上方 / 正下方的柱形区域
  • 工件不放正对机身中心
  • 路径穿越时强制用 MoveJ 而非 MoveL

2. 肘奇异 (Elbow Singularity)

发生位置: 大臂 + 小臂完全伸直完全折叠 (J3 ≈ 0° 或 180°)。

几何描述: 机器人臂展边缘 (外圈) 或最紧折叠(内圈)。

现象:

  • J3 方向自由度退化
  • TCP 无法沿径向 (远离 / 靠近机身) 移动, 因为臂已经伸到极限
  • 路径走到工作区边缘时出现此奇异

避免:

  • 工作区规划: 工件不放在机器人最大臂展的 95% 处
  • 留出 50~100 mm 裕量
  • 3D 视口显示工作空间时, 关注红色边界环 = 肘奇异

3. 腕奇异 (Wrist Singularity, 最常见)

发生位置: J5 ≈ 0° (或 ±180°), 此时 J4 和 J6 轴共线。

几何描述: 工具平行于小臂延长线 ("工具直着往前伸")。

现象:

  • J4 和 J6 退化为一个自由度, 二者可以等量反向旋转而 TCP 不动
  • 执行需要 J4 或 J6 单独转的运动时, J4 和 J6 一起飞速转 (甚至无限速)
  • 焊接 / 涂胶工具沿小臂延长线时最容易撞

避免:

  • TCP 姿态规划时让 J5 保持 ≠ 0°, 推荐 J5 ∈ [±15°, ±135°]
  • 不允许 J5 经过 0°
  • 示教点时刻意加点姿态倾斜

奇异点检测

几何检测 (快)

bShoulder  = sqrt(TCP.X² + TCP.Y²) < 50 mm  (落入机身柱内)
bElbow = |J3| < 5° 或 |J3 - 180°| < 5°
bWrist = |J5| < 5°

系统每毫秒检测一次, 接近时自动限速 (proximity slow-down).

数值检测 (精确)

manip = sqrt(det(J · J^T))   -- 可操作度

manip = 0 → 奇异; manip 越小 → 越接近奇异。阈值 0.001 rad·m 通常设为预警。

4 种处理策略

策略 1: 避让 (Avoidance, 推荐)

编程阶段就规划路径不碰奇异. 具体方法:

  1. 示教点时在3D 视口查看"奇异区标记" (红色球 / 柱)
  2. 不要让示教点或路径中间穿过这些区
  3. 工作区选在机器人"舒服"的姿态区:
    • TCP 距机身 300~800 mm (非肘奇异区)
    • TCP 姿态让 J5 落在 ±30° ~ ±90°
    • TCP 水平投影不落在机身中心 ±50 mm

策略 2: 关节运动绕过 (MoveJ Workaround)

路径必须经过奇异区时, 插入 MoveJ 段绕过:

// 原路径: Pick (TCP 在机身正上方) → Place
// 直接 MoveL 会经过肩奇异

MoveL(Target := Pick_Approach, Velocity := 50);
MoveL(Target := Pick, Velocity := 20); // 下降取料
// 关键: 用 MoveJ 回到安全点, 关节空间运动不触发奇异
MoveJ(Target := Safe_Trans, Velocity := 150); // 关节运动避奇异
MoveL(Target := Place_Approach, Velocity := 80);
MoveL(Target := Place, Velocity := 20);

策略 3: 阻尼最小二乘法 (DLS, Damped Least Squares)

在奇异点附近人为加阻尼, 让逆解平滑退化:

q̇ = J^T · (J · J^T + λ² · I)⁻¹ · ẋ

其中 λ 是阻尼系数, 在 manip < 阈值 时 λ 从 0 线性增加到 0.1。效果:

  • 奇异点附近关节速度被限制在可执行范围
  • TCP 速度稍低于指令速度 (牺牲一点精度换可执行)
  • 系统不报警, 机器人继续运动

Darra 默认开启 DLS, 可通过 EnableDLS / DLSLambda 参数配置:

SetDLSConfig(Robot := Robot1, Enable := TRUE, Lambda := 0.05, ProxyThreshold := 0.01);

代价: 奇异点处 TCP 误差可能 ±0.5 mm, 焊接 / 高精度操作不可用。

策略 4: 姿态约束松弛 (Relax Orientation)

如果路径对姿态要求低, 可以允许机器人在奇异点微调姿态来避开:

mcL(
TargetPosition := pWork,
OriToleranceRx := 5.0, // 允许 Rx 偏差 ±5°
OriToleranceRy := 5.0,
OriToleranceRz := 15.0, // Rz (工具绕轴) 容忍大
Velocity := 30
);

系统在姿态容许范围内寻找最远离奇异的姿态。焊接对 Rz 通常不敏感 → 可以容忍 15°, 帮助避开腕奇异。

DLS 详解

Lambda 参数

Lambda效果
0无阻尼, 奇异处报警
0.01轻微阻尼, 精度损失 < 0.1 mm
0.05 (默认)中等, 损失 < 0.5 mm
0.1强, 损失 ~2 mm, 最平滑
> 0.2几乎不可动, 不推荐

激活策略

自适应 Lambda (推荐):

λ(manip) = λ_max · (1 - manip / manip_threshold)²   if manip < manip_threshold
= 0 otherwise
  • manip > threshold → λ = 0 (全精度)
  • manip → 0 → λ → λ_max (最大阻尼)
  • 平滑过渡, 无速度跳变

示教器奇异提示

接近奇异时, 示教器:

  1. 视觉: TCP 指示颜色变橙色, 报警区域变红
  2. 数字: 面板显示 manip = 0.008 (WARN)
  3. 速度: 自动降到 30% 以内
  4. 触觉 (部分示教器): 手柄轻微振动

极近奇异 (manip < 0.001):

  1. 红色闪烁
  2. 示教器警告 "即将进入奇异"
  3. 笛卡尔 JOG 被禁止, 只能关节 JOG

SCL 代码检查

VAR
manip : LREAL;
bSingular : BOOL;
END_VAR

GetManipulability(Robot := Robot1, Value := manip);

IF manip < 0.005 THEN
bSingular := TRUE;
Log.Warn('Near singularity, manip = %f', manip);
END_IF;

// 运动前检查目标点
IF CheckTargetSingularity(Robot := Robot1, Target := pNext) THEN
Log.Warn('Target is singular, switching to MoveJ');
MoveJ(Target := pNext, Velocity := 100);
ELSE
MoveL(Target := pNext, Velocity := 50);
END_IF;

参数表

参数类型单位范围默认说明
EnableDLSBOOL--TRUE启用 DLS
DLSLambdaMaxLREAL-0..0.20.05最大阻尼
DLSThresholdLREAL-0.001..0.10.01可操作度阈值
EnableProxSlowdownBOOL--TRUE接近奇异自动降速
ProxSlowdownFactorLREAL-0.1..1.00.5降速比例
RejectSingularPathBOOL--FALSE拒绝直接经过奇异的路径
ManipulabilityLREAL-0..1-只读, 当前可操作度

排错清单

现象原因解决
运行时报 "Singularity detected"路径穿越奇异插入 MoveJ 段或改路径
MoveL 到目标, 某轴突然 360° 翻转目标点在腕奇异改目标姿态, 让 J5 ≠ 0
JOG 按 +Z 机器人抖动接近奇异, J4 / J6 争夺切关节 JOG 先走开
工作区边缘报肘奇异臂展用到 98%工装往内移 100 mm
DLS 开着但精度下降λ 太大减小 DLSLambdaMax
3D 视口奇异区提示颜色不对工具坐标系未标对重做 TCP 标定
路径之前没事, 换工具后报奇异新工具 TCP 远, 导致姿态布局变重做路径姿态

最佳实践

  1. 教学时就避开: 示教阶段看 3D 视口奇异提示, 点位都靠外、偏下、姿态斜
  2. MoveJ + MoveL 混用: 长距离跨越用 MoveJ, 工作段用 MoveL
  3. J5 不过零: 焊接涂胶工具姿态 J5 至少 15° 倾斜
  4. 工作区设在机器人"舒服区": 机身前方 400700 mm, 高度 300800 mm
  5. DLS 开着兜底: 即使规划好也开 DLS 防意外路径
  6. 路径预检: 程序下发前用路径仿真 + 奇异扫描工具扫一遍
  7. 视觉引导尤其注意: 动态计算的目标点可能飘到奇异, 加目标点过滤步骤

7 轴 / 冗余机器人

7 轴机器人 (如 Kuka iiwa, Franka Panda) 有冗余自由度, 可以在保持 TCP 不变的情况下调整肘部位置来避开奇异。Darra 对 7 轴机器人的处理:

  • 冗余参数 (肘角 θ_e): 用户可指定 [-180°, 180°]
  • 自动模式: 系统实时选择远离奇异的 θ_e
  • 手动模式: 示教时用第 7 个 JOG 按钮调肘角

7 轴避奇异能力 = 6 轴 + 肘角冗余, 大多数场景完全不碰奇异

数学补充: 可操作度椭球

每个位姿的可操作度 (manipulability) 可以可视化为椭球:

  • 长轴 = 该方向可达最大速度
  • 短轴 = 难移动方向 (短轴趋 0 = 奇异)

3D 视口可以打开 可操作度椭球 显示, 红色扁椭球 = 即将奇异, 绿色球形 = 姿态最好。用这个图找最优工作姿态比手算快。

相关文档