LQR:最优状态反馈
6.12 节用动态规划解出了有限时域的 LQR。这一节把时域拉到无穷远:Riccati 递推收敛到代数 Riccati 方程,给出一个常数增益 \(K\),一行 \(\mathbf u=-K\mathbf x\) 就能把倒立摆小车立住。我们会在增益平面上看"最优"长什么样,用 Bryson 法则按物理单位调 \(Q\)、\(R\),看线性控制器在非线性、有饱和的真实系统上能管多大的范围,用时变 LQR 和 iLQR 把单摆从下方摆起来,最后看 LQR 自带的鲁棒裕度,以及加上卡尔曼滤波器后的 LQG 与分离原理。
1为什么机器人需要它
13.1 节的 PID 一次只管一个回路:一个误差,一个力矩。可是很多机器人只有一个执行器,却要同时照顾好几个量。8.1 节的倒立摆小车只能推小车,却要同时让摆杆竖直、让小车回到中间;平衡车、球形机器人、四旋翼悬停、人形机器人的质心平衡都是这样。状态有四个分量 \(\mathbf x=(x,\dot x,\theta,\dot\theta)\),反馈律 \(F=-K\mathbf x\) 有四个耦合在一起的增益,一个一个手调几乎不可能,而且它们的符号还常常"反直觉"。
13.2 节的极点配置能把闭环极点放到任何指定的位置,却不告诉你该放在哪里:极点越靠左,响应越快,力也越大,会撞上电机的极限。LQR(线性二次调节器,linear-quadratic regulator)换一个问法:你只需写下你在乎什么,
"偏离多少要付多少代价"(\(Q\))和"用多大力要付多少代价"(\(R\)),LQR 就给出让 \(J\) 最小的反馈律。答案出奇地简单:它是一个常数矩阵 \(K\),\(\mathbf u=-K\mathbf x\),离线解一个矩阵方程就能得到,每个控制周期只需做一次矩阵乘向量。6.12 节已经推出了有限时域 \(N\) 步的版本(Riccati 递推和"价值函数是椭圆"),并看到时域足够长时增益趋于常数。这一节接着往下走:
- 无限时域的增益从哪里来(代数 Riccati 方程),为什么它一定让线性系统稳定;
- \(Q\)、\(R\) 怎么定(Bryson 法则),"最优"在增益空间里长什么样;
- 在真实的非线性、有力的上限的系统上,它能管多大的范围(吸引域);
- 不止平衡一个点,还要跟踪一条轨迹:时变 LQR,以及用它当求解器的 iLQR;
- 传感器只测到部分状态、还带噪声时怎么办(LQG),以及 LQR 有多"皮实"(鲁棒裕度)。
2直觉:每个增益都有一个价钱
先看最简单的不稳定系统:一个电机直接驱动的倒立单摆(质量 \(m=1\) kg 集中在 \(l=0.5\) m 处,\(\theta\) 从竖直向上量起)。线性化后 \(ml^2\ddot\theta=mgl\,\theta+u\),控制律 \(u=-k_\theta\theta-k_\omega\dot\theta\) 只有两个增益,于是所有可能的控制器构成一个平面。平面上每一点是一个控制器,它从初始倾角 \(\theta_0=0.2\) rad 出发会产生一条响应,这条响应有一个总代价
(\(\Delta t=10\) ms,控制器以 100 Hz 运行,求和乘 \(\Delta t\) 只是为了让数值像积分。)下图左边把每个 \(K\) 的代价画成颜色,越青代价越低;红色区域是闭环不稳定的增益,代价为无穷。拖动琥珀色的点亲手调增益,绿色菱形是 LQR 算出的 \(K^\star\)。右边是两者的响应。
- 保持 \(r=0.01\),拖动琥珀色的点,让代价比最优只高不到 1%(\(J/J^\star<1.01\))。你停下的位置离绿色菱形有多远?代价地形在最优点附近有多平?
- 把 \(r\) 调到 100 以上(力矩极贵)。\(K^\star\) 会不会一路退到 0,或者退到红线上?它停在哪里?
LQR 不是"另一种调参技巧",而是把调参换成了说清楚目标:一旦写下 \(Q\)、\(R\),最优增益就唯一确定了,而且它对所有初始状态同时最优(换一个 \(\theta_0\),地形变了,最低点不变)。最低点附近的地形很平:把 \(K^\star\) 整体放大 1.3 倍,代价只多 1.9%;缩小到 0.7 倍,多 5%。所以真正要花心思的不是把增益算到小数点后几位,而是选对 \(Q\)、\(R\)。另一面是 \(r\to\infty\) 时 \(K^\star\) 不会退到零:对不稳定的系统,"不花力气"不是一个选项,LQR 会停在用最小代价把不稳定极点镜像到左半平面的增益上(这里 \(k_\theta\to9.6\),大约是 \(2mgl\))。
3动手玩:用 LQR 立住倒立摆小车
现在换成 8.1 节的倒立摆小车:小车 \(M_c=1\) kg,摆端质量 \(m=0.3\) kg,杆长 \(l=0.8\) m,只能推小车。在竖直位置线性化(13.2 节的做法),状态 \(\mathbf x=(x,\dot x,\theta,\dot\theta)\):
\(A_c\) 有一个特征值 \(+\sqrt{(M_c+m)g/(M_cl)}\approx+3.99\) s⁻¹:不加控制,倾角的误差每 0.25 s 放大 \(e\) 倍。控制器以 100 Hz 运行,所以先按 13.2 节的零阶保持把 \((A_c,B_c)\) 离散化成 \((A,B)\),再解离散 Riccati 方程得到 \(K\)。
怎么选 \(Q\) 和 \(R\)?它们的数值本身没有意义(同时乘 10,\(K\) 不变),有意义的是比例。Bryson 法则给出一个按物理单位思考的起点:
每一项代价都变成"相对于可接受值的比例的平方":小车偏离 \(x_{\max}\)、摆杆倾斜 \(\theta_{\max}\)、用力 \(F_{\max}\),各算 1 份代价,单位就消掉了。下图的三个滑块就是 \(x_{\max}\)、\(\theta_{\max}\)、\(F_{\max}\)(速度的权重设为 0),右上角的公式实时显示由它们算出的 \(Q\)、\(R\)、\(K\)。把绿色的目标标记拖到导轨上的新位置,松手后小车开到那里;按"踢一下"给摆杆一个 1.5 rad/s 的角速度冲量;也可以直接拖动摆端的小球把摆杆扳歪,松手看它恢复。
- 用默认权重,把目标挪开至少 0.8 m(拖动绿色三角,或者点"目标 +1 m / −1 m")。小车出发时先往反方向退了几厘米(至少 3 cm)。为什么要先退?
- 调成"温柔"的控制器:完成一次至少 0.8 m 的移动并停稳(误差 5 cm 内),整个过程中力的峰值小于 2 N,中途不要踢或拖摆杆。提示:用 Bryson 法则的语言想一想,你愿意让小车偏多远、愿意出多大的力?
- 反过来,让控制器对小车位置"贪心":\(x_{\max}\le0.1\) m,\(F_{\max}\ge30\) N(\(\theta_{\max}\) 取 2° 以上),然后踢一下。线性闭环的极点全在左半平面,摆杆却倒了。是什么出了问题?(第 4 节的 FIG 3 会回答。)
LQR 自己"发现"了倒立摆的诀窍。要把小车向右开,必须先让摆杆向右倾,否则一加速摆杆就向左倒;而要让摆杆向右倾,小车得先向左退一下。默认权重下,移动 1 m 时小车先倒退约 12 cm,力的峰值 18.4 N,2.4 s 内停到目标 5 cm 以内。这就是增益 \(K\) 里小车位置那一项"符号看上去是反的"的原因(8.1 节提到过):没有人告诉 LQR 这个策略,它只是 Riccati 方程的解。手调四个耦合的增益很难碰对这种结构。
4另外两个视角:吸引域与轨迹跟踪
线性的增益,非线性的系统
LQR 的"最优"和"一定稳定"都是对线性化模型说的。真实系统里有 \(\sin\theta\)、有离心项 \(ml\dot\theta^2\sin\theta\),电机还有上限。2.4 节说过:线性化只在工作点附近可信。那么"附近"到底多大?下图回答这个问题:把初始倾角 \(\theta_0\) 和初始角速度 \(\dot\theta_0\) 铺成一张网格(小车静止在原点),每一格都用非线性模型、带力限幅地仿真 6 s,能立回来的格子涂绿色,倒下的涂红色。绿色区域就是这个控制器的吸引域(region of attraction)在这张切片上的样子。
- 用默认权重,先把力的上限调到 100 N(绿色约占网格的 35%),再降到 10 N 或更低:绿色缩到 15% 以下。线性模型对这件事一无所知:它的闭环极点一点没变。
- 在同一个力上限下,分别看"温柔"和"贪心"两套权重(两者都要算完)。哪一个能接住更多的初始状态?这和 FIG 2 里贪心控制器被踢倒是同一回事吗?
在 30 N 的上限下,温柔的权重接住了网格的约 54%,默认的约 28%,贪心的只有约 6%。贪心的增益在线性模型里"更好"(极点更靠左),可它为一点点偏差就要求巨大的力,力一饱和,反馈律就不再是 \(-K\mathbf x\),最优性和稳定性的证明都不再成立。实践中的结论是:先用 Bryson 法则把 \(F_{\max}\) 设得比电机的真实上限小,让控制器在正常扰动下根本碰不到饱和;必须贴着极限工作时,就要换成能显式处理约束的方法(13.4 节的 MPC)。琥珀色椭圆比绿色区域小得多:Lyapunov 函数给出的保证是保守的,但它是一个证书,而网格仿真只是一些例子。把这种椭圆沿轨迹连成一棵树,就是 LQR-Trees(Tedrake 等,2010)。
跟踪一条轨迹:时变 LQR 与 iLQR
平衡只是"守住一个点"。很多任务要沿一条轨迹运动:把单摆从下垂位置甩到竖直,四旋翼翻个跟头,机械臂快速搬运。思路是一样的:在一条名义轨迹 \((\mathbf x^\star_k,\mathbf u^\star_k)\) 附近线性化,偏差 \(\delta\mathbf x=\mathbf x-\mathbf x^\star_k\) 近似满足 \(\delta\mathbf x_{k+1}\approx A_k\delta\mathbf x_k+B_k\delta\mathbf u_k\),只是 \(A_k,B_k\) 随时间变。这时 6.12 节的有限时域 Riccati 递推正好派上用场,得到时变增益 \(K_k\),控制律是 \(\mathbf u_k=\mathbf u^\star_k-K_k(\mathbf x_k-\mathbf x^\star_k)\)。这就是时变 LQR(TVLQR)。
名义轨迹本身从哪里来?iLQR 用同一个工具来求它:从一串猜测的控制量出发,(1) 前向仿真得到轨迹;(2) 沿轨迹线性化动力学、把代价展开到二次;(3) 用 Riccati 递推反向求出"该怎么改"(一个前馈修正 \(\mathbf k_k\) 和一个反馈增益 \(K_k\));(4) 带线搜索地前向执行修正,重复直到收敛。6.13 节把它称为打靶法的一个高效求解器。下图让一个单摆(\(m=1\) kg,\(l=0.5\) m)在 4 s 内从下垂摆到竖直。仿真里没有硬性的力矩上限,但力矩的代价 \(R\) 让最优解舍不得用大力矩,峰值远小于 \(mgl\),只好来回荡几下积攒能量:先运行 iLQR,再把得到的力矩序列用到一个质量有偏差的"真实"单摆上,比较直接回放(开环)和 TVLQR 跟踪。
- 按"运行 iLQR"直到收敛(相对代价下降小于 \(10^{-6}\))。最优轨迹在相平面上先往哪边走?为什么它要先往回荡一下,而不是直接往上推?(看读数里的力矩峰值和 \(mgl\)。)
- iLQR 收敛后,把质量误差调到 ±10% 或更大,按"播放":开环回放最后离竖直超过 30°,TVLQR 却停在 1° 以内。
稳态 LQR:把 6.12 节的 Riccati 递推跑到收敛,得到常数 \(K\),守住一个平衡点(FIG 2)。时变 LQR:沿一条已知轨迹的 \(A_k,B_k\) 跑一遍有限时域递推,得到 \(K_k\),守住一条轨迹(FIG 4 的琥珀色)。iLQR / DDP:轨迹本身未知,就"递推一次、改一次轨迹"反复迭代,每次迭代就是一个局部的时变 LQR 问题;它最后一次反向传递给出的 \(K_k\) 本身就是一个现成的跟踪控制器。三者的计算核心都是同一个矩阵递推。
5再看数学
提示:把鼠标悬停在公式中带底色的符号上,对应的图元素会被高亮:\(J(K)\) 点亮 FIG 1 的等值线,\(K^\star\) 点亮 FIG 1 的绿色菱形,\(\mathbf u=-K\mathbf x\) 点亮 FIG 2 的力箭头,\(P\) 点亮 FIG 3 的椭圆,\(K_k\) 点亮 FIG 4 的增益曲线,回差不等式点亮 FIG 5 的禁区圆盘,卡尔曼增益 \(L\) 点亮 FIG 6 的估计器极点。
从有限时域到代数 Riccati 方程
6.12 节的递推是 \(P_k=Q+A^\top P_{k+1}A-A^\top P_{k+1}B\,(R+B^\top P_{k+1}B)^{-1}B^\top P_{k+1}A\)(与 6.12 节写成 \(Q+A^\top P_{k+1}(A-BK_k)\) 的形式等价)。时域 \(N\to\infty\) 时,若 \(P_k\) 收敛到某个 \(P\),它必须是递推的不动点,也就是离散代数 Riccati 方程(DARE)的解:
什么时候解存在且唯一?若 \((A,B)\) 可镇定(不稳定的模态都能被 \(\mathbf u\) 影响到,13.2 节的可控性条件的弱化版)且 \((A,Q^{1/2})\) 可检测(每个不稳定的模态都会在代价里"被看见"),则 DARE 有唯一的半正定解使 \(A-BK\) 的所有特征值都在单位圆内。第二个条件常被忽略:若 \(Q\) 对某个不稳定模态是零,"让它发散"不花任何代价,LQR 就不会去管它。FIG 2 里速度权重为零却没有问题,因为位置和角度被罚了,而速度会体现在它们的变化里。
怎么解?最直接的是把 6.12 节的递推一直跑下去。对 8.1 节那组权重(\(Q=\mathrm{diag}(1,1,10,1)\),\(R=0.1\))在 100 Hz 的模型上,要跑 536 步,增益相邻两步的相对变化才小于 \(10^{-6}\)。实用的求解器更快:Schur 方法(Laub,1979)对哈密顿矩阵做一次特征分解直接得到 \(P\),MATLAB、SciPy 的 solve_discrete_are 就是这一类;本页的代码用"倍增"算法,每一步把递推的时域翻倍,同样的问题 12 步就收敛。
为什么闭环一定稳定:\(P\) 本身就是 Lyapunov 函数
贝尔曼方程说,最优剩余代价 \(V(\mathbf x)=\mathbf x^\top P\mathbf x\) 等于"这一步的代价 + 下一步的剩余代价"。沿最优闭环 \(\mathbf x_{k+1}=(A-BK)\mathbf x_k\):
\(V\) 正定、每一步都不增,正是 13.2 节的 Lyapunov 函数,所以 LQR 的稳定性是"白送"的:不需要另外去找证书,Riccati 方程的解就是证书。FIG 3 的椭圆就是 \(V\) 的一个等值面:在非线性系统上,只要在某个水平集 \(\{V\le c\}\) 内 \(V\) 仍然下降,这个集合里的初始状态就都能被接住。
连续时间版本
对 \(\dot{\mathbf x}=A_c\mathbf x+B_c\mathbf u\)、\(J=\int_0^\infty(\mathbf x^\top Q\mathbf x+\mathbf u^\top R\mathbf u)\,dt\),同样的推导(6.12 节的贝尔曼方程换成哈密顿–雅可比–贝尔曼方程)给出连续代数 Riccati 方程(CARE):
8.1 节"自动平衡"用的就是它:\(Q=\mathrm{diag}(1,1,10,1)\),\(R=0.1\) 给出 \(K=(-3.16,-6.10,-55.0,-14.9)\)。用 100 Hz 的离散模型解 DARE(权重同比例),小车位置的增益是 \(-2.97\),小了约 6%;步长缩到 1 ms,变成 \(-3.14\),趋向连续解。控制器以多快的频率运行,就应该用那个频率的离散模型来解。
回差不等式与鲁棒裕度
在执行器处把回路断开(单输入、全状态反馈、连续时间),环路传递函数是 \(L(s)=K(sI-A_c)^{-1}B_c\)。从 CARE 可以推出(Kalman,1964):
几何上:奈奎斯特曲线 \(L(j\omega)\) 永远不进入以 \(-1\) 为圆心、半径为 1 的圆盘。于是它与负实轴的交点要么在 \(-2\) 左边、要么在 0 右边,把执行器增益乘上任何 \(\beta>1/2\) 都不会让曲线穿过 \(-1\):增益裕度至少是 \([1/2,\infty)\)。单位圆与这个圆盘交在与 \(-1\) 相隔 60° 的两点,所以曲线穿过单位圆时离 \(-1\) 至少 60°:相位裕度至少 60°。这是 LQR 白送的第二件礼物,FIG 5 会把它画出来,并说明它的边界。
时变 LQR 与 iLQR 的递推
TVLQR 就是 6.12 节的递推,把 \(A,B\) 换成沿名义轨迹的雅可比 \(A_k=\partial\mathbf f/\partial\mathbf x\)、\(B_k=\partial\mathbf f/\partial\mathbf u\)(在 \((\mathbf x^\star_k,\mathbf u^\star_k)\) 处取值),终端 \(P_N\) 取目标点的稳态 LQR 解:
iLQR 的反向传递多带一个一次项:把代价在当前轨迹附近展开成 \(\ell_k\approx\ell+\ell_{\mathbf x}^\top\delta\mathbf x+\ell_{\mathbf u}^\top\delta\mathbf u+\tfrac12(\cdots)\),价值函数也就多了线性项 \(\mathbf v_k^\top\delta\mathbf x\)。记 \(Q_{\mathbf u}\)、\(Q_{\mathbf u\mathbf u}\)、\(Q_{\mathbf u\mathbf x}\) 为局部"Q 函数"(这一步的代价加下一步的价值函数)对 \(\delta\mathbf u\)、\(\delta\mathbf x\) 的导数(它们不是权重矩阵 \(Q\)),反向递推给出前馈修正 \(\mathbf k_k=-Q_{\mathbf u\mathbf u}^{-1}Q_{\mathbf u}\) 和与 TVLQR 同形的增益 \(K_k=Q_{\mathbf u\mathbf u}^{-1}Q_{\mathbf u\mathbf x}\),前向传递用 \(\mathbf u_k=\bar{\mathbf u}_k+\alpha\mathbf k_k-K_k(\mathbf x_k-\bar{\mathbf x}_k)\),步长 \(\alpha\) 从 1 开始减半,直到代价下降。iLQR 线性化动力学时只保留一阶项,相当于对整条轨迹做 6.6 节的高斯–牛顿;保留动力学的二阶导数就是 DDP(Jacobson 与 Mayne,1970),收敛更快,每步更贵。FIG 4 里 \(Q_{\mathbf u\mathbf u}\) 上加了一个很小的正则项 \(\mu\),线搜索失败时把 \(\mu\) 放大,这是 6.6 节 LM 阻尼的同一个想法。
LQG 与分离原理
LQR 假设整个状态 \(\mathbf x\) 都量得到。实际上 FIG 2 的小车只有两个编码器:小车位置 \(x\) 和摆角 \(\theta\),而且带噪声,即 \(\mathbf y=C\mathbf x+\mathbf v\),\(C\) 取出 \(x\) 和 \(\theta\) 两行。4.8 节的卡尔曼滤波器给出最优估计 \(\hat{\mathbf x}\)(那里卡尔曼增益记作 \(K\),这里为了不和 LQR 增益混淆改记为 \(L\))。它的稳态增益来自对偶的一个 Riccati 方程:把 DARE 里的 \((A,B,Q,R)\) 换成 \((A^\top,C^\top,W,V)\),\(W\)、\(V\) 是过程噪声和测量噪声的协方差。线性二次高斯(LQG)控制器就是把两者串起来:
分离原理:写成真实状态 \(\mathbf x\) 与估计误差 \(\mathbf e=\mathbf x-\hat{\mathbf x}\) 的组合,闭环矩阵是块三角的,它的特征值恰好是 \(A-BK\)(控制器)和 \((I-LC)A\)(估计器)的特征值的并集。所以可以分开设计:LQR 只管 \(Q\)、\(R\),卡尔曼滤波器只管 \(W\)、\(V\),合起来既稳定,在线性高斯假设下也是最优的。FIG 6 把 8 × 8 闭环矩阵的特征值直接算出来,与两组 4 个极点逐一重合。
6机器人中的它:鲁棒性与只量得到一部分状态
真实的控制器不在完美的模型上运行:电机的力矩常数有误差(相当于执行器增益 \(\beta\neq1\)),通信、滤波和计算会带来延迟 \(\tau\)。下图在连续时间里为倒立摆小车解 CARE,画出 \(L(j\omega)\) 在 \(-1\) 附近的奈奎斯特图,再让你乘上增益 \(\beta\)、加上纯延迟 \(e^{-j\omega\tau}\)。右边是线性化闭环从 3° 初始倾角出发的响应,直接告诉你稳不稳。
- 选"贪心"权重,\(\beta=1\),慢慢加大延迟,找到闭环失稳的那个 \(\tau\)(应在 25 ms 以内)。再换成"默认":同样的延迟还稳吗?60° 的相位裕度为什么挡不住延迟?
三套权重的相位裕度都在 60° 到 65° 之间,名不虚传;但能承受的延迟相差很大:温柔约 116 ms,默认约 66 ms,贪心只有约 16 ms。延迟裕度等于相位裕度除以穿越频率 \(\omega_c\),而贪心的控制器 \(\omega_c\approx70\) rad/s,是默认的 4 倍多。增益方向上,保证的是 \(\beta>1/2\) 都稳定,实际的下限是:温柔 0.47,默认 0.27,贪心 0.05。100 Hz 的数字控制器单是零阶保持就相当于约 5 ms 的延迟,再加上传感器滤波和通信,几十毫秒的延迟在真实机器人上并不少见,所以"带宽越高越好"并不成立。
LQR 的保证还有一个前提:全部状态都被精确地测到。只要中间插进一个观测器,这些保证就没有了。Doyle(1978)的论文标题就是结论:"Guaranteed margins for LQG regulators",摘要只有一句:"There are none."。下图在 FIG 2 的小车上只测量带噪声的 \(x\) 和 \(\theta\),比较三种做法:理想的全状态 LQR、用相邻两次测量的差分来估计速度、卡尔曼滤波器(LQG)。
- 把角度噪声调到 1° 左右(1.0° 到 1.3°):差分估速度的控制器把摆杆弄倒了,LQG 的 \(\theta\) 的 RMS 却仍在 1° 以内。噪声为什么会被差分放大?(每 10 ms 差一次,1° 的噪声变成多大的速度噪声?)
- 保持 \(\sigma_\theta=0.5^\circ\),把"滤波器假设的过程噪声"拉到 0.01 倍(过分相信模型),LQG 的 \(\theta\) RMS 涨到原来的 3 倍以上;再拉到 100 倍(过分相信测量),这时变差的是哪一项?
默认设置(\(\sigma_\theta=0.5^\circ\))下:理想 LQR 的力 RMS 是 0.37 N,LQG 是 0.68 N,差分估速度是 23.8 N。差分的力几乎一直在 30 N 的上限之间来回打,真实的电机会发热、齿轮会磨损,摆杆的 RMS 是 2.8°,LQG 是 0.49°(理想 LQR 是 0.18°)。卡尔曼滤波器用模型把各次测量"平均"起来:它知道摆杆不会在 10 ms 里突然改变 1 rad/s 的角速度。
平衡类机器人:两轮自平衡车、球形机器人(ballbot)、反作用轮倒立摆,常见的做法正是本节的流程:在竖直点线性化,离线解 Riccati 方程,在 100 Hz 到 1 kHz 的回路里做一次 \(\mathbf u=-K\hat{\mathbf x}\),状态由 IMU 和编码器经滤波器估计。人形机器人:MIT 的 Atlas 控制器(Kuindersma 等,2016)把质心/ZMP 简化模型上时变 LQR 的最优剩余代价(cost-to-go)当作目标函数,放进每个控制周期求解、包含整机动力学与接触约束的二次规划里(13.7 节)。轨迹优化:iLQR/DDP 是很多运动生成工具的核心,例如面向足式机器人多接触最优控制的 Crocoddyl(FDDP 求解器),以及 MuJoCo MPC 里的 iLQG 规划器;它们反向传递得到的 \(K_k\) 常被直接用作跟踪反馈。软件:MATLAB 的 lqr/dlqr/lqi、python-control 的 lqr/dlqr、SciPy 的 solve_continuous_are/solve_discrete_are、Drake 的 LinearQuadraticRegulator 与 FiniteHorizonLinearQuadraticRegulator。边界:一旦约束(力矩、关节限位、摩擦锥)经常起作用,LQR 就让位给 13.4 节的 MPC;而 MPC 的终端代价通常就是这里的 \(\mathbf x^\top P\mathbf x\)。
7常见误区
\(Q\) 和 \(R\) 同时乘以任何正数,\(K\) 不变(只有 \(P\) 跟着缩放);把角度从弧度换成度,\(Q\) 里对应的项就差了 \((180/\pi)^2\approx3283\) 倍。"\(Q=I,\ R=1\)"不是一个中性的默认值,它隐含着"1 m 的偏差、1 rad 的倾斜和 1 N 的力一样重要"。先用 Bryson 法则按物理单位写下可接受的范围,再根据仿真结果调整。
LQR 只对你写下的代价和线性模型最优。它不知道力有上限(FIG 3:同样 30 N 的上限,贪心权重的吸引域只有温柔权重的约八分之一),不知道 \(\sin\theta\ne\theta\),也不知道模型参数不准。闭环极点"更靠左"只说明线性模型里收敛更快,不说明真实系统更稳。上线前要在非线性、带饱和、带噪声和延迟的仿真里检验。
LQR 是纯比例的状态反馈。对 FIG 2 的默认控制器,小车上持续施加 1 N 的推力,小车最后会停在离目标约 5.4 cm 的地方,而且偏向推力的反方向(因为要靠小车位置那一项产生 −1 N 的力来抵消推力,而那一项的符号是"反的")。和 13.1 节的 I 项一样,补救办法是把误差的积分 \(\int(x-x_{\mathrm{ref}})\,dt\) 加进状态里一起做 LQR(MATLAB 的 lqi),或者估计出扰动再前馈抵消。
CARE 的增益假设控制力连续变化。控制器以 100 Hz 运行时,零阶保持本身就带来约半个周期的延迟,第 5 节里同一组权重的离散增益已经比连续增益小了约 6%;频率更低、增益更"贪心"时差别更大,FIG 5 里贪心控制器 16 ms 的延迟就足以失稳。用实际的采样周期离散化后解 DARE,把已知的计算和通信延迟也放进模型(例如给状态加上一拍延迟),再看 FIG 5 那样的裕度。
分离原理保证 LQG 的标称闭环稳定,但 \([1/2,\infty)\) 的增益裕度和 60° 的相位裕度只对全状态 LQR 成立,加上观测器后可能任意小(Doyle,1978)。估计器越"相信测量"(FIG 6 里过程噪声假设得越大),就越接近差分,噪声越多地进到力里。要找回鲁棒性,可以用回路传递恢复(LTR)有意调整滤波器,或者直接用 \(H_\infty\)、\(\mu\) 综合这类鲁棒控制方法,至少要在带参数误差的仿真里检验 LQG。
8小练习
9延伸阅读
- R. E. Kalman, Contributions to the Theory of Optimal Control, Boletín de la Sociedad Matemática Mexicana 5, 1960 — LQR 与 Riccati 方程的奠基论文
- R. E. Kalman, When Is a Linear Control System Optimal?, J. Basic Engineering 86(1), 1964 — 回差不等式与"逆最优"问题
- B. D. O. Anderson & J. B. Moore, Optimal Control: Linear Quadratic Methods, Prentice Hall, 1990 — LQR、LQG、鲁棒性与回路传递恢复的标准教材
- A. E. Bryson & Y.-C. Ho, Applied Optimal Control, Hemisphere, 1975 — 最优控制的经典教材,按可接受范围选权重的思路常归于 Bryson
- J. C. Doyle, Guaranteed Margins for LQG Regulators, IEEE Trans. Automatic Control 23(4), 1978 — "There are none."
- M. G. Safonov & M. Athans, Gain and Phase Margin for Multiloop LQG Regulators, IEEE Trans. Automatic Control 22(2), 1977 — 多输入 LQR 的增益与相位裕度
- A. J. Laub, A Schur Method for Solving Algebraic Riccati Equations, IEEE Trans. Automatic Control 24(6), 1979 — 今天的 Riccati 求解器的基础
- D. H. Jacobson & D. Q. Mayne, Differential Dynamic Programming, Elsevier, 1970 — DDP 的原始专著
- W. Li & E. Todorov, Iterative Linear Quadratic Regulator Design for Nonlinear Biological Movement Systems, ICINCO 2004 — iLQR
- Y. Tassa, T. Erez & E. Todorov, Synthesis and Stabilization of Complex Behaviors through Online Trajectory Optimization, IROS 2012 — 实时 iLQG 模型预测控制
- 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 — 用 Lyapunov 椭圆拼出的反馈运动规划
- R. Tedrake, Underactuated Robotics, MIT course notes — LQR、时变 LQR、吸引域与倒立摆小车,附 Drake 代码
- S. Kuindersma, R. Deits, M. Fallon, A. Valenzuela, H. Dai, F. Permenter, T. Koolen, P. Marion & R. Tedrake, Optimization-based Locomotion Planning, Estimation, and Control Design for the Atlas Humanoid Robot, Autonomous Robots 40(3), 2016 — 人形机器人上的时变 LQR 与 QP 控制