跳到正文
孔乙己

无传感器碰撞检测与协作安全:动量观测器为什么不需要加速度

完整推导广义动量观测器如何绕开加速度测量,讲清检测-隔离-识别-反应四级流水线,以及 ISO/TS 15066 把"安全"变成可计算数字的方法。

机器人,系统与安全2分钟阅读

协作机器人的“协作”二字在法规意义上非常具体:人和机器人共享工作空间时,撞上了怎么办。这个问题分两层——撞上之前(检测与反应要快)和撞上瞬间(冲击本身要小于人体耐受限值)。前者是估计与控制问题,后者是标准与设计问题。本文两层都推到可计算的程度。

不加任何额外传感器,机械臂能感知碰撞吗?能——碰撞的外力矩 τext\boldsymbol\tau_{ext} 会出现在动力学方程里:

M(q)q¨+C(q,q˙)q˙+G(q)+τf=τm+τext\mathbf M(\mathbf q)\ddot{\mathbf q} + \mathbf C(\mathbf q,\dot{\mathbf q})\dot{\mathbf q} + \mathbf G(\mathbf q) + \boldsymbol\tau_f = \boldsymbol\tau_m + \boldsymbol\tau_{ext}

电机力矩 τm\boldsymbol\tau_m 从电流已知,模型各项可算,似乎移项就能解出 τext\boldsymbol\tau_{ext}:

τ^ext=Mq¨+Cq˙+G+τf−τm\hat{\boldsymbol\tau}_{ext} = \mathbf M\ddot{\mathbf q} + \mathbf C\dot{\mathbf q} + \mathbf G + \boldsymbol\tau_f - \boldsymbol\tau_m

问题卡在 q¨\ddot{\mathbf q}:没有加速度传感器,只能对编码器速度差分——微分放大高频噪声,1 kHz 下差分一次,毫弧度级的速度噪声变成不可用的加速度估计。下面仿真里的灰色曲线就是这条“朴素路线”的下场。

De Luca 提出的方案基于广义动量 p=M(q)q˙\mathbf p = \mathbf M(\mathbf q)\dot{\mathbf q}。对它求导:

p˙=Mq¨+M˙q˙\dot{\mathbf p} = \mathbf M\ddot{\mathbf q} + \dot{\mathbf M}\dot{\mathbf q}

用动力学方程替换 Mq¨\mathbf M\ddot{\mathbf q},并利用结构性质 M˙=C+C⊤\dot{\mathbf M} = \mathbf C + \mathbf C^\top(反对称性质的等价形式),得到一个不含加速度的动量流平衡:

p˙=τm+C⊤(q,q˙) q˙−G(q)−τf+τext\dot{\mathbf p} = \boldsymbol\tau_m + \mathbf C^\top(\mathbf q,\dot{\mathbf q}),\dot{\mathbf q} - \mathbf G(\mathbf q) - \boldsymbol\tau_f + \boldsymbol\tau_{ext}

右边除 τext\boldsymbol\tau_{ext} 外全部可算。构造观测器:把可算的部分积分出一个“理应的动量” p^\hat{\mathbf p},与实测动量(Mq˙\mathbf M\dot{\mathbf q},只用速度!)的差放大 KO\mathbf K_O 倍作为残差 r\mathbf r,并把 r\mathbf r 也喂回积分器:

r=KO(p−∫0t(τm+C⊤q˙−G−τf+r)ds)\mathbf r = \mathbf K_O\left(\mathbf p - \int_0^t \left(\boldsymbol\tau_m + \mathbf C^\top\dot{\mathbf q} - \mathbf G - \boldsymbol\tau_f + \mathbf r\right)\mathrm d s\right)

对它求导并代入动量流平衡,所有可算项对消,剩下一个干净的一阶系统:

r˙=KO(τext−r)\dot{\mathbf r} = \mathbf K_O\left(\boldsymbol\tau_{ext} - \mathbf r\right)

残差以时间常数 1/KO1/K_O 一阶跟踪外力矩——不用加速度、不用逆 M\mathbf M、每周期只多几次矩阵乘加。KOK_O 越大跟踪越快,但速度测量噪声放大也越多,典型取 20~100 s⁻¹:

动量观测器与朴素加速度法的碰撞检测对比 1 kHz 仿真、含真实量级的测速噪声:朴素加速度法的噪声底完全淹没 6 N·m 的碰撞脉冲;动量观测器残差干净地复现外力矩,固定阈值下 36 ms 触发

理想情况下无碰撞时 r=0\mathbf r = 0,实际上模型误差(尤其摩擦——它随温度、方向、速度漂移)让残差有一个运动相关的本底。阈值设计因此是统计问题:

  • 静态阈值:跑一批无碰撞的典型轨迹,取各关节残差包络加 20~30% 裕量。简单可靠,代价是灵敏度被最坏工况拖低;
  • 动态阈值:阈值随速度/加速度调制(摩擦误差正比于速度),高速段放宽、低速段收紧——低速恰恰是人机接触风险高、又最需要灵敏的区段,这个匹配非常合算;
  • 学习残差包络:拿真实运行数据回归“残差 = f(状态)“的包络模型,把模型误差的可预测部分再挤掉一层。

误报和漏报的代价不对称(误报停机损失产能,漏报伤人),阈值向哪边偏由应用定——这也是为什么阈值必须是可配置且被安全评估覆盖的参数,不是代码里的魔法数。

检测只是第一级。De Luca 的碰撞处理流水线值得完整过一遍:

隔离(撞在哪个连杆):残差向量的结构自带答案——碰撞作用在第 kk 连杆时,外力只对关节 1..k1..k 产生力矩(力的作用线穿不过的关节才有力矩),残差分量 rk+1..n≈0r_{k+1..n} \approx 0。从后往前找第一个非零分量即碰撞连杆。更进一步,联合多个分量可以反演接触点位置和接触力方向(可观测的部分)。

识别(多大力):r\mathbf r 就是外力矩的滤波估计;已知接触点雅可比 Jc\mathbf J_c 时,F^ext=(Jc⊤)+r\hat{\mathbf F}_{ext} = (\mathbf J_c^\top)^+ \mathbf r 给出接触力估计——这也是拖动示教和导纳外环不装力传感器的实现方式。

反应(然后呢):按风险等级从硬到软:

  • 0 类停机:立即断使能 + 抱闸——最快但最伤机器,且重力轴抱闸响应期间会掉一段;
  • 1/2 类停机:受控减速到零(保持伺服),是协作场景默认;
  • 反弹(retract):沿残差方向反向运动卸载接触力——夹住人手的场景里“停住”是错误答案,退开才对;
  • 切换到零重力/柔顺模式:检测到接触后转入阻抗控制低刚度模式,把碰撞变成物理人机交互的入口(拖动引导就是这么开始的)。
flowchart LR A[动量观测器残差 r<br/>1 kHz 更新] --> B{超过动态阈值?} B -- 否 --> A B -- 是 --> C[隔离:残差分量结构<br/>定位碰撞连杆] C --> D[识别:估计接触力<br/>大小与方向] D --> E{风险分级} E -- 高速/大力 --> F[1 类受控停机] E -- 夹持风险 --> G[反向退让卸载] E -- 轻接触 --> H[切换低刚度阻抗<br/>进入协作交互]

上面是“撞了怎么办”,法规还管“允许撞多重”。ISO 10218 定义了四种协作模式:安全监控停止、手动引导、速度与间距监控(SSM)、功率与力限制(PFL)。前两种概念直白,后两种是定量工程。

SSM:机器人速度随人机间距缩放。最小保护间距由制动物理决定:

Sp=vhTr⏟反应时间内人的移动+vrTr+vr22abrake⏟机器人反应 + 制动距离+C+Z⏟测量不确定度S_p = \underbrace{v_h T_r}{\text{反应时间内人的移动}} + \underbrace{v_r T_r + \frac{v_r^2}{2 a{brake}}}{\text{机器人反应 + 制动距离}} + \underbrace{C + Z}{\text{测量不确定度}}

用安全级激光扫描仪测间距,间距-速度曲线按上式反解。工程要点是 TrT_r 必须计入整条链路(传感器帧率 + 处理 + 通信 + 伺服响应),漏一环整个公式失效。

PFL:允许接触,但接触的物理量不得超过人体耐受限值。TS 15066 附录给出了按身体部位(额头、胸骨、手背、大腿……29 个区域)的最大接触力/压强表,并区分两类接触:

  • 瞬态接触(自由碰撞,人可以退让):限值较高,约束的是碰撞瞬间的能量交换。碰撞瞬间可以用双质量模型算:机器人在接触点方向的有效质量

meff=[u⊤J M−1(q) J⊤u]−1m_{eff} = \left[\mathbf u^\top \mathbf J, \mathbf M^{-1}(\mathbf q), \mathbf J^\top \mathbf u\right]^{-1}

(u\mathbf u 是接触方向单位向量——注意它就是任务空间惯量 Λ\boldsymbol\Lambda 沿 u\mathbf u 的标量投影,又一次用到动力学)。能量守恒给出允许速度:

vmax=Fmaxμ k,μ=(1meff+1mh)−1v_{max} = \frac{F_{max}}{\sqrt{\mu, k}}, \qquad \mu = \left(\frac{1}{m_{eff}} + \frac{1}{m_h}\right)^{-1}

kk 是身体部位的等效刚度(标准附表给出),mhm_h 是部位有效质量。这个公式就是协作臂“看起来慢吞吞”的定量原因:手背 Fmax=140F_{max} = 140 N、k=75k = 75 kN/m,中型臂 meff∼15m_{eff} \sim 15 kg 时 vmaxv_{max} 只有 0.3~0.5 m/s 量级;

  • 准静态接触(夹持,人退不开):限值折半,且是持续力约束——这正是“反弹”反应策略在标准里的对应物。

设计侧的启示很直接:vmax∝1/meffv_{max} \propto 1/\sqrt{m_{eff}},降低有效质量与降低速度同样有效——轻量化连杆、低折算惯量的关节、避免用臂的“硬方向”(Λ\boldsymbol\Lambda 大的方向)接近人,都直接兑换成允许速度。圆角外壳和柔性蒙皮则是在改 kk。

最后一个容易被绕过的问题:观测器跑在普通控制器里,算不算安全功能? 严格地说不算——安全完整性(PL d/SIL 2 等级)要求安全功能由认证的安全控制器/双通道架构执行。实际产品的分工是:安全级的电流/速度监控兜底(认证通道),动量观测器提供灵敏的功能性检测与柔性反应(性能通道)。两层各司其职,混为一谈会在认证环节付出代价。

  1. 无传感器碰撞检测的核心是绕开加速度:广义动量观测器利用 M˙=C+C⊤\dot{\mathbf M} = \mathbf C + \mathbf C^\top 把残差动力学化成 r˙=KO(τext−r)\dot{\mathbf r} = \mathbf K_O(\boldsymbol\tau_{ext} - \mathbf r),只用电流和速度。
  2. 残差的用途一鱼三吃:超阈值检测、分量结构隔离碰撞连杆、幅值识别接触力——后者顺手实现了无力矩传感器的拖动示教。
  3. 阈值是统计设计:动态阈值随速度调制,恰好在低速高风险段最灵敏;灵敏度-误报的偏向是安全评估的一部分。
  4. TS 15066 把安全变成算术:vmax=Fmax/μkv_{max} = F_{max}/\sqrt{\mu k}——限速、减有效质量、软化外壳是同一个公式的三个抓手。
  5. 功能性检测(观测器)和安全级监控(认证通道)是两层东西,产品架构里要分开。

  • A. De Luca, A. Albu-Schäffer, S. Haddadin, G. Hirzinger. Collision Detection and Safe Reaction with the DLR-III Lightweight Robot Arm. IROS 2006.
  • S. Haddadin, A. De Luca, A. Albu-Schäffer. Robot Collisions: A Survey on Detection, Isolation, and Identification. IEEE T-RO, 2017.(流水线框架的权威综述)
  • ISO 10218-1/-2:2011 与 ISO/TS 15066:2016.(协作模式与人体接触限值附表)
  • S. Haddadin. Towards Safe Robots: Approaching Asimov’s 1st Law. Springer, 2014.(碰撞生物力学与有效质量分析)

评论