1. LQR前世今生:从经典控制到最优控制,LQR的数学本质与工程意义
做控制这么多年,我越来越觉得LQR是个很有意思的东西。它不像PID那样凭经验调参,也不像H∞那样上来就是一堆矩阵不等式。LQR站在经典控制和现代控制的交界处,既有数学上的严谨,又有工程上的实用。今天我们就聊聊它的来龙去脉。
1.1 经典控制的天花板
先说说经典控制。PID、超前滞后、根轨迹、频域分析——这些工具对付单输入单输出系统确实好用。我刚开始做嵌入式控制时,一个PID调半天,调好了也挺得意。
但问题来了。你想想看,一个四轴飞行器,四个电机,六个自由度,耦合得一塌糊涂。PID能调吗?能,但每个环路都要单独设计,还要考虑解耦。我见过一个同事调了两个月,最后飞起来还是晃。
经典控制的核心局限在于:
- 单变量思维:一次只能处理一个输入一个输出
- 局部最优:每个环路单独调,全局性能很难保证
- 缺乏系统性:没有统一的框架去处理多变量耦合
说白了,经典控制是「摸着石头过河」。经验丰富的老工程师能调得很好,但换个人就不行了。而且,你没法证明你的控制器是最优的——你只能说「这样调还行」。
1.2 最优控制的诞生
上世纪60年代,状态空间法兴起。卡尔曼老爷子提出了一个想法:为什么不把控制问题变成一个优化问题?
这就是最优控制的核心思想——找一个控制律,让某个性能指标最小。
举个例子。你开车从A到B,怎么开最好?
- 如果追求时间最短,那就地板油
- 如果追求油耗最低,那就匀速
- 如果追求舒适,那就缓加速缓减速
你看,不同的目标对应不同的「最优」。LQR做的就是这件事——给你一个二次型性能指标,然后解析地求出最优控制律。
LQR的数学本质:对于线性系统ẋ = Ax + Bu,找一个状态反馈u = -Kx,使得性能指标J = ∫(xᵀQx + uᵀRu)dt最小。
这里Q和R就是权重矩阵。Q惩罚状态偏差,R惩罚控制能量。你调Q和R,就是在告诉控制器:「我更在意精度,还是更在意能耗?」
1.3 从Riccati方程到工程实现
LQR的求解核心是代数Riccati方程:
AᵀP + PA - PBR⁻¹BᵀP + Q = 0
解出P之后,最优增益就是:
K = R⁻¹BᵀP
嗯,这里要注意。Riccati方程的解P是唯一的正定对称矩阵。这意味着什么?意味着只要系统能控,LQR的解就是唯一的、全局最优的。
我在项目中遇到过一个问题:明明Riccati方程解出来了,仿真也跑得好好的,一上硬件就炸了。后来发现是采样时间太慢,离散化后的系统特性变了。所以啊,理论归理论,工程实现时一定要考虑离散化误差和计算延迟。
个人经验:我建议先用MATLAB的lqr()函数算一遍连续域的解,再用c2d()离散化。别直接用dlqr(),除非你很清楚离散化对系统的影响。
1.4 LQR的工程意义
LQR为什么在工程界这么受欢迎?我总结了几点:
| 特性 | 工程价值 |
|---|---|
| 解析解 | 不需要迭代优化,计算量小,适合嵌入式实时控制 |
| 全局最优 | 只要模型准确,LQR就是该性能指标下的最优解 |
| 多变量 | 天然支持MIMO系统,不需要手动解耦 |
| 鲁棒性 | LQR有60°的相位裕度和无限幅值裕度(理论上) |
我曾经在一个平衡车项目里用LQR。一开始用PID,调了三天,站是站住了,但稍微推一下就倒。换成LQR之后,Q矩阵里把角度偏差的权重设大一点,R设小一点,一次调通。推都推不倒。
避坑指南:LQR的鲁棒性是有前提的——模型要准。我曾经在一个温度控制项目里直接用标称模型算LQR,结果实际系统有20%的参数摄动,控制器直接失稳。后来加了积分项才稳住。记住,LQR对模型误差敏感,必要时要加鲁棒性补偿。
1.5 知识体系总览
下面这张图是我自己整理的LQR知识框架。从经典控制到最优控制,再到LQR的具体实现和调优,整个脉络都在里面了。
这张图把LQR的来龙去脉讲清楚了。从左到右是控制理论的演进,从上到下是LQR的三大支柱。你学LQR,不能光学公式,得知道它从哪里来、要解决什么问题、工程上怎么落地。
1.6 小结
LQR不是万能的。它要求系统是线性的、模型是准确的、状态是可测的。但如果你满足这些条件,LQR就是你能找到的最优解。
我个人觉得,LQR最大的价值不是那个公式,而是它提供了一种思维方式——把控制问题变成优化问题。你调的不是PID参数,而是性能指标的权重。这个思路,比LQR本身更值钱。
下一节我们开始动手。我会带你从零搭建一个LQR控制器,从模型建立到代码实现,一步步来。
公众号:蓝海资料掘金营,微信deep3321