状态空间与稳定性
PID 一次只看一个误差信号;状态空间把机器人的全部"记忆"写成一个向量 \(\mathbf x\),把动力学写成 \(\dot{\mathbf x}=A\mathbf x+B\mathbf u\)。这一节在一个摆上走完整条链路:在平衡点处线性化,用特征值判断稳定性,用能量当作李雅普诺夫证书,用可控性判断"推得动推不动",用极点配置把倒立摆立起来,再看把控制器放进计算机(离散化)和只测到一部分状态(观测器)时会发生什么。
1为什么机器人需要它
13.1 节的 PID 把一个关节当成"误差进、力矩出"的黑盒,调三个旋钮。它在单个关节上很好用,可是一旦遇到下面这些问题,就需要一个更完整的描述:
- 多个量互相牵连:倒立摆、平衡车、四旋翼的姿态和位置互相耦合,推一下小车,摆杆也跟着动。单独给每个量调 PID,常常调不出来。
- 平衡点不止一个:同一个摆,挂着是稳定的,倒立是不稳定的。同一个模型在不同工作点表现完全不同,控制器要知道自己在哪个点附近工作。
- 想要证明而不只是"试一试":控制器会不会在某些初始状态下发散?能离平衡点多远而不失控?这需要一个不用把方程解出来也能判断稳定性的工具。
- 控制器跑在计算机上,传感器只测到一部分:编码器测角度不测角速度,IMU 测角速度不测位置;控制周期是 1 ms 还是 50 ms 也会改变稳定性。
状态空间给这些问题一个统一的语言:把系统此刻的全部"记忆"写成状态向量 \(\mathbf x\),把动力学写成一阶方程组 \(\dot{\mathbf x}=\mathbf f(\mathbf x,\mathbf u)\)(2.5 节的标准形式)。在平衡点附近把它线性化,就得到全书控制部分的出发点:
四个问题依次是:它自己稳不稳(\(A\) 的特征值,李雅普诺夫函数),输入能不能推动每个方向(可控性,\(A\) 和 \(B\)),怎样用反馈 \(\mathbf u=-K\mathbf x\) 把它变成我们想要的样子(极点配置),以及测量 \(\mathbf y\) 够不够还原整个 \(\mathbf x\)(可观性与观测器,\(A\) 和 \(C\))。13.3 节的 LQR 和 13.4 节的 MPC 都建立在这四个问题的答案上。全篇用同一个摆:质量 \(m=1\) kg 的质点挂在长 \(l=1\) m 的轻杆上(转动惯量 \(ml^2=1\) kg·m²),关节粘性阻尼 \(b\),电机力矩 \(u\),角度 \(\theta\) 从竖直向下量起。
2直觉:状态是一个点,动力学是一片箭头
要预测摆下一刻往哪走,只知道角度不够:同一个角度,可能正往上甩,也可能正往下落。角度 \(\theta\) 加上角速度 \(\omega=\dot\theta\) 才够,这两个数就是状态 \(\mathbf x=(\theta,\omega)\)。牛顿定律 \(ml^2\ddot\theta=-mgl\sin\theta-b\dot\theta+u\) 写成状态形式:
\(\mathbf f\) 在 \((\theta,\omega)\) 平面(相平面)的每一点放一支箭头,这正是 3.6 节的向量场:状态顺着箭头流动。箭头为零的点叫平衡点:\(\mathbf f(\mathbf x^*,u^*)=\mathbf 0\),即 \(\omega^*=0\) 且 \(mgl\sin\theta^*=u^*\)。不加力矩(\(u^*=0\))时有两个:挂着的 \(\theta^*=0\) 和倒立的 \(\theta^*=\pi\)。
平衡点附近,向量场长什么样?3.3 节说过,放大到足够近,光滑的映射都像它的雅可比。令 \(\delta\mathbf x=\mathbf x-\mathbf x^*\),\(\delta u=u-u^*\),一阶泰勒展开给出
只有 \(\cos\theta^*\) 一项随平衡点变化,但它决定了一切。挂着时 \(\cos\theta^*=1\),重力像一根把摆拉回去的弹簧;倒立时 \(\cos\theta^*=-1\),同一个重力变成了把摆推开的"负弹簧"。代入本课的数值(\(g/l=9.81\ \text{s}^{-2}\),\(b=0.5\)):
3动手玩:摆的相平面与它的线性化
在左边的相平面上点一下,就从那个状态放开摆(横轴是角度,纵轴是角速度)。琥珀色实线是真实的非线性运动,紫色虚线是在最近的平衡点处线性化后的预测 \(\delta\mathbf x(t)=e^{At}\delta\mathbf x_0\)。下方的曲线把两者对时间画出来,右上角的小图是摆本身。拖动"恒定力矩 \(u_0\)":平衡点会移动,\(A\) 跟着变。
- 在挂着的平衡点附近放开两次:一次幅值小于 20°(0.35 rad),线性化误差低于 2%;一次幅值超过 60°(1.05 rad),误差超过 15%。线性化在多大范围内"够用"?
- 加大阻尼 \(b\),直到稳定平衡点的两个特征值变成实数(螺旋变成结点,出现两条青色方向)。在 \(u_0=0\) 时这个阈值是 \(b=2\sqrt{g/l}\approx6.26\);加上力矩 \(u_0\) 后阈值变低还是变高?
再把 \(u_0\) 推过 \(mgl=9.81\) N·m:两个平衡点相互靠近、合并、然后消失("鞍结分岔"),摆从此一圈圈地转下去。平衡点不是系统固有的,它是"状态 + 输入"的一对 \((\mathbf x^*,u^*)\),线性化也要在这一对上做。
线性化是一张局部地图:在平衡点附近它几乎完美(20° 以内误差不到 2%),离远了就会出错,而且它完全看不见全局结构:分界线、第二个平衡点、翻过顶点的旋转。"\(A\) 的特征值实部都为负"只说明平衡点局部稳定(李雅普诺夫间接法),要回答"多远都能回来",需要下一节的工具。
4第二视角:不解方程也能判断稳定(李雅普诺夫)
有阻尼的摆最后一定会停在下面,为什么这么肯定?因为它的能量只减不增:
李雅普诺夫(1892)把这个论证抽象出来:找一个函数 \(V(\mathbf x)\),它在平衡点为零、别处为正(像一只碗),而且沿着系统的运动不增加,\(\dot V=\nabla V\cdot\mathbf f\le0\)。那么状态就只能留在碗里,平衡点是稳定的;如果 \(\dot V<0\) 处处成立(平衡点除外),状态会一路滑到碗底,平衡点是渐近稳定的。关键在于 \(\dot V=\nabla V\cdot\mathbf f\) 只用到向量场本身,不需要解微分方程。
但 \(V\) 要自己去找,而且找错了不说明任何问题。下图给出三个候选:能量 \(E\);一个"看起来很自然"的 \(\tfrac12(\theta^2+\omega^2)\);以及解李雅普诺夫方程 \(A^\top P+PA=-I\) 得到的二次型 \(\mathbf x^\top P\mathbf x\)(第 6 节推导)。红色区域是 \(\dot V>0\) 的地方,在那里状态会往碗外爬;绿色区域是这个 \(V\) 能担保的吸引域:最大的、内部没有红色的碗。
- 选"朴素二次型" \(\tfrac12(\theta^2+\omega^2)\),放开一条轨迹,让 \(V(t)\) 在途中比起点高出 20% 以上。摆明明在稳定地停下来,这个 \(V\) 却在上升:它什么也证明不了。
- 选"李雅普诺夫方程"(\(b>0\)),从绿色区域外面(\(V(\mathbf x_0)>1.05\,c^*\))放开一条不翻过顶点、最终停在下面的轨迹。证书是充分条件:它没担保的地方,系统照样可以稳定。
能量是这个摆最好的证书:它担保的是整个 \(E<2mgl\) 的"眼睛"(无阻尼摆的分界线所围的区域,有阻尼时真实的吸引域还要更大),因为它来自物理。由线性化解出的二次型只在 \(|\theta|\lesssim44^\circ\) 的小椭圆里有效(\(b=0.5\) 时),它对非线性一无所知。机器人里的稳定性证明大多是这种思路:8.3 节证明"重力补偿 + PD"稳定,用的就是"动能 + 弹簧势能"这个 \(V\)。
5第三视角:输入推得动哪些方向?然后把极点放到想要的位置
可控性
只有一个输入,却要控制两个(或更多)状态,这可能吗?对小车来说可以:力改变速度,速度再改变位置,输入通过动力学传到了位置上。\(B\) 是输入直接推的方向,\(AB\) 是"推了之后,动力学把它带向"的方向,\(A^2B\) 是再下一步……只要 \(B, AB, \dots, A^{n-1}B\) 张成整个空间,输入就能到达每个方向。这就是卡尔曼(1960)的秩判据:\((A,B)\) 可控,当且仅当下面这个可控性矩阵的秩等于 \(n\)。
秩判据只回答"能不能",不回答"费多大劲"。可控性格拉姆矩阵 \(W_T\)(第 6 节)回答后者:从原点出发、在 \(T\) 秒内、用输入能量 \(\int_0^Tu^2dt\le1\) 能到达的状态,恰好组成椭圆 \(\{\mathbf x:\mathbf x^\top W_T^{-1}\mathbf x\le1\}\)。椭圆越扁,那个方向越"难推";扁成一条线,就不可控了。下图拖动 \(B\)(琥珀色箭头)和目标点(红色十字)。
- 选"两个一阶模态"(\(A=\operatorname{diag}(-1,-3)\)),把 \(B\) 拖到一条青色特征方向上:椭圆塌成一条线,\(\det\mathcal C=0\)。这时哪个模态完全不受输入影响?
- 选"小车",目标保持在"静止于 1 m 外"附近(位置 \(\ge0.8\),速度绝对值 \(\le0.2\)),把 \(T\) 从 2 s 减到 1 s 或更短:所需能量从 1.5 涨到 12 以上。为什么时间减半、能量涨 8 倍?
再试试"两个相同模态"(\(A=-2I\)):无论 \(B\) 指向哪里,椭圆都是一条线。一个输入没法分别控制两个一模一样、互不相干的系统,因为它对两者的作用永远成同一比例。
极点配置:把倒立摆立起来
倒立点不稳定(\(\lambda=+3.03\),这里取 \(b=0.2\)),但系统可控。用状态反馈 \(u=-K\mathbf x=-k_1\delta\theta-k_2\omega\),闭环变成 \(\dot{\mathbf x}=(A-BK)\mathbf x\)。对本例,闭环特征多项式是
两个增益正好对应两个系数,所以任意想要的极点(复数要成对)都能配出来:这就是极点配置定理,可控是它的充要条件。在下图左侧的 \(s\) 平面上拖动闭环极点,右侧的摆会用对应的 \(K\) 从初始偏角站起来。仿真是非线性的摆,电机力矩有上限,紫色虚线是线性模型的预测。
- 初始偏角 \(\ge20^\circ\)、力矩上限 \(\le20\) N·m,配出一组极点:调节时间 < 0.8 s,超调 < 5%,而且全程不饱和。提示:一对重极点 \(-6\) 需要 0.97 s;试试略带虚部的一对复极点。
- 保持两个闭环极点都在左半平面,把初始偏角调到 40°,再降低力矩上限,直到摆摔倒。线性分析说"稳定",为什么它还是倒了?在 40° 处,最少要多大力矩才可能托住它?
可控时,极点"想放哪就放哪",但代价写在增益里:重极点 \(-p\) 需要 \(k_1=g/l+p^2\),从 20° 起步的初始力矩随 \(p^2\) 增长(\(p=6\) 时 16.0 N·m,\(p=7\) 时 20.5 N·m)。极点放得越快,力矩越大、越先撞上饱和,对噪声和采样延迟也越敏感。饱和以后系统不再是线性的,极点承诺的东西就不再成立。13.3 节的 LQR 用代价函数把"快"和"省力"放在同一把秤上,自动选出极点。
6再看数学
提示:把鼠标悬停在公式中带底色的符号上,对应的图元素会被高亮:\(A\) 加粗 FIG 1 的特征方向,\(V\) 与 \(\dot V\) 加粗 FIG 2 的等值线与红色区域,\(\mathcal C\) 与 \(W_T\) 加粗 FIG 3 的 \(B\)、\(AB\) 箭头与椭圆,\(K\) 放大 FIG 4 的闭环极点,\(A_d\) 与 \(I+AT\) 放大 FIG 5 的琥珀色与紫色极点,\(L\) 加粗 FIG 6 的估计曲线。
状态空间模型与它的解
线性时不变(LTI)系统 \(\dot{\mathbf x}=A\mathbf x+B\mathbf u\),\(\mathbf y=C\mathbf x+D\mathbf u\)(机器人里 \(D\) 几乎总是 0)。对 \(e^{-At}\mathbf x\) 求导,得 \(\tfrac{d}{dt}(e^{-At}\mathbf x)=e^{-At}B\mathbf u\),两边积分即得"常数变易"公式:第一项是自由响应,第二项是输入引起的强迫响应。
第一项是系统"自己"怎么走(3.6 节的线性流),第二项是输入的贡献:每一时刻的输入 \(B\mathbf u(\tau)\) 被系统的自由运动 \(e^{A(t-\tau)}\) 一路带到时刻 \(t\)。状态的选法不唯一:换坐标 \(\mathbf x=T\mathbf z\) 得到 \((T^{-1}AT,\,T^{-1}B,\,CT)\),特征值不变,可控性、可观性也不变,所以这些都是系统本身的性质,而不是坐标的。
线性化与特征值稳定性
对非线性系统 \(\dot{\mathbf x}=\mathbf f(\mathbf x,\mathbf u)\),在平衡对 \((\mathbf x^*,\mathbf u^*)\)(\(\mathbf f(\mathbf x^*,\mathbf u^*)=0\))处取 \(A=\partial\mathbf f/\partial\mathbf x\)、\(B=\partial\mathbf f/\partial\mathbf u\),误差项是 \(O(\|\delta\mathbf x\|^2+\|\delta\mathbf u\|^2)\)(2.4 节)。LTI 系统 \(\dot{\mathbf x}=A\mathbf x\) 的稳定性完全由特征值决定:
- 所有 \(\operatorname{Re}\lambda_i<0\)(\(A\) 是 Hurwitz 的)\(\iff\) 渐近稳定,而且是指数稳定:\(\|\mathbf x(t)\|\le c\,e^{-\alpha t}\|\mathbf x_0\|\)。
- 某个 \(\operatorname{Re}\lambda_i>0\) \(\Rightarrow\) 不稳定。
- 实部为零的特征值是临界情况:它们若是单重的(或每个都有足够多的特征向量),解有界但不衰减(无阻尼的摆,"中心");若是重根而特征向量不够(约当块),解会按 \(t^k\) 增长。双积分器 \(\ddot q=0\) 的两个特征值都是 0,可 \(q(t)=q_0+\dot q_0t\) 一直跑远:不稳定。
李雅普诺夫间接法把这些结论带回非线性系统:若线性化 \(A\) 是 Hurwitz 的,平衡点局部指数稳定;若 \(A\) 有正实部特征值,平衡点不稳定;若有实部为零的特征值,线性化无法判断,要看高阶项(3.6 节提到的 Hartman–Grobman 定理只覆盖双曲平衡点)。无阻尼摆(\(b=0\))的下平衡点正是这种情况:线性化是中心,判断要靠下面的能量论证。
李雅普诺夫直接法与 LaSalle 不变原理
平衡点 \(\mathbf x^*=0\) 稳定:对任意 \(\varepsilon>0\) 存在 \(\delta>0\),使 \(\|\mathbf x_0\|<\delta\) 的解永远满足 \(\|\mathbf x(t)\|<\varepsilon\);渐近稳定:稳定且附近的解趋于 0。定理(李雅普诺夫,1892):设在包含原点的区域 \(D\) 上有连续可微的 \(V\),满足
则原点稳定;若 \(\dot V<0\)(\(\mathbf x\ne0\)),则渐近稳定;若再有 \(D=\R^n\) 且 \(\|\mathbf x\|\to\infty\) 时 \(V\to\infty\)(径向无界),则全局渐近稳定。直觉:\(V\) 的下水平集 \(\Omega_c=\{V\le c\}\) 是一只只嵌套的碗,\(\dot V\le0\) 说明状态不会爬出任何一只碗。
摆的能量只给出 \(\dot E=-b\omega^2\le0\),在整条 \(\omega=0\) 线上都等于零,不满足严格不等式。LaSalle 不变原理(1960)补上了这一步:若 \(\Omega\) 是有界的正不变集且其中 \(\dot V\le0\),则从 \(\Omega\) 出发的解趋于 \(\{\dot V=0\}\) 中最大的不变集。在 \(\omega=0\) 线上能"待住"的解必须一直 \(\omega\equiv0\),于是 \(\dot\omega=-(g/l)\sin\theta=0\),只剩平衡点。取 \(\Omega=\{E<2mgl,\ |\theta|<\pi\}\)(能量低于翻过顶点所需的值),其中只有 \(\theta=0\) 这一个平衡点,所以里面的每条轨迹都回到挂着的位置:这正是 FIG 2 中能量候选的绿色"眼睛"。
线性系统的二次型证书。取 \(V=\mathbf x^\top P\mathbf x\),则 \(\dot V=\mathbf x^\top(A^\top P+PA)\mathbf x\)。定理:\(A\) 是 Hurwitz 的,当且仅当对任意 \(Q\succ0\),李雅普诺夫方程
有唯一解且 \(P\succ0\)(此时 \(P=\int_0^\infty e^{A^\top t}Qe^{At}dt\))。它是 \(n(n+1)/2\) 个未知数的线性方程组。对挂着的摆,\(A=\begin{bmatrix}0&1\\-a&-b\end{bmatrix}\)(\(a=g/l\)),\(Q=I\),逐项解出 \(p_{12}=\tfrac1{2a}\),\(p_{22}=\tfrac{1+2p_{12}}{2b}\),\(p_{11}=a\,p_{22}+b\,p_{12}\)。\(b=0.5\) 时 \(P=\begin{bmatrix}10.83&0.051\\0.051&1.10\end{bmatrix}\)。把它用到非线性摆上,\(\dot V\) 等于 \(-\mathbf x^\top\mathbf x\) 加上高阶项,只在原点附近为负;FIG 2 搜出的 \(c^*=6.49\) 对应的椭圆在 \(\theta\) 方向只伸到 0.77 rad(约 44°)。这就是"用线性化证明"的典型代价:可靠,但保守。
可控性:秩判据、格拉姆矩阵与 PBH 判据
从 \(\mathbf x_0=0\) 出发,\(\mathbf x(T)=\int_0^Te^{A(T-\tau)}B\mathbf u(\tau)d\tau\)。由凯莱–哈密顿定理,\(A^n\) 是 \(I,A,\dots,A^{n-1}\) 的线性组合,所以 \(e^{At}B\) 永远落在 \(\operatorname{span}\{B,AB,\dots,A^{n-1}B\}\) 里:能到达的状态不会超出 \(\mathcal C\) 的列空间。反过来,若 \(\mathcal C\) 满秩,下面的格拉姆矩阵可逆,就能显式构造出到达任意目标的输入:
\(\mathbf u^*\) 是所有到达 \(\mathbf x_T\) 的输入中能量最小的一个(它是一个最小范数最小二乘解,参见 1.13 节的思路)。能量公式说明单位能量能到达的集合就是椭圆 \(\mathbf x^\top W_T^{-1}\mathbf x\le1\),半轴是 \(W_T\) 特征值的平方根。例:小车(双积分器)\(A=\begin{bmatrix}0&1\\0&0\end{bmatrix}\),\(B=\begin{bmatrix}0\\1\end{bmatrix}\),\(e^{A\tau}B=(\tau,1)\),得 \(W_T=\begin{bmatrix}T^3/3&T^2/2\\T^2/2&T\end{bmatrix}\)。从静止移动距离 \(d\) 再停下(\(\mathbf x_T=(d,0)\)),所需能量 \(12d^2/T^3\):\(T=2\) s 时 1.5,\(T=1\) s 时 12(FIG 3 的任务)。时间减半,最高速度要翻倍,而且要在一半的时间里达到,所以力要变成 4 倍;能量 \(\int u^2dt\) 于是变成 \(16\times\tfrac12=8\) 倍,即 \(1/T^3\)。
PBH 判据(Popov–Belevitch–Hautus)给出几何意义:\((A,B)\) 不可控,当且仅当存在 \(A\) 的左特征向量 \(\mathbf w^\top A=\lambda\mathbf w^\top\) 满足 \(\mathbf w^\top B=0\)。也就是说,有一个模态 \(\mathbf w^\top\mathbf x\) 按 \(\dot{(\mathbf w^\top\mathbf x)}=\lambda\,\mathbf w^\top\mathbf x\) 自己演化,输入完全碰不到它。FIG 3 的 \(A=\operatorname{diag}(-1,-3)\):\(\det\mathcal C=\det[B,\ AB]=-2b_1b_2\),\(B\) 落在某根坐标轴上时,另一个坐标就是碰不到的模态。若不可控的模态本身是稳定的(如这里),系统仍可镇定(stabilizable),这对 LQR 已经够用。
注意线性化不可控不等于非线性系统不可控。独轮车在静止处的线性化 \(\dot{\mathbf q}=B(\theta)\mathbf u\) 只有两列,秩为 2 < 3,可 9.1 节用李括号证明了它可控:侧移要靠"前进–转向–后退–转回"这种二阶效应,线性化看不见。
极点配置与 Ackermann 公式
定理:单输入系统 \((A,B)\) 可控,则对任意 \(n\) 次实系数首一多项式 \(\varphi(s)\),存在唯一的 \(K\) 使 \(\det(sI-(A-BK))=\varphi(s)\);不可控时,不可控模态的特征值无论 \(K\) 取什么都不会动。构造性的写法是 Ackermann 公式:
对 \(B=(0,\dots,0,1)^\top\) 形式的"可控标准形",\(A-BK\) 的最后一行恰好就是特征多项式的系数,于是每个增益直接对应一个系数,这正是第 5 节两行推导的来源。一个熟悉的特例:8.3 节的计算力矩把每个关节变成双积分器 \(\ddot e=a\),PD 律 \(a=-K_pe-K_d\dot e\) 就是 \(K=[K_p,K_d]\),把两个极点放在 \(s^2+K_ds+K_p=s^2+2\zeta\omega_ns+\omega_n^2\) 的根上。多输入时满足要求的 \(K\) 有无穷多个,多出来的自由度可以用来改善鲁棒性,或交给 LQR 去选。选极点的经验:欠阻尼极点对 \(\sigma\pm j\omega_d\) 的 2% 调节时间大约是 \(4/|\sigma|\);极点越靠左,增益越大(FIG 4 中 \(k_1=g/l+p_1p_2\))。
离散化:零阶保持与欧拉法
数字控制器每隔 \(T\) 秒读一次传感器、算一次 \(u_k\),然后在整个周期里保持这个值(零阶保持,ZOH)。在一个周期内 \(\mathbf u\) 是常数,把常数变易公式从 \(kT\) 积到 \((k+1)T\),得到精确的离散模型:
右边的分块指数是实际计算时的技巧(FIG 5 就用它)。\(A_d\) 的特征值是 \(z=e^{\lambda T}\):左半平面整个映到单位圆内,与 1.11 节"离散时间 \(|\lambda|<1\)"的判据完全对上。前向欧拉法把导数换成差分 \(\dot{\mathbf x}\approx(\mathbf x_{k+1}-\mathbf x_k)/T\):
欧拉法只是 \(e^{\lambda T}\) 的一阶近似,它的稳定区只是左半平面里一个圆心在 \(-1/T\)、半径 \(1/T\) 的圆盘。弱阻尼极点 \(-\zeta\omega_n\pm j\omega_n\sqrt{1-\zeta^2}\) 给出 \(|z|^2=1-2\zeta\omega_nT+\omega_n^2T^2\),所以只要 \(T>2\zeta/\omega_n\),欧拉模型就会把一个稳定的振子预测成发散的;快速实极点 \(\lambda\) 则要求 \(T<2/|\lambda|\),这就是 2.5 节讲过的显式欧拉步长限制。其它常用的映射还有双线性(Tustin)变换 \(z=\tfrac{1+\lambda T/2}{1-\lambda T/2}\),它把整个左半平面映进单位圆,常用于把连续设计的控制器转成离散的。
采样控制回路:被控对象是连续的,控制器 \(u_k=-K\mathbf x_k\) 每个周期更新一次,真实的闭环是 \(\mathbf x_{k+1}=(A_d-B_dK)\mathbf x_k\)。保持器让控制总是"慢半拍",大致相当于 \(T/2\) 的延迟,所以按连续时间设计的 \(K\) 在 \(T\) 变大时会失稳,而且比欧拉模型预测的早。
可观性与龙伯格观测器
状态反馈要用到整个 \(\mathbf x\),可传感器只给出 \(\mathbf y=C\mathbf x\)。能不能从 \(\mathbf y(t)\) 和已知的 \(\mathbf u(t)\) 还原出 \(\mathbf x\)?把 \(\mathbf y,\dot{\mathbf y},\ddot{\mathbf y},\dots\) 写出来(\(\mathbf u=0\) 时 \(\mathbf y^{(k)}=CA^k\mathbf x\)),答案是
\((A,C)\) 可观,当且仅当 \(\mathcal O\) 的秩为 \(n\);这与"\((A^\top,C^\top)\) 可控"完全等价(对偶性)。龙伯格观测器(1964)是一个并行运行的模型,用"测量减预测"的差把它往正确的方向拉。估计误差 \(\mathbf e=\mathbf x-\hat{\mathbf x}\) 的动态与输入无关,只由 \(A-LC\) 决定;按对偶性,可观时 \(A-LC\) 的特征值可以任意配置,配置方法就是对 \((A^\top,C^\top)\) 做极点配置。摆的两种传感器:
- 编码器 \(C=[1\ \ 0]\):\(\mathcal O=I\),总是可观。把两个观测器极点都放在 \(-p\):\(L_1=2p-b\),\(L_2=p^2-a-bL_1\)(\(a=\tfrac gl\cos\theta^*\))。
- 陀螺仪(只测角速度)\(C=[0\ \ 1]\):\(\mathcal O=\begin{bmatrix}0&1\\-a&-b\end{bmatrix}\),\(\det\mathcal O=a\)。有重力作用在角度上(\(a\ne0\))时可观:角度改变重力力矩,重力力矩又改变角速度,所以角速度里"藏着"角度。关节在水平面里转动时 \(a=0\),不可观:给角度加任何常数偏移,陀螺仪读数都不变。这正是 IMU 只靠陀螺仪无法知道航向(偏航角)的原因(15.1 节)。
观测器极点越快,估计收敛越快,但 \(L\) 越大,测量噪声也被放大得越多。4.8 节的卡尔曼滤波正是按噪声的统计量来选 \(L\) 的观测器。把观测器和状态反馈 \(\mathbf u=-K\hat{\mathbf x}\) 接在一起,闭环特征值恰好是 \(A-BK\) 与 \(A-LC\) 两组的并集(分离原理),可以分别设计;13.3 节的 LQG 会再回到这一点。
7机器人中的它:控制器跑在计算机上,传感器只看到一部分
离散化:同一个系统,两种离散模型
机器人的控制器以固定周期运行:力控机械臂常见 1 kHz,移动底盘的速度环可能只有几十 Hz,视觉伺服受相机帧率限制。模型预测控制(13.4 节)和 LQR 的离散版本都需要一个离散模型 \(\mathbf x_{k+1}=A_d\mathbf x_k+B_d\mathbf u_k\)。下图比较两种得到它的方法:精确的零阶保持(琥珀色)和"把导数换成差分"的欧拉法(紫色)。线是真实系统,点是两个离散模型每隔 \(T\) 秒的预测。
- "柔性关节"(\(\omega_n=6\) rad/s,\(\zeta=0.1\)):加大 \(T\),直到欧拉模型的极点跑出单位圆(\(T>2\zeta/\omega_n\approx0.033\) s),而零阶保持模型和真实系统都依然稳定。
- "数字控制":加大控制周期 \(T\),直到真实的采样回路失稳(琥珀色极点出圆,约 \(T\ge0.211\) s),而欧拉模型还说"稳定"(它要到 \(T=0.4\) s 才失稳)。
"刚性系统"预设里,快模态 \(\lambda=-40\)(比如电机电流)让欧拉模型在 \(T>0.025\) s 时开始正负交替地振荡,\(T>0.05\) s 时发散,而它对应的真实运动在几十毫秒内就衰减完了。所以:用于预测和优化的模型,用精确离散化(MPC 求解器通常用 RK4 或隐式积分器,不用一步欧拉);控制周期要比闭环的时间常数短得多。FIG 5 的设计是 \(-5\) 重根(时间常数 0.2 s),采样周期 \(T\) 到 0.211 s,也就是大约一个闭环时间常数时,回路就失稳了。
观测器:从编码器还原角速度
编码器只给角度。直接对角度做差分得到的速度噪声很大(噪声除以一个很小的 \(T\))。观测器换个思路:让一个模型和摆一起跑,用测量去修正它。下图中摆受已知的力矩 \(u(t)=2\sin(1.3t)\) N·m 驱动,真实初始角 0.4 rad,观测器从 0 开始猜。选传感器和安装方式,调观测器极点和测量噪声。
- 选"陀螺仪 ω"和"水平面内",让观测器跑满 5 s:无论 \(p\) 多大,角度误差都还停在初始值的 90% 以上。换成"挂着",同样的陀螺仪为什么又能估出角度了?
- 用编码器,把测量噪声调到 \(\sigma\ge0.02\) rad,再把观测器极点推到 \(p\ge25\):ω 估计的 RMS 超过 0.03 rad/s。和 \(p=5\) 比一比,快的观测器付出了什么?
在平衡点附近线性化是几乎所有经典机器人控制器的第一步:四旋翼在悬停点线性化后,小倾角下水平加速度约等于 \(g\) 乘倾角,位置与姿态成为一串积分器,于是有了 13.1 节里的级联结构;平衡车和小车倒立摆在竖直点线性化后用状态反馈或 LQR(8.1 节的自动平衡);9.2 节的线性倒立摆 \(\ddot x=\tfrac{g}{z_c}(x-p)\) 是一个鞍点,特征值 \(\pm\omega\)(\(\omega=\sqrt{g/z_c}\)),"捕获点" \(x+\dot x/\omega\) 正是它不稳定模态的坐标。机械臂经计算力矩变成双积分器后,\(K_p=\omega_n^2,K_d=2\zeta\omega_n\) 就是极点配置(8.3 节)。工具:python-control(ss、ctrb、obsv、place、lyap、sample_system),SciPy(signal.place_poles、signal.cont2discrete 的 'zoh' 和 'euler' 方法、linalg.solve_continuous_lyapunov、linalg.expm),MATLAB 的 ss、ctrb、place、lyap、c2d;Drake 的 Linearize 给出系统在平衡点的 \((A,B,C,D)\),MuJoCo 的 mjd_transitionFD 用有限差分直接给出离散时间的 \(A,B\)。李雅普诺夫证书的自动化:平方和(SOS)规划可以搜索多项式 \(V\),LQR-Trees(Tedrake 等,2010)用它验证每个 LQR 控制器的吸引域并拼成覆盖整个状态空间的"漏斗";也有用神经网络学 \(V\) 并验证的工作(Chang 等,2019)。观测器:许多伺服驱动器用观测器而不是差分来估计速度;卡尔曼滤波(4.8 节)是按噪声统计最优的观测器,视觉惯性里程计里全局位置和航向不可观(15.1 节)。
8常见误区
特征值只担保局部稳定。FIG 1 里离开平衡点 60° 线性化误差已超过 15%;FIG 2 里线性化导出的证书只覆盖约 44°;FIG 4 里闭环极点都在左半平面,力矩一受限,摆照样摔倒。设计完线性控制器,一定要在非线性模型上(带饱和、带延迟)仿真,并想清楚它要在多大的范围内工作。
对固定的 \(A\),特征值决定最终是否衰减,却不管中途。\(A=\begin{bmatrix}-1&20\\0&-2\end{bmatrix}\) 的特征值是 \(-1,-2\),可 \(\|e^{At}\|\) 在 \(t\approx0.69\) s 时达到约 5.0:状态先放大 5 倍再衰减(非正规矩阵的"瞬态增长"),足以撞上饱和或关节限位。对时变系统更糟:Markus–Yamabe(1960)的例子里 \(A(t)\) 在每一时刻的特征值都是 \(-0.25\pm0.66j\),解却按 \(e^{t/2}\) 增长(10 s 后放大约 148 倍)。"冻结时间看特征值"对时变或非线性系统不是证明。
李雅普诺夫定理是充分条件。FIG 2 的朴素二次型在稳定的摆上也会上升,那只说明这个 \(V\) 选错了,什么也没证明。反过来,\(\dot V\le0\) 只给出"稳定",要得到"渐近稳定"还需要严格不等式或 LaSalle 原理;摆的能量在 \(b=0\) 时 \(\dot V\equiv0\),摆就永远摆下去,这时它稳定但不渐近稳定。要证明不稳定,需要另外的定理(如 Chetaev 定理)或一个正实部的线性化特征值。
秩判据是非黑即白的,可控程度却是连续的。FIG 3 的"两个一阶模态"里,默认的 \(B\)(45°)到达默认目标需要能量 0.81;\(B\) 离特征方向只差 10° 时涨到约 14.4,差 5.1°(刚好在吸附范围外)时约 70。极点也一样:能放不代表该放,重极点 \(-p\) 的增益按 \(p^2\) 增长,很快撞上力矩上限、放大传感器噪声,并让采样延迟变得致命(FIG 4、FIG 5)。看 \(W_T\) 的最小特征值或 \(\mathcal C\) 的条件数,而不只看秩。
\(A_d=I+AT\) 写起来最省事,但它会把稳定的弱阻尼振子预测成发散(FIG 5 中 \(T>0.033\) s),把快模态预测成正负跳动;放进 MPC 里,优化器会认真地"利用"这些假动态。另一方面,即使模型精确,真实的数字回路也比连续设计更不稳定,因为保持器带来约 \(T/2\) 的延迟:FIG 5 的控制器在 \(T=0.211\) s 失稳,而欧拉模型说能撑到 0.4 s。离散化用 expm 或 cont2discrete(..., method='zoh'),并在真实的采样周期下检查 \(A_d-B_dK\) 的特征值。
9小练习
10延伸阅读
- K. J. Åström & R. M. Murray, Feedback Systems: An Introduction for Scientists and Engineers, Princeton University Press, 2008 (2nd ed. 2021) — 动态行为、线性系统、状态反馈与输出反馈的几章是本节最好的入门读物(在线免费)
- H. K. Khalil, Nonlinear Systems, 3rd ed., Prentice Hall, 2002, Ch. 4 — 李雅普诺夫稳定性、LaSalle 原理、线性化与吸引域估计
- J.-J. E. Slotine & W. Li, Applied Nonlinear Control, Prentice Hall, 1991 — 相平面分析与李雅普诺夫方法,面向工程师
- G. F. Franklin, J. D. Powell & M. L. Workman, Digital Control of Dynamic Systems, 3rd ed., Addison-Wesley, 1998 — 零阶保持离散化、采样率选择与数字控制器设计
- R. Tedrake, Underactuated Robotics, MIT course notes — 摆、小车倒立摆、李雅普诺夫分析与平方和验证的机器人视角(在线免费)
- A. M. Lyapunov, The General Problem of the Stability of Motion, 1892; English translation by A. T. Fuller, Int. J. Control 55(3), 1992 — 直接法与间接法的出处
- R. E. Kalman, On the General Theory of Control Systems, Proc. 1st IFAC Congress, Moscow, 1960 — 可控性与可观性的概念及对偶性
- D. G. Luenberger, Observing the State of a Linear System, IEEE Trans. Military Electronics 8(2), 1964 — 龙伯格观测器
- R. Tedrake, I. R. Manchester, M. Tobenkin & J. W. Roberts, LQR-Trees: Feedback Motion Planning via Sums-of-Squares Verification, Int. J. Robotics Research 29(8), 2010 — 用 SOS 验证的吸引域把局部线性控制器拼成全局控制器