4. 自校正调节器(STR)基础:原理与结构

好,咱们进入自适应控制里最经典的一个分支——自校正调节器,简称STR。说实话,我刚接触这个概念时,觉得它挺玄乎的。什么叫「自校正」?难道控制器还能自己改自己?

嗯,还真能。而且它改得还挺聪明。

4.1 什么是自校正调节器?

先给你一个直观的画面。你设计了一个PID控制器,调好参数,系统跑得挺好。突然有一天,负载变了——比如机械臂末端抓了个重物。原来的PID参数就不灵了,系统开始抖,甚至发散。

传统做法是什么?停机,重新整定参数。但STR不这么干。它一边运行,一边在线辨识系统的模型,然后根据模型自动更新控制器参数。说白了,它把「建模」和「控制」揉在了一起,形成一个闭环。

核心思想:STR = 在线参数估计 + 控制器设计准则

它不需要你事先知道精确的数学模型。系统变,它也跟着变。

我在一个伺服电机项目里遇到过这种情况。电机空载时响应很漂亮,但一加上惯性负载,速度就出现低频振荡。当时我手动调参数调了一下午,后来换成STR,它自己就收敛到了合适的增益。说实话,那感觉挺爽的。

4.2 STR的基本结构

STR的结构其实不复杂。我习惯把它拆成三个模块来看:

  1. 被控对象——就是你的电机、液压缸、机械臂,随便什么。
  2. 在线参数估计器——实时估算对象的模型参数。
  3. 控制器设计模块——根据估计出的参数,重新计算控制器参数。

这三者形成一个循环:对象输出 → 估计器更新模型 → 设计模块更新控制器 → 控制器输出新的控制量 → 对象响应。

你想想看,这就像你一边开车,一边根据路况调整方向盘的手感。路滑了,手感变紧;路干了,手感变松。STR干的就是这个事。

被控对象 参数估计器 控制器设计 控制器 输出 y(t) 输出 y(t) 参数 θ̂ 控制器参数 控制量 u(t)

这张图我建议你多看两眼。它把STR的骨架画出来了。实际项目中,你只要把这三个模块填上具体的算法,STR就能跑起来。

4.3 在线参数估计:STR的「眼睛」

STR能不能工作,关键看参数估计准不准。我常用的方法是递推最小二乘法,简称RLS。为什么用它?因为它计算量小,适合实时系统。

RLS的基本思路是这样的:每来一个新数据点,就用它修正一下当前的参数估计值。公式如下:

θ̂(k) = θ̂(k-1) + K(k) * [y(k) - φᵀ(k)θ̂(k-1)]

其中:
θ̂(k) —— 当前时刻的参数估计向量
K(k)  —— 增益矩阵(决定修正速度)
y(k)  —— 当前输出测量值
φ(k)  —— 回归向量(包含历史输入输出)

说白了,就是拿「预测误差」去修正参数。预测对了,修正量就小;预测错了,修正量就大。

我的经验:RLS里有个遗忘因子λ,取值范围0.95~0.99。λ越小,算法对最新数据越敏感,适合快速变化的系统。但λ太小,估计值容易抖动。我一般从0.98开始试,效果不好再调。

4.4 控制器设计:STR的「大脑」

参数估计出来了,下一步就是设计控制器。STR里最常用的设计方法有两种:

方法 原理 适用场景
极点配置 根据估计的模型,计算控制器参数,使闭环极点落在期望位置 对动态响应有明确要求的系统
最小方差控制 最小化输出方差,让输出尽可能接近设定值 对稳态精度要求高的系统

我个人更偏爱极点配置。为什么?因为它直观。你告诉系统:「我希望闭环响应像二阶系统,阻尼比0.7,自然频率5 rad/s。」然后STR就帮你算出来控制器参数。这在运动控制里特别好用。

我曾经在一个位置伺服系统里用过极点配置。负载从空载到满载变化时,系统响应几乎没变。这就是STR的威力——它把变化「吃」掉了。

4.5 一个简单的STR实现流程

光讲理论不过瘾,我给你一个实际的操作步骤。假设你有一个直流电机速度控制系统:

  1. 初始化:设定模型阶次n=2,遗忘因子λ=0.98,初始参数θ̂(0)=[0,0,0]ᵀ
  2. 采集数据:读取当前速度y(k)和上一时刻控制量u(k-1)
  3. 构造回归向量:φ(k) = [-y(k-1), -y(k-2), u(k-1)]ᵀ
  4. 计算预测误差:e(k) = y(k) - φᵀ(k)θ̂(k-1)
  5. 更新参数:用RLS公式计算θ̂(k)
  6. 设计控制器:根据θ̂(k)和期望极点位置,计算控制器参数
  7. 计算控制量:u(k) = 控制器输出
  8. 重复:k = k+1,回到第2步

你看,就这么简单。每个采样周期跑一遍,系统就能自适应。

注意:STR启动初期,参数估计还不准,控制器输出可能比较激进。我建议加一个「软启动」阶段——前几十个采样周期用固定参数,等估计值稳定后再切换到自适应模式。否则,系统可能一开始就发散。

4.6 STR的局限与应对

STR不是万能的。我踩过几个坑,分享给你:

  • 持续激励问题:如果系统一直处于稳态,输入输出变化太小,参数估计会失效。解决办法是注入一个小的激励信号,比如叠加一个高频低幅的抖动。
  • 模型阶次选择:阶次选低了,模型不准;选高了,计算量大,还容易过拟合。我一般先用阶次测试法,从低阶开始试,直到残差不再明显下降为止。
  • 数值稳定性:RLS的协方差矩阵可能随时间变得病态。我习惯用UD分解或平方根滤波来保证数值稳定。

我曾经在一个液压系统中吃过亏。系统长时间处于恒压状态,RLS的参数估计完全跑偏了。后来我加了一个小幅的伪随机信号作为激励,问题就解决了。嗯,这个教训挺深刻的。

4.7 小结

STR的核心就三件事:在线辨识、控制器重设计、闭环运行。它让控制器有了「自适应」的能力,特别适合负载变化频繁的运动控制系统。

你如果现在要上手STR,我建议先搭一个仿真环境,用简单的二阶对象试试。把RLS和极点配置写出来,看看参数收敛过程。等仿真跑通了,再往实际硬件上移植。这样风险最小。

一句话总结:STR = 递推参数估计 + 在线控制器设计。它让系统自己学会应对变化。


公众号:蓝海资料掘金营,微信deep3321