机器人碰撞检测————能量动量观测器的降阶ESO形式
机器人碰撞检测————能量动量观测器的降阶ESO形式
一、问题描述
考虑这样一个系统:总能量或总动量记为 $V$,可以通过测量或计算得到;内部受到的能量或冲量记为 $ V_{inn} $ ,也可以测得;外部受到的功率或力记为$ \dot{V}_{ext}$,这是我们真正关心但无法直接测量的量。
系统的物理关系非常简单:
换句话说,总能量的变化率等于内部作用与外部作用之和。问题是:已知 $V$(可测)和 $\dot{V}_{inn}$(可测),如何估计 $\dot{V}_{ext}$?
这个问题看起来很简单——既然 $\dot{V}_{ext} = \dot{V} - \dot{V}_{inn}$,那直接对 $V$ 求导再减掉 $\dot{V}_{inn}$ 不就行了?
问题在于:实际系统中 $V$ 的测量总是带有噪声的,直接对噪声信号做数值微分会把噪声放大到不可接受的程度。我们需要的是动态观测器——用一个动态系统来“过滤”出我们想要的信号,而不是简单地对测量值求导。
二、扩张状态观测器(ESO)的基本思想
扩张状态观测器的核心思想非常直接:把系统中不确定的扰动项当作一个新的状态变量,与原系统状态一起构成增广状态空间,然后对这个增广系统设计观测器。
对于我们的问题,设状态向量为:
其中 $x2 = \dot{V}\{ext}$ 就是我们要观测的外部量。系统的状态方程为:
其中 $u = \dot{V}_{inn}$ 是已知输入。输出方程为:
这里假设 $\dot{V}_{ext}$ 的变化率(即二阶导数)为零——也就是说,我们认为外部作用在短时间内是常数或缓慢变化的。这是一个典型的常值扰动模型。如果外部作用变化较快,可以把 $x_2$ 的导数建模为某个有界噪声,这会在后面卡尔曼滤波的框架中得到更自然的处理。
ESO 的标准形式是:
其中 $\hat{y} = C\hat{\mathbf{x}}$,$L$ 是观测器增益矩阵。展开写就是:
这就是一个最简单的二阶扩张状态观测器。增益 $l_1$ 和 $l_2$ 的选择决定了观测器的收敛速度和抗噪性能。
三、龙伯格观测器:从极点配置到观测器设计
把上面的 ESO 写成更紧凑的矩阵形式,就是标准的龙伯格观测器(Luenberger Observer)。
对于系统:
龙伯格观测器的形式为:
其中 $L$ 是观测器增益矩阵。观测误差 $\tilde{\mathbf{x}} = \mathbf{x} - \hat{\mathbf{x}}$ 的动态为:
只要 $(A - LC)$ 是 Hurwitz 稳定的(即所有特征值具有负实部),观测误差就会指数收敛到零。
对于我们的二阶系统:
设 $L = [l_1, l_2]^T$,则:
特征多项式为:
如果我们希望观测器的极点位于 $- \omega$(临界阻尼,无振荡),则令:
因此:
这样,通过调节一个参数 $\omega$,我们就可以控制观测器的响应速度。$\omega$ 越大,响应越快,但对噪声越敏感。
龙伯格观测器的设计是确定性的——它假设模型是精确的,噪声可以忽略。增益 $L$ 是通过极点配置人为确定的,完全不考虑系统中存在的随机噪声。
四、降阶观测器:只估计未知的部分
在上面的 ESO/龙伯格观测器中,我们同时估计了 $x1 = V$ 和 $x_2 = \dot{V}\{ext}$ 两个状态。但 $V$ 本身是可以直接测量的,为什么要浪费计算资源去“估计”一个已知量呢?
降阶观测器(Reduced-Order Observer)的思想就是:只估计那些不能直接测量的状态。
对于我们的系统,$x1 = V$ 已知,只需要估计 $x_2 = \dot{V}\{ext}$。为了推导降阶观测器,我们引入一个辅助变量来避免对 $V$ 的直接微分。
设 $\hat{x}_2$ 是 $x_2$ 的估计值。引入辅助变量:
其中 $l > 0$ 是观测器增益。对 $z$ 求导:
由系统方程,$\dot{V} = \dot{V}_{inn} + x_2 = u + x_2$。而观测器的设计使得 $\dot{\hat{x}}_2 = l(V - \hat{x}_1)$,其中 $\hat{x}_1 = V$(因为 $V$ 可直接测量,所以 $\hat{x}_1 = V$)。所以:
但这里出现了 $x_2$ 这个未知量。换一种推导方式:降阶观测器的标准设计方法是把可测状态 $x_1$ 当作已知输入来处理。
更直接的推导如下。由系统方程:
如果 $x_1$ 可直接测量,那么 $x_2 = \dot{x}_1 - u$。但直接对 $x_1$ 求导会放大噪声。我们用辅助变量 $z = \hat{x}_2 - l x_1$ 来回避微分。
对 $z$ 求导:
降阶观测器的设计使得 $\dot{\hat{x}}_2 = -l\hat{x}_2 + l\dot{x}_1 - lu$(这个形式可以从上一节的全阶观测器通过代数变换得到)。代入:
这个推导有些繁琐。更简洁的方式是直接写出降阶观测器的标准形式。对于可测状态 $x_1$ 和待估状态 $x_2$,降阶观测器为:
验证一下:对 $\hat{x}_2 = z + l x_1$ 求导:
所以:
在拉普拉斯域:
这是一个一阶低通滤波器。降阶观测器只有一个可调参数 $l$,它决定了滤波器的截止频率。与全阶观测器相比,降阶观测器阶次更低、计算量更小、相位滞后也更小。
将 $\hat{x}_2 = z + l x_1$ 和 $\dot{z} = -lz - l^2 x_1 - lu$ 合并,还可以得到降阶观测器的一个非常优雅的积分形式:
这个形式揭示了一个重要的物理直觉:括号里的积分项 $\int (u + \hat{x}_2) dt$ 是利用“已知内部作用”和“当前估计的外部作用”重构出的 $x_1$ 的预测值。观测器本质上是在做模型预测误差的比例反馈——预测值低于测量值时增大估计,高于测量值时减小估计。
五、离散化实现
在实际的数字控制系统中,观测器需要在离散时间下实现。最直接的离散化方法是前向欧拉法(Forward Euler),其映射关系为 $s = (z - 1)/T_s$,其中 $T_s$ 是采样周期。
对于降阶观测器的积分形式:
离散化后的迭代步骤为:
第一步:更新积分器(预测值):
第二步:计算当前时刻的估计值:
其中 $V{meas}$ 是测量/计算得到的 $V$,$u = \dot{V}\{inn}$ 是已知的内部变化率。
这种离散化方式属于显式欧拉法,计算简单直接,没有代数环问题。但需要注意稳定性条件:离散系统的极点为 $z_p = 1 - lT_s$,为了保证稳定(极点必须在单位圆内),必须满足 $0 < lT_s < 2$。工程上通常取 $lT_s \leq 0.1 \sim 0.2$ 以保证单调收敛。
六、DLR碰撞检测中的能量观测器与动量观测器
De Luca、Albu-Schäffer、Haddadin 等人在 2006 年提出了基于能量和广义动量的碰撞检测方法,后来在 2017 年的综述中做了系统性的总结和扩展。这些方法的核心思想与上面推导的降阶观测器完全一致,但针对机器人动力学做了具体的物理实现。
能量观测器
对于机器人系统,总能量 $E$ 为动能与势能之和:
在无碰撞情况下,能量变化率等于电机输入功率:
当发生碰撞时,外部碰撞力矩 $\tau_{ext}$ 会额外做功:
能量观测器的标量残差信号定义为:
其动态方程为:
这是一个一阶低通滤波器,由碰撞功率 $P{ext} = \dot{q}^T\tau{ext}$ 驱动。在自由运动时 $r = 0$,碰撞时 $r$ 以时间常数 $1/k_O$ 指数上升。
能量观测器的局限性在于:当机器人静止时($\dot{q} = 0$),碰撞力矩不会产生功率,因此无法被检测到;此外,当碰撞力与接触点速度方向垂直时($P_{ext} = 0$),也无法检测。
动量观测器
为了克服能量观测器的局限性,De Luca 等人提出了基于广义动量的观测器。
机器人的广义动量定义为:
其动态方程为:
其中 $\alpha(q,\dot{q}) = C^T(q,\dot{q})\dot{q} - g(q)$ 是可以根据模型计算出的已知项。
动量观测器的残差向量定义为:
在理想条件下,残差的动态为:
写成传递函数形式(分量-wise):
关键优势:动量观测器与能量观测器有本质区别。
第一,动量观测器是向量形式的,每个关节的残差分量只对应对应关节的外部力矩,实现了完全解耦——这是广义动量动态方程的核心性质。
第二,动量观测器不需要计算惯性矩阵的逆,也不需要加速度信息,避免了数值微分带来的噪声放大。
第三,动量观测器在机器人静止时也能检测碰撞——因为广义动量 $p$ 的动态方程中包含了重力项和科氏力项,即使 $\dot{q} = 0$,外部力矩也会直接反映在 $\dot{p}$ 中。
第四,动量观测器的残差具有隔离能力——如果碰撞发生在第 $i$ 个连杆上,那么残差向量 $r$ 的最后 $n-i$ 个分量将恒为零,从而可以定位碰撞发生的连杆。
正是由于这些优势,动量观测器被广泛应用于实际机器人系统中,包括 KUKA LBR iiwa 和 FRANKA EMIKA 等商业产品。
从我们前面推导的通用框架来看,DLR 的动量观测器正是将我们的通用变量做了如下映射:
| 通用变量 | 动量观测器 |
|---|---|
| $V$(可测总量) | 广义动量 $p = M\dot{q}$ |
| $\dot{V}_{inn}$(已知内部输入) | $\tau - \alpha(q,\dot{q})$ |
| $\dot{V}_{ext}$(待观测外部量) | 碰撞力矩 $\tau_{ext}$ |
| 增益 $l$ | 对角增益矩阵 $K_O$ |
代入通用公式 $\hat{x}_2 = l(V - \int(u + \hat{x}_2)dt)$,得到的就是 DLR 的动量观测器:
七、卡尔曼滤波:从确定到随机的最优扩展
上面讨论的所有观测器——ESO、龙伯格观测器、降阶观测器、DLR 的动量和能量观测器——都是确定性的。它们假设模型是精确的,噪声是可以忽略的,增益是通过极点配置或经验确定的。
卡尔曼滤波(Kalman Filter)则完全不同。它将噪声 explicitly 纳入模型,并通过最小均方误差准则自动计算最优增益。
对于我们的系统,加入过程噪声 $w$ 和量测噪声 $v$:
其中 $w$ 代表 $\dot{V}_{ext}$ 的随机波动(过程噪声),$v$ 代表 $V$ 测量中的噪声。
离散化后(采样周期 $T_s$):
其中:
卡尔曼滤波的递推公式分为两步。
预测步:
更新步:
其中 $Q = E[\mathbf{w}\mathbf{w}^T]$ 是过程噪声协方差,$R = E[v^2]$ 是量测噪声协方差。
最终,我们要观测的外部量就是:
卡尔曼滤波与龙伯格观测器的本质区别
从代数结构上看,在稳态条件下($Pk$ 收敛到常数),卡尔曼增益 $K_k$ 会收敛到常值 $K\infty$,此时卡尔曼滤波与龙伯格观测器在形式上完全一致——都是 $\hat{x}_{k+1} = A\hat{x}_k + Bu_k + L(y_k - H\hat{x}_k)$。唯一的区别在于增益矩阵 $L$ 的计算方式。
但这个“唯一的区别”带来了本质的不同:
| 维度 | 龙伯格观测器 | 卡尔曼滤波 |
|---|---|---|
| 增益计算 | 极点配置(人为设定) | 由 $Q/R$ 自动计算(最优) |
| 增益特性 | 固定常数 | 时变(启动快、稳态平滑) |
| 噪声处理 | 被动抑制 | 显式建模与最优权衡 |
| 设计依据 | 期望响应速度 | 噪声统计特性 |
| 输出信息 | 仅状态估计 | 状态估计 + 估计协方差 |
龙伯格观测器的增益是固定的,由设计者通过极点配置人为确定。而卡尔曼滤波的增益是时变的——启动时协方差 $P$ 较大,增益自动增大(快速跟踪);稳态后 $P$ 收敛,增益自动减小(平滑滤波)。这种“先快后慢”的智能调节是固定增益观测器无法实现的。
更重要的是,卡尔曼滤波显式地建模了噪声的统计特性,并通过 $Q/R$ 的比值在响应速度和噪声抑制之间做出数学最优的权衡。而龙伯格观测器只是靠低通特性被动地抑制噪声。
降阶卡尔曼滤波
既然降阶观测器比全阶观测器更高效,那么自然也存在降阶卡尔曼滤波器。
对于我们的系统,$x1 = V$ 可直接测量,只需要估计 $x_2 = \dot{V}\{ext}$。降阶卡尔曼滤波将状态方程缩减为一维:
伪测量方程为:
但为了避免直接对 $y$ 求导,引入辅助变量 $z = \hat{x}_2 - l y$。
降阶卡尔曼滤波的递推公式为:
协方差与增益更新:
辅助变量更新:
状态重构:
离散化后(前向欧拉):
降阶卡尔曼滤波的计算量远小于全阶卡尔曼滤波(协方差从 $2\times2$ 矩阵退化为了标量),且物理意义清晰:$Q/R$ 的比值决定了滤波器的带宽——比值越大响应越快,比值越小滤波越平滑。稳态时,$l \to \sqrt{Q/R}$,这与龙伯格降阶观测器的固定增益 $l$ 形成对应,但前者是由噪声统计自动算出的最优值。
八、总结
从最开始的简单问题——已知总能量 $V$ 和内部输入 $\dot{V}_{inn}$,估计外部作用 $\dot{V}_{ext}$——我们一步步构建了完整的观测器理论框架:
扩张状态观测器:把待估计的外部量增广为系统状态,设计观测器同时估计所有状态。
龙伯格观测器:ESO 的矩阵形式,通过极点配置确定增益。
降阶观测器:既然 $V$ 可直接测量,只估计未知的 $\dot{V}_{ext}$,减少计算量。
离散化实现:前向欧拉法把连续观测器变为可编程的迭代公式。
DLR 能量/动量观测器:将通用框架应用到机器人动力学中,能量观测器提供标量检测,动量观测器提供解耦的向量估计和碰撞隔离能力。
卡尔曼滤波:将噪声 explicitly 纳入模型,自动计算最优时变增益。
降阶卡尔曼滤波:结合降阶观测器的高效和卡尔曼滤波的最优性。
这一系列方法的演进脉络清晰:从确定性的固定增益观测器到随机最优的时变增益滤波器,从全阶估计到降阶估计,核心始终围绕着如何从含噪测量中提取出我们真正关心的信号。DLR 的动量观测器之所以成为工业标准,正是因为它巧妙地利用了广义动量的物理特性,在无需加速度信息和惯性矩阵逆运算的前提下,实现了解耦、快速、可隔离的碰撞检测——而这背后,正是我们最初那个简单物理关系 $\dot{V} = \dot{V}_{inn} + \dot{V}_{ext}$ 的不断深化与拓展。
