3、LQR控制理论精讲:最优控制问题定义、Riccati方程的推导与求解、LQR控制器设计步骤
各位同学,欢迎来到第三讲。
上一章我们聊了无人机的基础动力学模型,算是把“被控对象”给摸透了。今天咱们要啃的,是LQR控制理论这块硬骨头。说实话,我刚入行那会儿,看到Riccati方程也是一头雾水。但后来我发现,只要把几个核心概念理清楚,这东西其实没那么玄乎。
咱们今天的目标很明确:搞懂LQR到底在干什么,以及怎么把它用到无人机轨迹跟踪上。
3.1 最优控制问题:我们到底在优化什么?
先问大家一个问题:你设计一个控制器,最关心什么?
稳定?当然。响应快?必须的。但很多时候,我们还得考虑“代价”。比如,你让无人机猛打舵,姿态是稳住了,但电池电量哗哗往下掉。又或者,你为了省电,控制量给得很小,结果飞机飘得跟喝醉了似的。
LQR解决的就是这个矛盾。它要找一个平衡点——用最小的控制代价,换取最小的状态误差。
数学上,我们定义一个性能指标函数(也叫代价函数):
J = ∫ (x^T Q x + u^T R u) dt
这里:
- x 是状态向量(比如位置误差、速度误差、姿态角误差)
- u 是控制输入向量(比如电机转速、舵面偏角)
- Q 是状态权重矩阵(对角阵)
- R 是控制权重矩阵(对角阵)
说白了,Q 越大,说明你越在意状态误差,希望系统快速收敛;R 越大,说明你越心疼能量,不希望控制动作太剧烈。
核心思想:LQR就是找一个控制律 u = -K x,使得上面的 J 最小。这个 K 就是我们要设计的反馈增益矩阵。
我在做四旋翼悬停控制时,就吃过这个亏。一开始我把 Q 矩阵里的位置误差权重设得特别大,结果飞机确实停得稳,但电机一直在高频抖动,噪音大不说,续航直接砍了三分之一。后来我适当调高了 R 矩阵的权重,才找到那个“稳且省电”的平衡点。
3.2 Riccati方程的推导:别怕,我们走一遍逻辑
好,现在问题来了:怎么求这个 K 矩阵?
这就引出了传说中的Riccati方程。很多教材一上来就甩公式,看得人头皮发麻。我换个角度,咱们从“为什么要解这个方程”说起。
假设系统是线性的:ẋ = A x + B u
我们想让 J 最小。这其实是一个变分法问题。经过一系列推导(这里不展开,否则一节课都不够),最终会得到一个结论:
最优控制律 u* = -R⁻¹ B^T P x
其中,P 是一个对称正定矩阵,它满足下面这个方程:
A^T P + P A - P B R⁻¹ B^T P + Q = 0
这就是代数Riccati方程(ARE)。
嗯,看起来有点吓人。但你仔细看,它其实就是一个关于 P 的二次型矩阵方程。A、B、Q、R 都是已知的,我们只需要解出 P 就行。
我的经验:在实际工程中,你根本不需要手算这个方程。MATLAB 里一行命令 [K, P, E] = lqr(A, B, Q, R) 就搞定了。但理解它的物理意义很重要——P 矩阵其实代表了“代价对状态的敏感度”。
为什么会这样?你想想看,如果某个状态稍微偏离一点,代价就飙升,那 P 中对应的元素就会很大。控制器就会拼命把这个状态拉回来。
3.3 LQR控制器设计步骤:手把手教你搭
理论说完了,咱们来点实际的。设计一个LQR控制器,我一般分四步走:
- 建立线性化模型:把无人机在悬停点附近的动力学模型写成 ẋ = A x + B u 的形式。这一步我们在上一章已经做过了。
- 选择权重矩阵 Q 和 R:这是最考验经验的一步。我个人的习惯是,先用 Bryson's Rule 定个初值——把 Q 和 R 设成对角阵,对角线元素取状态和控制量最大允许值的倒数平方。
- 求解Riccati方程:用 MATLAB 或 Python 的 control 库求解,得到 P 和 K。
- 仿真验证与调参:把 K 代入系统,跑仿真。看响应曲线,如果超调太大,增大 Q 中对应项的权重;如果控制量饱和了,增大 R 的权重。
下面是一个简单的 MATLAB 代码示例,演示了如何设计一个LQR位置控制器:
% 定义系统矩阵(简化版,仅用于演示)
A = [0 1 0 0; 0 0 0 0; 0 0 0 1; 0 0 0 0]; % 状态:位置x, 速度vx, 位置y, 速度vy
B = [0 0; 1 0; 0 0; 0 1]; % 控制输入:x方向加速度,y方向加速度
% 定义权重矩阵
Q = diag([10, 1, 10, 1]); % 位置误差权重10,速度误差权重1
R = diag([0.1, 0.1]); % 控制量权重0.1
% 求解LQR
[K, P, E] = lqr(A, B, Q, R);
% 输出反馈增益
disp('反馈增益矩阵 K:');
disp(K);
注意:千万别以为仿真跑通了就万事大吉。我曾经在仿真里调得漂漂亮亮的参数,上真机后飞机直接翻了个跟头。为什么?因为仿真模型忽略了执行器延迟和传感器噪声。所以,一定要留出20%~30%的稳定裕度。
3.4 知识体系总览:一张图说清楚
为了让大家对LQR的整体脉络有个直观印象,我画了张流程图。你看完应该就能明白,从问题定义到最终实现,每一步是干什么的。
3.5 关于调参,我再多说两句
调参这件事,说白了就是“试错”。但试错也有技巧。
我个人的习惯是:先调 Q,再调 R。先把 R 固定在一个较小的值(比如 0.1*I),然后增大 Q 中对应关键状态的权重,直到响应速度满足要求。如果发现控制量太大(比如电机转速超过限幅),再适当增大 R。
另外,有一个小技巧:Q 和 R 的相对大小比绝对大小更重要。你把 Q 和 R 同时乘以 10,得到的 K 矩阵是一样的。所以,你只需要关注它们的比值。
一句话总结:LQR 的核心就是“用数学的方式,帮你找到那个最省力又能稳住的控制律”。你只需要告诉它“什么更重要”,剩下的交给 Riccati 方程。
好了,这一讲的内容就到这儿。下一章我们会把 LQR 和上一章的无人机模型结合起来,看看完整的轨迹跟踪控制器到底长什么样。