控制论
动态系统
控制论要处理的对象:动态系统。
未来由现在、动作和扰动共同决定
\[x_{t+1} = f(x_t, u_t, w_t)\]其中:
- $x_t$ 是系统状态;
- $u_t$ 是控制动作;
- $w_t$ 是外部扰动;
- $x_{t+1}$ 是下一时刻状态。
观测不是状态
如果我们不能直接看到状态,只能看到观测值,则有:
\[y_t = g(x_t, v_t)\]其中:
- $y_t$ 是观测;
- $v_t$ 是观测噪声。
开环与闭环
例子:加热一个房间。
开环控制
可以规定:
每天晚上 8 点到 10 点,暖气固定开到 70%。
系统不管房间现在是冷是热。 今天外面 5°C,暖气开 70%。 明天外面 -10°C,暖气还是开 70%。 房间里已经有很多人,暖气仍然开 70%。
开环控制简单、可预测、不容易被测量噪声扰动。 但没有纠错。
闭环控制
使用恒温器:
1
2
3
目标温度:24°C
如果当前温度低于 24°C,就加热
如果当前温度高于 24°C,就停止加热
结构:
1
2
3
目标温度 → 误差 → 控制器 → 暖气 → 房间温度
↑ |
└────────── 温度计反馈 ──────────┘
闭环系统可以抵抗扰动。
- 外面突然变冷,房间温度下降,控制器会自动加热。
- 太阳出来,房间升温,控制器会减少加热。
反馈让系统有了自我修正能力。
但反馈也带来危险。温度计有延迟,暖气有惯性。
如果控制器设计不合理,房间温度可能在 21°C 和 27°C 之间来回震荡,而非稳定在目标 24°C。
比例控制:为什么“纠错太猛”会出错
考虑最简单的离散系统:
\[y_{t+1} = y_t + u_t\]目标是把 $y_t$ 控制到 0。
定义误差:
\[e_t = 0 - y_t = -y_t\]比例控制器是:
\[u_t = K_p e_t = -K_p y_t\]代入系统:
\[y_{t+1} = y_t - K_p y_t\]所以:
\[y_{t+1} = (1-K_p)y_t\]要让 $y_t \to 0$,必须有:
\[|1-K_p| < 1\]因此:
\[0 < K_p < 2\]控制不是越强越好。增益太大,系统会振荡,甚至发散。
| $K_p$ | 闭环系数 $1-K_p$ | 行为 |
|---|---|---|
| 0.2 | 0.8 | 慢慢收敛 |
| 0.8 | 0.2 | 快速收敛 |
| 1.0 | 0 | 一步到位 |
| 1.5 | -0.5 | 振荡收敛 |
| 2.0 | -1 | 等幅振荡 |
| 2.5 | -1.5 | 振荡发散 |
开车例子。车偏左一点,往右打方向。
- 打得太小,车回不来;
- 打得合适,车回到车道中央;
- 打得太猛,车冲到右边,然后又往左猛打,车辆开始摆动。
控制器的任务:让闭环系统稳定地消除误差。
延迟
在控制系统中,我们通常认为负反馈能带来稳定。然而,当系统中存在时间延迟(Delay)时,同样的负反馈机制却可能引发持续的振荡甚至发散。
有一步延迟的系统
现实中,传感器读数或执行器动作往往有延迟。假设引入一步延迟,控制器只能看到上一时刻的状态 $y_{t-1}$:
\[u_t = -K y_{t-1}\]此时,系统的动态方程变为二阶差分方程:
\[y_{t+1} = y_t - K y_{t-1}\]取增益 $K=1$,并设定初始值 $y_0 = 1, y_1 = 1$。代入方程 $y_{t+1} = y_t - y_{t-1}$ 进行迭代:
| 时刻 $t$ | 计算过程 | 状态 $y_t$ |
|---|---|---|
| 0 | (初始值) | $1$ |
| 1 | (初始值) | $1$ |
| 2 | $y_2 = y_1 - y_0 = 1 - 1$ | $0$ |
| 3 | $y_3 = y_2 - y_1 = 0 - 1$ | $-1$ |
| 4 | $y_4 = y_3 - y_2 = -1 - 0$ | $-1$ |
| 5 | $y_5 = y_4 - y_3 = -1 - (-1)$ | $0$ |
| 6 | $y_6 = y_5 - y_4 = 0 - (-1)$ | $1$ |
| 7 | $y_7 = y_6 - y_5 = 1 - 0$ | $1$ |
观察: 系统并没有收敛到 0,而是陷入了周期为 6 的持续震荡。
生活中的类比:洗澡调水温
想象你在调节淋浴水温:
- 水太冷,你拧大热水阀门。
- 延迟存在:热水需要几秒才能流到喷头,你暂时感觉不到变化。
- 你以为没效果,于是继续拧大。
- 几秒后,滚烫的热水突然涌出。
- 你惊慌地拧大冷水阀门。
- 又过了几秒,冰水袭来……
延迟让控制器基于过时的信息行动。原本的“纠错动作”因为滞后,变成了新的“错误来源”。
状态空间
将系统状态扩展为二维向量: \(x_t = \begin{bmatrix} y_t \\ y_{t-1} \end{bmatrix}\)
根据动态方程 $y_{t+1} = y_t - K y_{t-1}$,下一时刻的状态为: \(x_{t+1} = \begin{bmatrix} y_{t+1} \\ y_t \end{bmatrix} = \begin{bmatrix} y_t - K y_{t-1} \\ y_t \end{bmatrix}\)
这可以写成矩阵形式 $x_{t+1} = A_K x_t$,其中系统矩阵 $A_K$ 为: \(A_K = \begin{bmatrix} 1 & -K \\ 1 & 0 \end{bmatrix}\)
系统的稳定性完全由矩阵 $A_K$ 的特征值 $\lambda$ 决定:若所有 $|\lambda| < 1$,系统收敛(稳定)。
案例分析:当 K=1 时
系统矩阵为: \(A = \begin{bmatrix} 1 & -1 \\ 1 & 0 \end{bmatrix}\)
求解特征方程 $\det(\lambda I - A) = 0$:
\[\det \begin{bmatrix} \lambda - 1 & 1 \\ -1 & \lambda \end{bmatrix} = \lambda(\lambda - 1) + 1 = \lambda^2 - \lambda + 1 = 0\]解得特征值: \(\lambda = \frac{1 \pm i\sqrt{3}}{2}\)
计算模长: \(|\lambda| = \sqrt{\left(\frac{1}{2}\right)^2 + \left(\frac{\sqrt{3}}{2}\right)^2} = \sqrt{\frac{1}{4} + \frac{3}{4}} = 1\)
解释: 由于特征值的模长恰好为 1,且为复数,系统在相平面上做旋转运动而不衰减。这解释了前面观察到的周期性振荡序列。
稳定条件
对于增益 $K$,特征方程为:
\[\lambda^2 - \lambda + K = 0\]根据离散系统的 Jury 稳定性判据(或直接求解),要使所有特征值落在单位圆内 ($|\lambda| < 1$),增益 $K$ 必须满足:
\[0 < K < 1\]对比
| 系统类型 | 动态方程 | 稳定条件 | 说明 |
|---|---|---|---|
| 无延迟 | $y_{t+1} = (1-K)y_t$ | $0 < K < 2$ | 允许较大的增益 |
| 一步延迟 | $y_{t+1} = y_t - K y_{t-1}$ | $\mathbf{0 < K < 1}$ | 稳定区间减小 |
延迟降低了系统能容忍的反馈增益区间。同一个 $K$ 值,在无延迟系统中可能非常稳定,但在有延迟系统中可能导致振荡 ($K=1$) 甚至发散 ($K>1$)。
基础模型:标准二阶闭环系统
弹簧-质量-阻尼系统
考虑一个经典的机械振动系统:
- $m$:质量
- $c$:阻尼系数
- $k$:弹簧刚度
- $x(t)$:位移
- $F(t)$:外力输入
根据牛顿第二定律: \(m\ddot{x} + c\dot{x} + kx = F(t)\)
对两边进行拉普拉斯变换(假设初始条件为零): \(ms^2X(s) + csX(s) + kX(s) = F(s)\)
整理得: \(X(s)(ms^2 + cs + k) = F(s)\)
传递函数为: \(G(s) = \frac{X(s)}{F(s)} = \frac{1}{ms^2 + cs + k}\)
将分母除以 $m$: \(G(s) = \frac{1/m}{s^2 + \frac{c}{m}s + \frac{k}{m}}\)
定义:
- 自然频率:$\omega_n = \sqrt{\frac{k}{m}}$
- 阻尼比:$\zeta = \frac{c}{2\sqrt{km}} = \frac{c}{2m\omega_n}$
代入后得到: \(G(s) = \frac{1/m}{s^2 + 2\zeta\omega_n s + \omega_n^2}\)
为了使稳态增益为1(单位阶跃响应最终达到1),分子也乘以 $\omega_n^2$: \(T(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2}\)
传递函数
标准二阶系统的传递函数描述了输入 $R(s)$ 到输出 $Y(s)$ 的动态关系:
\[T(s) = \frac{Y(s)}{R(s)} = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2}\]它描述了一个具有惯性和阻尼的对象,如何响应外部指令。
| 参数 | 符号 | 名称 | 物理含义 | 直观理解 |
|---|---|---|---|---|
| 自然频率 | $\omega_n$ | Natural Frequency | 系统固有的“运动速度” | $\omega_n$ 越大,系统反应越快。 (如:弹簧越硬,振动越快) |
| 阻尼比 | $\zeta$ | Damping Ratio | 系统的“刹车力度” | $\zeta$ 决定振荡程度。 (如:减震器越强,晃动越少) |
极点向量(令分母为0):
\[s_{1,2} = -\zeta\omega_n \pm j\omega_n\sqrt{1-\zeta^2}\]在复平面上,极点向量与负实轴的夹角为 $\theta$。
\[\cos \theta = \frac{\text{邻边}}{\text{斜边}} = \frac{\zeta\omega_n}{\omega_n} = \zeta\] \[s_{1,2} = -\cos \theta \omega_n \pm j \sin \theta \omega_n\]阻尼的四种状态
阻尼描述系统回到目标时是否“刹得住”。
- $\zeta = 0$ (无阻尼):永远震荡。极点在虚轴上 ($\pm j\omega_n$)。
- $0 < \zeta < 1$ (欠阻尼):会震荡、最终收敛稳定。极点在左半平面,有虚部。
- $\zeta \approx 0.7$ (欠阻尼,适中):小幅震荡、收敛较快。
- $\zeta = 1$ (临界阻尼,最佳):最快回到原位且不晃动。极点是两个重合的实根。
- $\zeta > 1$ (过阻尼):缓慢收敛。极点是两个不同的实根。
幅频特性
在频域中,我们考察系统对正弦输入 $r(t)=\sin(\omega t)$ 的响应。 输出仍为同频率正弦波,但幅值 $A(\omega)$ 和相位 $\phi(\omega)$ 发生改变:
\[y(t) = A(\omega)\sin(\omega t + \phi(\omega))\]幅频曲线即绘制 $A(\omega) = |T(j\omega)|$:
\[|T(j\omega)| = \frac{\omega_n^2}{\sqrt{(\omega_n^2 - \omega^2)^2 + (2\zeta\omega_n\omega)^2}}\](通常再转换为 dB 表示)
| 频段 | 条件 | 幅值表现 | 物理含义 |
|---|---|---|---|
| 低频区 | $\omega \ll \omega_n$ | $\approx 1$ $(0 \text{ dB})$ | 完全跟随 系统有足够时间响应慢变化。 |
| 谐振区 | $\omega \approx \omega_n$ | 峰值 (若 $\zeta$ 小) | 共振放大 输入节奏踩中系统固有节奏,能量较大。 |
| 高频区 | $\omega \gg \omega_n$ | $\to 0$ (急剧衰减) | 滤波抑制 惯性导致系统跟不上快速变化。 |
标准二阶系统是一个低通滤波器。
带宽 ($\omega_{bw}$)
定义:幅值下降到 $-3\text{ dB}$ (即原幅值的 $0.707$ 倍) 时的频率。
\[|T(j\omega_{bw})| = \frac{1}{\sqrt{2}} \approx -3\text{ dB}\]- 带宽内:信号基本能无损通过。
- 带宽外:信号被显著削弱。
相频特性:延迟在频域的体现
幅频曲线回答的是输出变大了还是变小了,相频曲线回答的是输出比输入晚了多少拍?
对于线性稳定系统,若输入为 $r(t)=\sin(\omega t)$,输出为:
\[y(t) = A(\omega)\sin(\omega t + \phi(\omega))\]- $\phi(\omega) = \angle T(j\omega)$:即相频特性。
- $\phi < 0$:相位滞后(Lag)。输出慢于输入(绝大多数物理系统)。
- $\phi > 0$:相位超前(Lead)。输出快于输入(较少见,通常需特殊控制器产生)。
相位角 $\phi$(弧度或角度)可以直接换算为时间延迟 $\tau$。
\[\tau = \frac{|\phi|}{\omega} \quad (\phi \text{ 为弧度})\]或者使用角度:
\[\tau = \frac{|\phi_{deg}|}{360^\circ} \times T = \frac{|\phi_{deg}|}{360^\circ} \times \frac{2\pi}{\omega}\]- $90^\circ$ 滞后 $\rightarrow$ 晚了 1/4 个周期。
- $180^\circ$ 滞后 $\rightarrow$ 晚了 半个周期(完全反相)。
例子: 若 $\omega = 10 \text{ rad/s}$,相位滞后 $90^\circ$。 周期 $T \approx 0.628s$,则时间延迟 $\tau = 0.628 / 4 \approx 0.157s$。 意味着:输入达到峰值后,过了 0.157秒,输出才达到峰值。
标准二阶系统的相频轨迹
对于标准二阶系统 $T(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2}$,其相位随频率变化呈现典型的“三段式”特征:
\[\angle T(j\omega) = -\arctan_2(2\zeta\omega_n\omega, \ \omega_n^2 - \omega^2)\]| 频率区域 | 条件 | 相位值 $\phi$ | 物理含义 |
|---|---|---|---|
| 低频区 | $\omega \ll \omega_n$ | $\approx 0^\circ$ | 同步跟随 输入信号变化慢,系统完全跟得上,几乎无延迟。 |
| 谐振区 | $\omega = \omega_n$ | $= -90^\circ$ | 滞后1/4拍 系统处于最敏感状态,能量最大,但响应已明显滞后。 |
| 高频区 | $\omega \gg \omega_n$ | $\to -180^\circ$ | 严重滞后/反相 惯性太大,系统完全跟不上,输出趋势与输入相反。 |
纯延迟环节的影响
实际系统中常存在纯时间延迟 $e^{-sT_d}$(如传输延迟、计算耗时)。
- 幅频特性:$|e^{-j\omega T_d}| = 1$ (不改变幅值)
- 相频特性:$\angle e^{-j\omega T_d} = -\omega T_d$ (线性增加滞后)
同样的时间延迟,对高频信号的危害远大于低频信号。
例子:延迟 $T_d=0.05s$
- $\omega=1$: 滞后 $\approx 2.9^\circ$ (忽略不计)
- $\omega=20$: 滞后 $\approx 57.3^\circ$ (显著影响稳定性)
相位滞后会导致不稳定
在负反馈控制系统中,我们依靠“误差信号”来纠正偏差。
负反馈变正反馈的过程:
- 正常情况:检测到误差 $\rightarrow$ 施加纠正力 $\rightarrow$ 误差减小。
- 相位滞后过大 ($\approx -180^\circ$):
- 检测到误差时,系统施加纠正力。
- 但由于严重滞后,当纠正力真正起作用时,误差的方向已经变了。
- 原本的“纠正力”变成了“助推力”,反而放大了误差。
- 结果:负反馈失效,系统变成正反馈,引发振荡甚至发散。
工程上最危险的状况是:
在增益仍较大($>1$ 或 $0\text{ dB}$)的频率处,相位接近 $-180^\circ$。
在看 Bode 图的相频部分时,关注三点:
- 读滞后量(相位裕度):
- 在特定频率 $\omega_0$(幅值增益为0dB对应频率)下,$\phi(\omega_0)$ 距离$-180^\circ$是多少?
- 例:$\phi=-60^\circ$ 表示该频率成分滞后 60 度。幅值裕度 120 度。
算时间差:判断机械结构或通信延迟是否在可接受范围内。
- 看稳定性边界(幅值裕度):
- 观察相位曲线穿过 $-180^\circ$ 时的频率(相位穿越频率)。
- 检查此时的幅值是否已经衰减到足够小($<-3\text{ dB}$ 或更低)。
- 如果幅值还很大而相位已达 $-180^\circ$,系统必振荡。
PID(比例 积分 微分)
比例控制只看当前误差:
\[u_t = K_p e_t\]但真实系统中,只看当前误差不够。系统可能有长期偏差,可能有惯性,可能正在快速恶化。
PID 把控制动作拆成三项:
连续系统:
\[u(t) = K_p e(t) + K_i \int_0^t e(\tau) d\tau + K_d \frac{de(t)}{dt}\]离散系统:
\[u_t = K_p e_t + K_i \sum_{k=0}^{t} e_k \Delta t + K_d \frac{e_k - e_{k-1}}{\Delta t}\]($\Delta t$ 可以 合并进系数)
\[u_t = K_p e_t + K_i' \sum_{k=0}^{t} e_k + K_d' (e_k - e_{k-1})\]传递函数形式(频域分析用)在拉普拉斯变换下,PID 控制器的传递函数 $G_c(s)$ 为:
\[G_c(s) = \frac{U(s)}{E(s)} = K_p + \frac{K_i}{s} + K_d s\]PID 的英文全称是:Proportional-Integral-Derivative
通常称为 PID Controller(比例-积分-微分控制器)。
三个组成部分分别对应:
- P - Proportional (比例):响应当前误差。
- I - Integral (积分):累积过去误差,消除稳态误差。
- D - Derivative (微分):预测未来误差趋势,抑制超调。
P 项:当前误差
P 项解决“现在偏离目标多少”。
温度比目标低 2°C,就加热。 车偏左,就向右打方向。 预算花慢了,就提高投放强度。
I 项:长期偏差
有些系统只用 P 控制会留下稳态误差。
例如房间有一扇窗一直漏风。P 控制会加热,但可能最终停在 22°C,而目标是 24°C。
你已经低于目标很久了。即使当前误差不大,我也要继续累积补偿。
I 项危险点:系统可能严重超调。积分饱和(integral windup)
D 项:变化趋势
D 项看误差变化速度。
如果温度虽然只低 1°C,但仍然在下降,控制器应提前加热。
但 D 项对噪声很敏感。因为计算差分:
\[e_t - e_{t-1}\]如果观测值本身有噪声,差分会放大噪声。
实际工程中,D 项常常需要滤波,甚至不用 D 项。
PID 设计例子
考虑一个质量为 $m$ 的小车,受到以下三种力的作用:
- 弹簧回复力:$-kx$
- 阻尼摩擦力:$-b\dot{x}$
- 电机输入力:$u$
其中:
- $x(t)$:小车位置
- $\dot{x}(t)$:小车速度
- $u(t)$:控制输入
- $r(t)$:目标位置
- 跟踪误差定义为:$e(t) = r(t) - x(t)$
根据牛顿第二定律: \(m\ddot{x} = u - b\dot{x} - kx\) 整理得运动方程: \(m\ddot{x} + b\dot{x} + kx = u\)
取系统参数: \(m=1, \quad b=2, \quad k=20\)
代入运动方程: \(\ddot{x} + 2\dot{x} + 20x = u\)
在零初始条件下进行拉普拉斯变换:
\[s^2X(s) + 2sX(s) + 20X(s) = U(s)\] \[(s^2 + 2s + 20)X(s) = U(s)\]被控对象的传递函数 $G(s)$ 为:
\[G(s) = \frac{X(s)}{U(s)} = \frac{1}{s^2 + 2s + 20}\]比例控制 (P) 的局限性
若仅采用比例控制 $u = K_p e = K_p(r-x)$,闭环传递函数为: \(\frac{X(s)}{R(s)} = \frac{K_p G(s)}{1 + K_p G(s)} = \frac{K_p}{s^2 + 2s + 20 + K_p}\)
闭环特征方程为: \(s^2 + 2s + (20 + K_p) = 0\)
对比标准二阶系统 $s^2 + 2\zeta\omega_n s + \omega_n^2 = 0$,可得: \(\omega_n = \sqrt{20 + K_p}, \quad \zeta = \frac{1}{\sqrt{20 + K_p}}\)
分析结论:
- 增大 $K_p$ $\Rightarrow$ $\omega_n$ 增大(响应变快)。
- 增大 $K_p$ $\Rightarrow$ $\zeta$ 减小(阻尼降低,振荡增强)。
示例: 取 $K_p = 44$,则 $\omega_n = 8$,$\zeta = 0.125$。系统响应极快但严重欠阻尼。
核心问题:比例控制只能改变刚度项,无法独立调节阻尼项,因此无法同时实现“快速”与“稳定”。
PID 控制器
采用 PID 控制器: \(C(s) = K_p + \frac{K_i}{s} + K_d s = \frac{K_d s^2 + K_p s + K_i}{s}\)
单位负反馈系统的闭环特征方程由 $1 + C(s)G(s) = 0$ 给出: \(1 + \frac{K_d s^2 + K_p s + K_i}{s(s^2 + 2s + 20)} = 0\)
\[s^3 + (2 + K_d)s^2 + (20 + K_p)s + K_i = 0\]性能指标要求
- 最大超调量 $M_p < 10\%$
- 调节时间 $T_s \approx 1.5 \text{ s}$
- 阶跃响应无稳态误差
极点配置法
选择主导二阶极点参数: \(\zeta = 0.7, \quad \omega_n = 4\)
对应的二阶多项式为: \(s^2 + 2\zeta\omega_n s + \omega_n^2 = s^2 + 5.6s + 16\)
由于引入积分项后系统变为三阶,需选择第三个极点。为确保其不影响主导动态,将其置于远离虚轴的位置,取 $s = -8$,对应因子 $(s+8)$。
期望闭环特征多项式为: \((s^2 + 5.6s + 16)(s + 8)\)
展开计算: \(= s^3 + 8s^2 + 5.6s^2 + 44.8s + 16s + 128\) \(= s^3 + 13.6s^2 + 60.8s + 128\)
将实际特征多项式与期望特征多项式系数逐项匹配:
| 系数项 | 实际多项式系数 | 期望多项式系数 | 方程 | 解得参数 |
|---|---|---|---|---|
| $s^2$ | $2 + K_d$ | $13.6$ | $2 + K_d = 13.6$ | $K_d = 11.6$ |
| $s^1$ | $20 + K_p$ | $60.8$ | $20 + K_p = 60.8$ | $K_p = 40.8$ |
| $s^0$ | $K_i$ | $128$ | $K_i = 128$ | $K_i = 128$ |
最终控制器 \(C(s) = 40.8 + \frac{128}{s} + 11.6s\)
闭环传递函数
\(T(s) = \frac{C(s)G(s)}{1 + C(s)G(s)} = \frac{11.6s^2 + 40.8s + 128}{s^3 + 13.6s^2 + 60.8s + 128}\)
稳态误差分析
对于单位阶跃输入 $R(s) = 1/s$,利用终值定理:
\[e_{\infty} = \lim_{s \to 0} s E(s) = \lim_{s \to 0} \frac{s R(s)}{1 + C(s)G(s)} = \lim_{s \to 0} \frac{1}{1 + C(s)G(s)}\]由于 $C(s)$ 包含积分项 $\frac{K_i}{s}$,当 $s \to 0$ 时,$C(s)G(s) \to \infty$(假设 $K_i > 0$ 且 $G(0)$ 有限)。
\[\therefore e_{\infty} = 0\]结论:积分项保证了阶跃目标下的零稳态误差。
时域性能估计 (基于主导极点)
基于 $\zeta=0.7, \omega_n=4$ 的二阶近似:
最大超调量 ($M_p$): \(M_p = e^{-\frac{\zeta\pi}{\sqrt{1-\zeta^2}}} = e^{-\frac{0.7\pi}{\sqrt{0.51}}} \approx 0.046 \quad (4.6\%)\) (满足 $<10\%$ 的要求)
峰值时间 ($T_p$): \(T_p = \frac{\pi}{\omega_n\sqrt{1-\zeta^2}} = \frac{\pi}{4\sqrt{0.51}} \approx 1.10 \text{ s}\)
调节时间 ($T_s$, 2%准则): \(T_s \approx \frac{4}{\zeta\omega_n} = \frac{4}{0.7 \times 4} \approx 1.43 \text{ s}\) (与设计目标 $1.5 \text{ s}$ 一致)
注意:实际系统含有第三极点和零点,真实响应会与上述二阶估计略有偏差,但主导动态尺度相符。
频域性能与延迟鲁棒性
开环传递函数 \(L(s) = C(s)G(s) = \frac{11.6s^2 + 40.8s + 128}{s(s^2 + 2s + 20)}\)
基础频域指标:
- 增益交叉频率:$\omega_c \approx 12.67 \text{ rad/s}$
- 相位裕度 (PM):$PM \approx 83.6^\circ$
较大的相位裕度表明系统在无延迟情况下具有良好的鲁棒性。
纯延迟对稳定性的影响
若系统存在纯延迟 $e^{-sT_d}$,开环传递函数变为 $L_d(s) = L(s)e^{-sT_d}$。
- 相位特性:引入额外滞后 $\phi_d = -\omega T_d \frac{180^\circ}{\pi}$。
在交叉频率 $\omega_c$ 处,剩余相位裕度为: \(PM_{\text{new}} = PM - \omega_c T_d \frac{180^\circ}{\pi}\)
不同延迟下的稳定性评估:
| 延迟 $T_d$ | 相位损失 $\Delta \phi$ | 剩余相位裕度 $PM_{\text{new}}$ | 状态判断 |
|---|---|---|---|
| $0 \text{ ms}$ | $0^\circ$ | $83.6^\circ$ | 稳健 |
| $20 \text{ ms}$ | $14.5^\circ$ | $69.1^\circ$ | 稳健 |
| $50 \text{ ms}$ | $36.3^\circ$ | $47.3^\circ$ | 可用,裕度下降 |
| $100 \text{ ms}$ | $72.6^\circ$ | $11.0^\circ$ | 接近振荡边界 |
令 $PM_{\text{new}} = 0$,估算理论稳定边界:
\[T_{d,\max} = \frac{PM_{\text{rad}}}{\omega_c} = \frac{83.6 \times \frac{\pi}{180}}{12.67} \approx \frac{1.46}{12.67} \approx 0.115 \text{ s}\]工程建议:此为线性近似下的极限值,实际工程中可接受延迟应显著小于此值以保留安全裕度。
当延迟不可忽略时,高带宽控制器会因“基于过时信息决策”导致振荡。常用处理方法:
- 降低增益:减小 $K_p, K_i, K_d$ 以降低交叉频率 $\omega_c$,从而减小 $\omega_c T_d$ 带来的相位损失。代价是响应变慢。
- 降低目标带宽:重新设计极点,例如将 $\omega_n$ 从 4 降至 2。牺牲速度以换取对延迟和高频噪声不敏感。
- 引入预测控制:如 Smith Predictor。利用模型预测未来状态 $\hat{x}(t+T_d)$,基于预测误差进行控制,补偿物理延迟带来的相位滞后。
状态空间
控制论中更通用的写法是状态空间模型:
\[x_{t+1} = A x_t + B u_t\] \[y_t = C x_t + D u_t\]其中:
- $x_t$ 是系统在时刻 $t$ 的状态;
- $u_t$ 是控制动作;
- $y_t$ 是我们能观测到的输出;
- $A$ 描述系统在没有控制输入时如何自己演化;
- $B$ 描述控制输入如何影响状态;
- $C$ 描述状态如何映射成观测;
- $D$ 描述控制输入是否会直接影响输出。
状态反馈
有了状态空间模型之后,一个自然的控制策略是状态反馈:
\[u_t = -Kx_t\]也就是说,控制动作由当前状态决定。
代入系统方程:
\[x_{t+1} = A x_t + B u_t\]得到:
\[x_{t+1} = A x_t - B K x_t\]因此闭环系统变成:
\[x_{t+1} = (A - BK)x_t\]这说明反馈矩阵 $K$ 会改变闭环系统的动力学。
原来的系统由 $A$ 决定; 加入反馈之后,系统由 $A-BK$ 决定。
所以设计控制器,本质上是在设计闭环系统的动态行为:让它稳定、足够快、不过度振荡、控制动作不过大。
LQR:最简单的最优状态反馈控制
PID 也是一种反馈控制,但它更多依赖工程经验调参。LQR 则把这个问题写成一个明确的优化问题。
LQR 的全称是 Linear Quadratic Regulator,即线性二次型调节器。
它处理的问题是:
在线性系统中,如何选择控制动作,使系统既尽快回到目标,又不要使用过大的控制力?
系统模型为:
\[x_{t+1} = A x_t + B u_t\]LQR 不直接规定“必须多快回到目标”,而是定义一个长期成本函数:
\[J = \sum_{t=0}^{\infty} \left( x_t^\top Q x_t + u_t^\top R u_t \right)\]\(x_t^\top Q x_t\) 惩罚状态偏差。它表示:系统偏离目标越远,代价越大。
\(u_t^\top R u_t\) 惩罚控制动作。它表示:控制动作越大,代价越大。
在两件事之间做权衡:状态误差要小,控制动作也不能太大。
例如:
- 小车要尽快回到目标位置,但电机不能输出无限大的力;
- 无人机要快速稳定姿态,但不能让电机剧烈抖动;
- 云服务 autoscaling 要降低排队延迟,但不能频繁扩缩容。
动作本身也有成本。一个控制器不仅要减少误差,也要避免过度控制。
LQR 为什么会得到线性反馈?
LQR 的一个漂亮结果是:虽然我们优化的是整个未来的控制序列,但最终得到的最优控制律非常简单:
\[u_t = -Kx_t\]也就是说,最优策略仍然是一个线性状态反馈。其中 $K$ 由系统矩阵 $A, B$ 和权重矩阵 $Q, R$ 决定。
系统模型:\(x_{t+1} = Ax_t + Bu_t\)
目标函数:最小化无限时域下的累积代价:
\[J = \sum_{t=0}^{\infty} \left( x_t^\top Q x_t + u_t^\top R u_t \right)\]因为系统是线性的,代价是二次型,线性变换后的二次型仍是二次型。因此可以设从状态 $x$ 出发的最优未来代价为: \(V(x) = x^\top P x\)
Bellman 方程为: \(V(x) = \min_u \left[ x^\top Q x + u^\top R u + V(Ax + Bu) \right]\)
代入 $V(x) = x^\top P x$: \(V(x) = \min_u \left[ x^\top Q x + u^\top R u + (Ax + Bu)^\top P (Ax + Bu) \right]\)
展开后,只看与 $u$ 有关的项: \(u^\top (R + B^\top P B) u + 2u^\top B^\top P A x\)
对 $u$ 求导,并令其为零: \((R + B^\top P B)u + B^\top P A x = 0\)
解得最优控制: \(u^\star = -(R + B^\top P B)^{-1} B^\top P A x\)
记: \(K = (R + B^\top P B)^{-1} B^\top P A\)
于是得到线性反馈律: \(u^\star = -Kx\)
离散代数 Riccati 方程 (DARE)
矩阵 $P$ 满足离散代数 Riccati 方程:
\[P = Q + A^\top P A - A^\top P B (R + B^\top P B)^{-1} B^\top P A\]LQR 的计算分两步:
- 第一步:解 Riccati 方程得到 P;
- 第二步:由 P 计算反馈增益 K
因此,LQR 不是简单地按当前误差反馈,而是在考虑未来演化后的最优线性反馈。
LQR 的局限
LQR 很优雅,但它也有明确限制。
第一,LQR 假设系统是线性的:
\[x_{t+1}=Ax_t+Bu_t\]如果系统强非线性,LQR 只能作为局部近似,或者需要使用 iLQR、MPC 等扩展方法。
第二,LQR 的标准形式不直接处理硬约束。
例如:
\[u_{\min} \le u_t \le u_{\max}\] \[x_{\min} \le x_t \le x_{\max}\]在真实系统中,控制量往往有上限,状态也有安全边界。标准 LQR 会惩罚大动作,但不会天然保证动作不越界。
第三,LQR 需要状态 $x_t$。如果状态不能直接观测,就需要先做状态估计,例如使用 Kalman Filter。
因此在工程架构中,LQR 通常位于这样的层次中:
1
2
3
4
5
6
7
8
9
Raw Observations
↓
State Estimation
↓
LQR / PID / MPC
↓
Guardrails
↓
Execution
LQR 负责给出一个平滑、合理的状态反馈控制动作;但安全边界、输入饱和、业务规则仍然需要额外处理。
MPC:模型预测控制 (Model Predictive Control)
硬约束
LQR 虽然优美,但它不直接处理硬约束。在真实系统中,约束往往至关重要:
- 执行器限制:小车的电机输出有最大力矩;
- 安全范围:无人机的倾角和推力都有物理极限;
- 环境边界:自动驾驶车辆不能越过车道边界;
- 业务逻辑:云服务 autoscaling 不能一次性扩容过多,也不能低于最小实例数。
此时,仅靠 LQR 中的 $R$ 矩阵惩罚大动作是不够的(那是软约束)。我们需要在优化问题中显式加入硬约束。
MPC 的核心流程
MPC 也被称为滚动时域控制 (Receding Horizon Control)。其基本流程如下:
1
2
3
4
5
1. 估计当前状态 x_t
2. 基于模型,向前预测未来 H 步
3. 求解一个有限时域的约束优化问题,得到最优控制序列
4. 只执行序列中的第一步动作 u_t
5. 下一时刻 t+1,重新估计状态,重复上述过程
形式化
假设系统仍为离散线性系统: \(x_{t+1} = Ax_t + Bu_t\)
在当前时刻 $t$,观测到状态 $x_t$。MPC 向前看 $H$ 步(预测时域/Horizon)。
- 控制序列:$u_{t|t}, u_{t+1|t}, \dots, u_{t+H-1|t}$
- $u_{t+k|t}$ 表示:在时刻 $t$ 规划时,预测第 $t+k$ 步使用的控制量。
- 状态序列:$x_{t|t}, x_{t+1|t}, \dots, x_{t+H|t}$
- 初始条件:$x_{t|t} = x_t$
- 动力学约束:$x_{t+k+1|t} = A x_{t+k|t} + B u_{t+k|t}$
MPC 在每个时刻求解以下优化问题:
\[\begin{aligned} \min_{u_{t|t}, \dots, u_{t+H-1|t}} \quad & J = \sum_{k=0}^{H-1} \left( x_{t+k|t}^\top Q x_{t+k|t} + u_{t+k|t}^\top R u_{t+k|t} \right) + x_{t+H|t}^\top P x_{t+H|t} \\ \text{s.t.} \quad & x_{t+k+1|t} = A x_{t+k|t} + B u_{t+k|t}, \quad k=0,\dots,H-1 \\ & u_{\min} \le u_{t+k|t} \le u_{\max} \\ & x_{\min} \le x_{t+k|t} \le x_{\max} \end{aligned}\]参数含义:
- $Q$:惩罚状态偏差;
- $R$:惩罚控制能量;
- $P$:终端代价矩阵(Terminal Cost),用于近似无限时域后的剩余代价,保证稳定性;
- $H$:预测时域长度;
- $u_{\min}/u_{\max}$:输入硬约束;
- $x_{\min}/x_{\max}$:状态硬约束。
注:如果去掉所有约束,且令 $H \to \infty$,线性二次型 MPC 的解将收敛于 LQR 的解。
示例:带输入上限的小车
考虑一维系统: \(x_{t+1} = x_t + u_t\) 目标:使位置偏差 $x_t \to 0$。
设定:
- 初始状态:$x_0 = 10$
- 控制约束:$-2 \le u_t \le 2$
| 特性 | LQR (无约束) | MPC (有约束) |
|---|---|---|
| 第一步动作 | 可能计算出 $u_0 = -6.18$ | 受限于约束,计算出 $u_0 = -2$ |
| 可行性 | 不可执行 (超出电机能力) | 可执行 (满足硬件限制) |
| 行为逻辑 | 线性反馈,始终按比例输出 | 远时饱和输出,近时平滑调节 |
假设预测时域 $H=3$:
远离目标时 ($x_0=10$): MPC 发现无论怎么努力,短时间内都无法到达原点,因此会尽可能使用最大允许动作: \(u_{0|0}^\star = -2, \quad u_{1|0}^\star = -2, \quad u_{2|0}^\star = -2\) 执行第一步:$u_0 = -2$,状态变为 $x_1 = 8$。
接近目标时 ($x_t=1$): MPC 预测如果使用 $u=-2$,下一步状态将变为 $-1$,产生新的偏差和代价。因此它会选择更温和的动作: \(u_t \approx -1\) 从而平滑地逼近零点,避免过冲。
MPC 的局限性
计算成本高
- LQR 只需一次矩阵乘法 $u=-Kx$。
- MPC 需要在每个采样周期内在线求解一个优化问题(通常是二次规划 QP)。
- 对于高频系统或高维状态空间,实时求解可能成为瓶颈。
依赖模型精度
- MPC 的核心是“预测”。如果模型 $A, B$ 不准确,预测轨迹将与真实轨迹偏离,导致控制性能下降甚至不稳定。
- 对策:结合系统辨识、在线参数校准或鲁棒 MPC (Robust MPC)。
参数整定复杂 需要精心设计的参数包括:
- 预测时域 $H$:太短可能导致短视,太长增加计算量。
- 权重矩阵 $Q, R, P$:平衡响应速度与能耗。
- 终端约束/代价:保证闭环稳定性。
可行性问题
- 如果当前状态已违反约束,或者由于扰动导致未来无论如何控制都无法满足约束,优化问题将无解。
- 工程对策:软约束 (Soft Constraints) 引入松弛变量 (Slack Variable) $s_k \ge 0$: \(x_{t+k|t} \le x_{\max} + s_k\) 并在目标函数中加入高额惩罚: \(J_{new} = J_{original} + \sum \rho s_k^2\) 这样即使无法完全满足约束,求解器也能找到一个“违反程度最小”的可行解,保证控制器不崩溃。
| 维度 | LQR | MPC |
|---|---|---|
| 时域 | 无限时域 | 有限时域 (滚动) |
| 约束 | 无硬约束 (仅软惩罚) | 显式支持硬约束 |
| 计算 | 离线计算 $K$,在线极快 | 在线求解优化问题,计算较重 |
| 模型依赖 | 中等 | 高 (预测准确性关键) |
| 适用场景 | 线性、无约束、快速系统 | 有约束、多变量、对安全性要求高的系统 |
Kalman Filter:从噪声观测到状态估计
在前面的 LQR 和 MPC 讨论中,我们默认控制器可以直接获取完美的系统状态 $x_t$。但在真实系统中,真实状态往往是不可直接观测的。控制器拿到的通常是带噪声的观测值(Noisy Observations/Metrics)
先估计状态 (Estimate State),再控制状态 (Control State)。
Kalman Filter 处理的是包含两种不确定性的线性高斯系统:
状态演化方程 (Process Model)
\(x_{t+1} = A x_t + B u_t + w_t\)
- $A$:状态转移矩阵
- $x_t$:真实状态(隐藏变量)
- $B$:控制输入矩阵
- $u_t$:控制动作
- $w_t$:过程噪声 (Process Noise),代表模型误差或外部扰动,$w_t \sim \mathcal{N}(0, W)$
观测方程 (Measurement Model)
\(y_t = C x_t + v_t\)
- $y_t$:观测值(可见变量)
- $C$:观测矩阵
- $v_t$:观测噪声 (Measurement Noise),代表传感器误差,$v_t \sim \mathcal{N}(0, V)$
Kalman Filter 的目标: 根据历史观测序列 ${y_0, \dots, y_t}$ 和控制序列 ${u_0, \dots, u_{t-1}}$,估计当前最可能的真实状态 $\hat{x}_t$。
控制器实际使用的是估计值: \(u_t = \pi(\hat{x}_t) \quad \text{例如 LQR: } u_t = -K\hat{x}_t\)
Kalman Filter不是简单的移动平均。Moving Average 只看历史数据,而 Kalman Filter 结合了:
- 系统模型预测 (Model Prediction)
- 当前观测值 (Current Measurement)
- 模型的不确定性 ($W$)
- 观测的不确定性 ($V$)
它在“相信模型”和“相信观测”之间做出最优权衡。
Kalman Filter 的核心算法
每一步包含两个阶段:预测 (Predict) 和 更新 (Update)。
预测步骤
基于上一时刻的估计和控制动作,预测当前状态: \(\hat{x}_{t|t-1} = A \hat{x}_{t-1|t-1} + B u_{t-1}\)
$\hat{x}_{t|t-1}$ 先验估计 (Prior Estimate),即在看 $y_t$ 之前对 $x_t$ 的猜测。
更新步骤
拿到新观测 $y_t$ 后,修正预测:
- 计算新信息 (Innovation): \(\tilde{y}_t = y_t - C \hat{x}_{t|t-1}\)
- 含义:观测值与预测值的差异,代表了“新信息”。
- 状态更新: \(\hat{x}_{t|t} = \hat{x}_{t|t-1} + L_t (y_t - C \hat{x}_{t|t-1})\)
- $\hat{x}_{t|t}$:后验估计 (Posterior Estimate),即最终输出的状态估计。
- $L_t$:卡尔曼增益 (Kalman Gain)。
$L_t$ 是一个动态调整的权重,决定了我们多相信模型,还是多相信观测。
- 若观测噪声大 ($V$ 大):
- 观测不可靠 $\rightarrow$ 少修正 $\rightarrow$ $L_t$ 较小。
- 滤波器更依赖模型预测。
- 若过程噪声大/模型不准 ($W$ 大):
- 预测不可靠 $\rightarrow$ 多修正 $\rightarrow$ $L_t$ 较大。
- 滤波器更依赖当前观测。
示例:估计真实负载
场景:估计服务真实负载 $x_t$,观测值为 noisy QPS $y_t$。
- 模型:$x_{t+1} = x_t + w_t$ (负载变化缓慢)
- 观测:$y_t = x_t + v_t$
假设:
- 模型预测当前负载: $\hat{x}_{t|t-1} = 100$
- 突然观测到指标飙升:$y_t = 130$
- 卡尔曼增益:$L_t = 0.3$ (说明观测有一定噪声,不完全可信)
计算: \(\begin{aligned} \hat{x}_{t|t} &= 100 + 0.3 \times (130 - 100) \\ &= 100 + 0.3 \times 30 \\ &= 100 + 9 \\ &= 109 \end{aligned}\)
粒子滤波:Particle Filter
Kalman Filter (KF) 非常优雅且高效,但它有两个核心前提:
- 系统近似线性。
- 噪声近似高斯分布。
需要一种能表示任意形状概率分布的方法。
Particle Filter (粒子滤波) 解决:当系统非线性、噪声非高斯、状态分布形状复杂时,如何估计隐藏状态?
核心思想:不再维护一个状态估计值,而是维护一群可能的状态假设 (Particles)。从“点估计”到“经验分布”。
Kalman Filter 的表示
\(x_t \sim \mathcal{N}(\hat{x}_t, \Sigma_t)\)
- 用一个椭圆(均值和协方差)描述不确定性。
- 假设分布是单峰、对称的高斯分布。
Particle Filter 的表示
\(\{ x_t^{(i)}, w_t^{(i)} \}_{i=1}^N\)
- $x_t^{(i)}$:第 $i$ 个粒子,代表一个可能的状态假设。
- $w_t^{(i)}$:第 $i$ 个粒子的权重,代表该假设解释当前观测的可信度 ($\sum w_i = 1$)。
这构成了一个经验分布 (Empirical Distribution): \(p(x_t | y_{1:t}) \approx \sum_{i=1}^{N} w_t^{(i)} \delta(x_t - x_t^{(i)})\)
- 如果粒子集中在某处 $\rightarrow$ 高置信度。
- 如果粒子分成两簇 $\rightarrow$ 存在两种可能的解释(多峰)。
- 如果粒子分散 $\rightarrow$ 高度不确定。
Particle Filter 不要求线性或高斯假设,通用形式为:
- 状态转移方程: \(x_{t+1} = f(x_t, u_t) + w_t\)
- 观测方程: \(y_t = h(x_t) + v_t\)
其中 $f(\cdot)$ 和 $h(\cdot)$ 可以是任意非线性函数,$w_t, v_t$ 可以是任意分布的噪声。
算法流程:Predict - Weight - Resample
Particle Filter 每一步迭代包含三个核心步骤:
第一步:预测 (Predict)
对每个粒子,根据系统模型向前推演: \(x_{t|t-1}^{(i)} \sim p(x_t | x_{t-1}^{(i)}, u_{t-1})\)
- 直观理解:假设上一时刻第 $i$ 个粒子是真的,经过控制 $u_{t-1}$ 和过程噪声后,它现在可能在哪里?
- 操作:$x_{new} = f(x_{old}, u) + \text{sampled noise}$
第二步:加权 (Weight)
拿到新观测 $y_t$ 后,评估每个粒子与观测的匹配程度: \(w_t^{(i)} \propto p(y_t | x_{t|t-1}^{(i)})\)
- 似然计算:如果粒子所在的状态能很好地解释观测 $y_t$,则权重增加;否则权重降低。
- 归一化:确保 $\sum w_t^{(i)} = 1$。
第三步:重采样 (Resample)
经过几轮迭代,大多数粒子的权重会趋近于 0,只有少数粒子权重很大(粒子退化问题)。
- 操作:根据权重比例,随机复制高权重粒子,丢弃低权重粒子。
- 目的:将计算资源集中在更可能的状态区域,保持粒子群的多样性及有效性。
- 触发条件:通常当有效粒子数 $N_{eff} < N/2$ 时触发。
场景 A:机器人定位 (Robot Localization)
场景:机器人有地图,但不知道自己在哪里,需要定位。
- 初始化:机器人在未知走廊,在地图撒下一堆均匀分布的粒子。
- 移动:机器人向前移动。所有粒子根据运动模型和地图向前移动,并加入随机扰动(模拟轮子打滑)。
- 观测:传感器检测到“左墙距离 1m,前墙距离 2m”。
- 加权:
- 位于走廊中间的粒子:预测应看到左右墙距离相等 $\rightarrow$ 与观测不符 $\rightarrow$ 权重降低。
- 靠近左侧墙壁的粒子:预测符合观测 $\rightarrow$ 权重升高。
- 重采样:保留靠近左墙的粒子,复制它们,丢弃其他粒子。
- 结果:地图中的粒子群迅速收敛到机器人的真实位置附近。
场景 B:云服务拥塞诊断
观测到 Latency 飙升,可能有多种解释:
- 粒子群假设:
- 粒子簇 1:真实负载激增 (High Demand)。
- 粒子簇 2:下游服务故障 (Downstream Failure)。
- 粒子簇 3:指标采集异常 (Metric Noise)。
- 动态更新:
- 若 QPS 同步上升 $\rightarrow$ 簇 1 权重增加。
- 若下游 Error Rate 上升 $\rightarrow$ 簇 2 权重增加。
- 若其他指标正常且很快恢复 $\rightarrow$ 簇 3 权重增加。
控制动作
控制器通常需要确定的状态输入。如何处理粒子群?
- 加权平均 (Mean Estimate): \(\hat{x}_t = \sum_{i=1}^{N} w_t^{(i)} x_t^{(i)}\)
- 适用于单峰分布,直接送入 LQR/MPC。
- 最大后验估计 (MAP): 选择权重最大的粒子作为状态估计。
局限性与工程挑战
- 计算成本高:
- 需要维护数百甚至数千个粒子。
- 每个粒子都要运行一次模型预测 $f(\cdot)$ 和观测似然计算 $h(\cdot)$。
- 维数灾难 (Curse of Dimensionality):
- 随着状态维度增加,覆盖状态空间所需的粒子数呈指数增长。
- 对策:Rao-Blackwellized Particle Filter (部分状态用 KF 解析求解,部分用 PF)。
- 粒子贫化 (Particle Deprivation):
- 重采样可能导致粒子多样性丧失,所有粒子聚集在一起,无法应对突发变化。
- 对策:引入额外噪声 (Jitter)、自适应重采样阈值。
- 模型依赖性:
权重计算依赖于准确的观测模型 $p(y x)$。如果模型错误,滤波器会被误导。
