ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

状态观测器对比:高增益、滑模与扩张状态观测器的鲁棒性分析

状态观测器对比:高增益、滑模与扩张状态观测器的鲁棒性分析

简介:控制系统状态估计中常面临模型不精确、内部动态波动以及传感器噪声叠加等难题,高增益观测器、滑模观测器与扩张状态观测器是三类典型的先进设计。文档以经典Luenberger观测器为切入点,说明其依赖精确数学模型(A,B,C矩阵)的局限;随后分别推导高增益观测器的非线性增益构造、滑模观测器的切换控制策略,以及扩张状态观测器的状态扩展思想,并给出对应的估计误差方程与收敛性分析。文中提出了若干新型非线性增益函数,用于改善未知初始条件下的瞬态性能,同时结合仿真与实验数据,从稳态跟踪误差、瞬态响应、对模型不确定性和噪声的鲁棒性等多个维度,比较三类观测器在开环与闭环系统中的表现。资源共1个文件,为doc格式文档,压缩包大小约512KB,适合自动控制、非线性系统状态估计方向的本科生、研究生以及工程技术人员阅读参考。目前已有5909人学习下载,作为观测器设计对比的专题资料,可帮助读者快速掌握三种典型结构的原理差异、适用边界与参数权衡要点,为实际控制系统设计与故障检测提供选型思路。

1. 状态观测器选型从哪开始:模型不精确时的三条出路

控制方向做课程设计或毕设时,最常遇到的问题不是你不会设计观测器,而是你按课本设计的观测器一碰到真实对象就“失灵”。一个典型的场景是:被控对象是一台伺服电机,你按照铭牌参数和一次空载阶跃响应辨识出A、B、C矩阵,然后设计了一个Luenberger观测器,仿真里完美收敛。可一旦把负载接上、惯量变了、摩擦出来了,状态估计就开始飘,误差曲线的形状就像完全不认识这套系统。这份“几种状态观测器设计比较”的方案,要解决的核心问题就是:当模型不可信、扰动不可测、传感器还有噪声时,观测器到底还能不能给出可用的状态估计?它把高增益观测器、滑模观测器和扩张状态观测器放到同一个平台上,用同样的采样率、同样的噪声环境、同样的极点基准做对比,再通过开环测试、闭环测试和硬件测试三层验证把结论坐实。适合三类人参考:控制理论方向的毕设选型、状态观测器课设的仿真对比,以及在工作里被参数漂移折磨的工程师。

2. 三种观测器的设计原理:从误差收敛条件到参数选取

2.1 经典观测器的瓶颈在哪里

先看基线。对一个线性连续时不变系统,状态空间描述为 x_dot = A x + B u,输出为 y = C x,Luenberger 观测器的结构是:

x_hat_dot = A x_hat + B u + L(y - y_hat)

定义估计误差 e = x - x_hat,误差的动态方程就是:

e_dot = (A - L C) e

只要 A - L C 的全部特征值都落在左半平面,估计误差就会收敛到零,观测器的设计问题就变成了选择增益矩阵 L 的极点配置问题。这套理论本身没有任何问题,问题出在它的隐含前提上:你需要一个足够精确的 A、B、C 矩阵。实际系统里摩擦系数会变、惯量会变、驱动器的增益会漂移,也就是说A矩阵的真实值一直在变。模型一偏,特征值的位置就跟着偏,收敛性和收敛速度都无法保证。这就是为什么后来的研究者不再执着于把模型做准,而是反过来想:能不能设计一类观测器,让它在模型误差面前不那么敏感。

2.2 高增益观测器:用 1/ε 把误差压下去

高增益观测器(HGO)的思路很直接。考察一个二阶非线性系统,x1_dot = x2,x2_dot = f(x1,x2) + b0*u + w,y = x1。其中 f 是未建模动态,w 是未知扰动,b0 是控制通道的已知增益。HGO 的观测器方程写成:

x1_hat_dot = x2_hat + (g1/ε)(y - x1_hat) x2_hat_dot = f0(x1_hat,x2_hat) + b0*u + (g2/ε²)(y - x1_hat)

f0 是对 f 的标称近似,g1、g2 按 Hurwitz 多项式的系数选取,ε 是一个远小于 1 的正数。误差方程里会出现 (A - L(ε)C) 这种结构,当 ε 趋于零时,误差动态的收敛速度趋于无穷大,模型误差 δ 对估计的影响会被压制到与 ε 同阶。说白了就是用极大的增益把不确定性“盖过去”。代价也很直观:1/ε² 同时放大了量测噪声,ε 取得越小,跟踪越快,噪声毛刺也越大,所以在仿真里 ε 取 0.2、观测器极点放在 -4.2 rad/s 这类参数,就是在跟踪速度与噪声抑制之间找平衡点,而不是一味追求小 ε。

2.3 滑模观测器:用切换项硬扛扰动

滑模观测器(SMO)走的是另一条路。它不追求把误差通道压得多高,而是在观测器方程里显式加入一个切换项,用来补偿模型误差和扰动。典型结构是:

x1_hat_dot = x2_hat + h1(y - x1_hat) + γ1·sign(y - x1_hat) x2_hat_dot = f0(x1_hat,x2_hat) + b0*u + h2(y - x1_hat) + γ2·sign(y - x1_hat)

这里的 h1、h2 负责配置误差动态的线性部分,属于常规极点配置;γ1、γ2 是切换幅值,只要它们大于模型误差与扰动的上界 δ,滑模面就能建立,误差会被“拽”到滑模面上并保持。SMO 的鲁棒性来自切换项对不确定性的直接补偿,不需要精确知道 f 的表达式,只需要知道误差上界。这套机制的代价在硬件上会暴露得很清楚:sign 函数是不连续的,切换动作在实际离散采样下表现为高频小幅振动,也就是经典的“颤抖”问题。早期用 SMO 做非线性系统的鲁棒故障检测,对颤抖的容忍度比较高,因为故障检测只需要看残差是否越过阈值;但把它用到闭环控制里,颤抖会直接进入控制量。

2.4 扩张状态观测器:把扰动变成可观测的状态

扩张状态观测器(NESO/ESO)的设计逻辑和前两者有本质区别。HGO 和 SMO 再鲁棒,本质上仍需要一部分已知模型参与误差动态的构造;NESO 则直接把总扰动 f + w 定义成一个新的状态 z3,于是原来的二阶系统被扩张成三阶:

z1_dot = z2 z2_dot = z3 + b0*u z3_dot = a(t)

其中 a(t) 是总扰动的变化率,只需要假设它有界,不需要知道它的表达式。对这个扩张系统设计观测器,就得到:

z1_hat_dot = z2_hat + k1·g(e, α1, δ) z2_hat_dot = z3_hat + b0*u + k2·g(e, α2, δ) z3_hat_dot = k3·g(e, α3, δ)

这里 e = y - z1_hat,g 是非线性增益函数。这套方案的高明之处在于,它不再试图去辨识 f 的数学表达式,而是把 f + w 整体当作一个“需要实时观测的量”。z3 收敛后就是总扰动的实时估计,控制端可以直接拿它做前馈补偿。这就是它“天生鲁棒”的原因:模型依赖只有 b0 和控制通道增益,其余一概不管。代价也有,z3 的收敛是一个在线学习过程,初始阶段追得比 HGO 和 SMO 慢,后面专门有一章讲怎么处理这个瞬态误差问题。

观测器需要的模型信息鲁棒性来源典型代价
HGOf0 标称近似1/ε 高增益压制模型误差噪声放大,ε 需要折中
SMOf0 与误差上界 δ切换项直接补偿不确定性高频颤抖,硬件敏感
NESO仅需 b0 与控制通道增益扩张状态实时估计总扰动初始收敛慢,增益函数调参复杂

3. 仿真对比方案设计:三种工况与一致的公平基准

3.1 仿真平台与被控对象设定

做对比仿真最怕的一件事是“不公平”。如果三种观测器各用各的采样率、各用各的极点位置,那得出的结论没有任何说服力。所以这套方案在仿真阶段就把可比性当成第一原则:统一采用一套带无刷直流伺服系统的工业控制测试平台,位置输出 y 来自编码器,控制输入 u 是功率放大器上的电压指令,采样频率统一固定在 1 kHz,输出端人为叠加白噪声。仿真的对象模型是一个以电压为输入、位置为输出的二阶线性模型,参数从平台标定得到。为了公平起见,HGO 和 SMO 的观测器极点都放在 -4.2 rad/s,NESO 的增益系数 k1=12.5、k2=15 按极点配置路径选取,α 取 {1, 0.5, 0.25},δ 取 1e-3。这些参数对应的噪声敏感度大致相当,后续比较才能落在“谁对不确定性更鲁棒”上,而不是落在“谁参数调得狠”上。

观测器的实现方式也值得注意。仿真环境里直接用连续积分器搭三组观测器当然可以,但要做参数扫描和三工况切换,脚本化的离散递推更灵活,而且能保证三种观测器严格运行在同一个采样节奏上。以下是一段统一框架下的核心递推代码片段:

% 统一离散递推框架,采样周期 Ts = 1e-3,对应 1kHz 采样 % HGO 部分:f0 为标称模型,eps = 0.2 e = y(k) - x1_hat; x1_hat = x1_hat + Ts * (x2_hat + g1 / eps * e); x2_hat = x2_hat + Ts * (f0(x1_hat, x2_hat) + b0 * u(k) + g2 / eps^2 * e); % NESO 部分:fal 为非线性增益函数,alpha 取 0.5,delta 取 1e-3 e = y(k) - z1; z1 = z1 + Ts * (z2 + k1 * fal(e, alpha, delta)); z2 = z2 + Ts * (z3 + b0 * u(k) + k2 * fal(e, alpha, delta)); z3 = z3 + Ts * (k3 * fal(e, alpha, delta));

这段代码的设计逻辑是:先把三种观测器都转成“误差驱动 + 模型驱动”的统一形式,HGO 的增益结构里 g1/ε 和 g2/ε² 是固定的比例关系,NESO 的第三通道 z3 只由误差驱动,不直接接受 u 的作用——这是它能把总扰动估出来的关键。fal 函数在小误差附近表现为高增益,在大误差附近限制增益,具体定义在第 4 章展开。写代码时要注意 z3 的初值不要给太大,否则初始阶段会出现一个明显的瞬态尖峰。

3.2 开环测试:三种工况下的追踪误差对比

开环测试的目的是单独考察观测器本身的跟踪能力,先不牵扯控制器。测试输入是阶跃信号,观测器只负责估计,估计值不反馈回对象。三种工况分别是:标称工况、标称加 0.5 N·m 库伦摩擦、标称加 100% 惯性改变。从结果上看,标称工况下三种观测器的稳态精度差不多,白噪声环境下的敏感度也一致,说明参数对齐是有效的。最直观的差别出现在扰动工况里:加了库伦摩擦之后,HGO 和 SMO 的追踪误差明显增大,而 NESO 的误差曲线几乎没有变化,而且 z3 能精确收敛到未知动态和扰动的联合值上——这就是把不确定性当作状态去观测的威力。惯性改变 100% 的工况下,结论依然成立:NESO 表现最好,SMO 次之,HGO 对模型参数变化的容忍度最差。这个排序在开环和闭环里是一致的。

这里有一个容易被忽略的现象:NESO 在标称工况下需要更多时间才能进入稳态,因为它的 z3 通道要从零开始逼近未知动态,这个过程相当于在线“学习”模型偏差。很多人在第一次做对比时看到 NESO 初始阶段误差偏大就直接下结论说它不行,实际上这正是它不依赖模型知识所付出的代价。把这个时间差纳入考量,后面用非线性增益调整去缩小它,才是完整的对比逻辑。

3.3 闭环测试:隔离原理下的一致性验证

闭环测试比开环测试更接近工程实况。设计原则是“隔离原理”:先假设所有状态都可达,按极点配置设计一个状态反馈控制器,然后再把真实状态换回观测器的估计值。控制律采用 PD 形式,反馈增益按期望的闭环极点配置,NESO 多出来的 z3 通道当作扰动估计,直接以前馈形式进入控制量。这样设计的对比是公平的,因为控制器本身不区分是哪种观测器在给它供状态,区别全部体现在观测器提供信号的质量上。

仿真结果显示,标称情况下基于 NESO 和基于 SMO 的两套闭环系统输出差别不大,都达到了预期的控制精度。引入库伦摩擦或正弦形扰动之后,差异开始明显:基于 SMO 的控制系统出现了可观察的颤抖,控制量高频波动;基于 NESO 的控制系统则平稳地维持了输出精度。硬件测试结果进一步证实了这个差距——在实际伺服平台上,SMO 的颤抖问题更加突出,而 NESO 在瞬态响应和稳态精度上都更稳定。闭环这一轮对比说明的不只是“NESO 估计得准”,而是它的扰动估计通道可以直接转化为控制补偿,这是 HGO 和 SMO 结构上不具备的能力。

4. NESO 增益调整:未知初始条件下的三种增益函数对比

4.1 问题从哪来:初始条件未知时的瞬态误差

前面提到 NESO 的收敛过程是“在线学习”,这意味着如果初始条件给得不准,e = y - z1 一开始就很大,观测器需要在强烈的误差驱动下把三个状态同时拉回来。仿真中把初始位置设为 y(0)=10(rev)、速度初值为 0,观测器极点置于 8 rad/s,这时 z1 的追踪曲线会出现一个明显的瞬态超调,峰值误差远大于稳态误差。这个问题在实际工程中几乎无法回避:很多被控对象开机时位置和速度的真实值你并不知道,或者编码器初值没有标定。所以增益函数的选择不能只盯着稳态性能,必须考虑它在“误差很大”和“误差很小”两种状态下的不同行为。

4.2 三种增益函数的行为差异

非线性增益函数 g(e, α, δ) 的定义是这套设计的核心。标准形式是:当 |e| ≤ δ 时,g = e/δ^(1-α);当 |e| > δ 时,g = |e|^α·sign(e)。α 在 0 到 1 之间取值时,误差越小增益越大,误差越大增益越小——这样既能保证小误差下的快速收敛,又避免了大误差下增益失控。但实际测试发现,对于未知初始条件这种“一开始误差就很大”的场景,标准形式的收敛速度不够,瞬态误差峰值偏高。于是仿真里引入了负激励的变体:在误差过渡区间让增益函数保持更强的驱动幅值,而不是过早进入饱和区。对比结果显示,采用负激励方案后,瞬态追踪误差明显缩小,稳态精度也保持住了。三条增益曲线的行为差异说明了一个重要点:增益函数不是只能取 α 在 0-1 之间的标准形式,针对特定工况调整指数和偏移项,能得到完全不同的暂态表现。

4.3 参数整定的建议顺序

调增益函数参数最忌讳一次动多个变量。标准的做法分四步:第一步,先把 α 取为 1,也就是退化成线性增益,用极点配置方法确定 k1、k2、k3 的基础值;第二步,保持极点位置不动,逐步把 α 从 1 降到 0.5、0.25,观察稳态误差和噪声放大之间的权衡,找到误差收敛最快的区间;第三步,标定 δ,δ 决定了“小误差区域”的范围,传感器噪声大时 δ 要相应放大,否则观测器会把噪声当成误差持续放大;第四步,如果系统开机时初始条件不可知,再引入负激励变体,并在代码里预留初值输入接口。每一步对应一个可观察的现象,调完一步看一步的误差曲线,比对着公式盲目试参数要快得多。

5. 常见问题与避坑:增益噪声收敛与颤抖的五个翻车点

下面这五条来自仿真和硬件调试中的血泪经验,每一条都按“现象→原因→解决”的顺序写。

5.1 滑模观测器的颤抖在硬件上比仿真严重得多

现象:仿真里 SMO 追踪效果不错,误差曲线平滑正常;一上硬件测试平台,控制量曲线出现高频毛刺,伺服系统发出明显的噪声,位置跟随精度下降。现象:仿真里SMO追踪效果不错,误差曲线平滑正常;一上硬件测试平台,控制量曲线出现高频毛刺,伺服系统发出明显的噪声,位置跟随精度下降。

原因:sign 切换项本质是不连续控制,仿真里的连续模型掩盖了切换的离散本质。实际系统以 1kHz 采样运行时,滑模面变成了一个“抖振带”,切换动作在边界附近来回振荡,而且这个振荡会直接进入控制量。

解决:把 sign 换成带边界层的 sat(e/φ) 函数,φ 按传感器噪声水平标定;或者适当降低 γ2,但前提是 γ2 仍然大于模型误差上界 δ,否则鲁棒性会一起丢掉。硬件测试里 SMO 的颤抖问题几乎一定会出现,选型时要提前接受这个事实。

5.2 高增益观测器对噪声的放大容易被低估

现象:HGO 在标称工况下估计速度的毛刺明显大于其他两种观测器,把 ε 从 0.2 调到 0.1 之后,跟踪确实更紧了,但毛刺幅度几乎翻倍。

原因:HGO 误差通道的增益与 1/ε² 成正比,模型误差被压下去了,量测噪声也被同等倍率放大。白噪声本身是宽带信号,在高增益通道里几乎无法被过滤。

解决:不要把 ε 当成一个可以由你任意调小的参数,它是被传感器噪声水平“锁死”的。判断 ε 是否合理的标准不是“追踪快不快”,而是“三种观测器放在同一平台上噪声敏感度是否相当”。这也是这套对比方案里反复强调公平基准的原因。

5.3 NESO 初始收敛慢被误判为性能差

现象:阶跃响应起始阶段,NESO 的估计误差出现一个明显尖峰,持续时间比 HGO 和 SMO 都长,看起来像是“性能不好”。

原因:NESO 的 z3 通道要从零开始逼近总扰动,这个“学习”过程需要时间。尤其当初始条件未知时,三个状态同时起跳,误差通道在前几拍处于大误差驱动状态,瞬态峰值无法避免。

解决:有两种手段。一种是把 z3 初值设成对总扰动的合理估计,而不是从零开始;另一种是前 0.1s 用 α=1 的线性增益过渡,等误差进入小范围后再切回非线性增益。判断方案好坏时,要把瞬态尖峰和稳态精度分开看,不要拿一两个采样点的偏差否定整体设计。

5.4 仿真排名与硬件测试排名不一致

现象:仿真里 SMO 的排名虽然比 NESO 差,但差距不大;硬件测试里 SMO 的颤抖幅度远大于仿真预测,NESO 的收敛速度也实测偏慢。

原因:仿真模型把摩擦简化成了纯库伦摩擦,实际伺服系统里还有静摩擦和反向间隙;采样保持和编码器量化在仿真里也没被完整建模。这些因素对连续切换型的 SMO 影响格外大。

解决:从仿真到硬件之间加一步“固定步长离散仿真”,把执行器饱和、编码器量化、采样保持都加进模型里再跑一遍。如果这一步的结果和连续仿真差异明显,先排查建模缺口,不要急着怀疑观测器算法本身。

5.5 增益函数参数照搬必翻车

现象:直接照搬论文里的 α、δ、k 参数到自己平台上,NESO 要么稳态误差压不下去,要么噪声大得离谱,完全复现不了论文里的曲线。

原因:α、δ 不是物理常数,fal 函数的高增益区间与误差的量纲强相关。不同平台的传感器分辨率不同、输出单位不同,同样的 δ 值代表的“小误差范围”完全不同。

解决:按“噪声标定 δ、按带宽分配定 k、按稳态精度要求选 α”的次序重调参数,每次只动一个变量,记录误差曲线的变化。增益函数的调参不是玄学,本质上是把你平台的噪声水平映射到 δ 上,再用 k 去匹配期望的收敛带宽。

6. 验收与答辩:用一组对比数据把结论立住

验收这套设计不能只讲“仿真跑通了”,要按以下指标逐项打表:稳态追踪误差、瞬态超调、抗扰比、噪声敏感度、颤抖幅度,每个指标分别对应标称工况、摩擦工况和惯性变化工况。其中“抗扰比”的定义建议统一为扰动引入前后稳态误差的比值,“噪声敏感度”则用标称工况下估计速度毛刺的方差来度量。这样一组数据表比任何口头描述都有说服力。

验收指标定义测试工况
稳态追踪误差误差稳定后的均值标称 / 摩擦 / 惯性变化
瞬态超调初始瞬态误差峰值未知初始条件工况
抗扰比扰动前后稳态误差比值0.5N·m 库伦摩擦
噪声敏感度估计值白噪声方差标称叠加白噪声
颤抖幅度控制量高频分量幅值闭环控制工况

答辩时不要一上来就推导公式,先讲清楚三件事:一是公平基准怎么设计的,同一采样率、同一极点位置、同一白噪声序列;二是结论的层次,开环测试看观测器本身的跟踪能力,闭环测试看观测值与控制器结合后的整体表现,硬件测试验证结论的工程有效性;三是 NESO 为什么综合最优,一句话回答——它把不确定性变成了一个可观测、可补偿的状态,而不是去猜它的表达式。被问到“参数怎么选的”时,按第 4 章的整定顺序回答:先线性定极点,再非线性调稳态,最后标定 δ。被问到“SMO 有什么缺点”时,直接承认它的颤抖问题在硬件上无法回避,并用实测数据说明。从那以后我每次做观测器对比,都会强制把公平基准先写成一张核对表,参数没对齐之前不看任何一条性能曲线。这个方法救过我很多次答辩现场,希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进