1. LQR控制算法概述
线性二次调节器(Linear Quadratic Regulator,简称LQR)是现代控制理论中最经典的状态反馈控制器设计方法之一。我第一次接触LQR是在研究生阶段的机器人控制课程上,当时教授用一个简单的倒立摆案例展示了这个算法的神奇之处——通过精心设计的代价函数,能让不稳定的系统变得出奇地稳定。
LQR的核心思想是通过最小化一个包含状态变量和控制输入的二次型代价函数,来获得最优的状态反馈控制律。这种方法的精妙之处在于,它将控制问题转化为一个数学优化问题,通过求解Riccati方程得到最优反馈增益矩阵。在实际工程应用中,从航天器姿态控制到汽车巡航系统,LQR都展现出了强大的实用性。
提示:虽然LQR理论上是针对线性系统设计的,但通过在工作点附近线性化的方法,它也可以成功应用于许多非线性系统的控制中。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. LQR问题的数学表述
2.1 系统模型与代价函数
考虑一个线性时不变系统:
code复制ẋ(t) = Ax(t) + Bu(t)
其中x∈Rⁿ是状态向量,u∈Rᵐ是控制输入,A和B是适当维数的系统矩阵。
LQR的目标是找到控制律u(t) = -Kx(t),使得以下二次型代价函数最小化:
code复制J = ∫[x'(t)Qx(t) + u'(t)Ru(t)]dt
积分区间从0到∞,Q是半正定的状态权重矩阵,R是正定的控制权重矩阵。
2.2 设计参数的选择艺术
Q和R矩阵的选择是LQR设计中最需要工程经验的部分。一般来说:
- Q中对角线上较大的值表示对应的状态变量需要更严格地控制
- R中对角线上较大的值表示对应的控制输入需要更节省
- 通常从单位矩阵开始,然后根据仿真结果逐步调整
我在实际项目中总结出一个实用技巧:先令R=I,然后调整Q使得状态变量的相对重要性合理。例如对于位置控制系统,位置误差的权重通常应大于速度误差。
3. LQR的推导过程
3.1 哈密顿-雅可比-贝尔曼方程
LQR的推导基于最优控制理论中的HJB方程。对于无限时域问题,我们假设存在一个值函数V(x) = x'Px,其中P是对称正定矩阵。
将控制律u = -Kx代入HJB方程,经过一系列推导可以得到代数Riccati方程:
code复制A'P + PA - PBR⁻¹B'P + Q = 0
3.2 Riccati方程的求解
求解Riccati方程是LQR设计的核心计算步骤。在MATLAB中,这可以通过care函数实现:
matlab复制[K,P,e] = lqr(A,B,Q,R);
其中P是Riccati方程的解,K是最优反馈增益矩阵,e是闭环系统的极点。
对于小型系统,也可以手动求解。例如二阶系统,可以设P为对称矩阵:
code复制P = [p11 p12; p12 p22]
然后展开Riccati方程,得到关于p11,p12,p22的非线性方程组。
4. LQR的工程实现细节
4.1 离散时间LQR
在实际数字控制系统中,我们需要使用离散时间版本的LQR。离散时间Riccati方程为:
code复制P = A'PA - A'PB(B'PB+R)⁻¹B'PA + Q
对应的MATLAB函数是dlqr:
matlab复制[Kd,Pd,ed] = dlqr(Ad,Bd,Q,R);
4.2 权重矩阵的调整策略
经过多个项目的实践,我总结出以下调整经验:
- 首先确定哪些状态变量是最关键的,给它们分配较大的权重
- 确保Q矩阵是可观测的,即(Q,A)对是可检测的
- 从保守的R开始(较大值),然后逐步减小直到获得满意的响应速度
- 检查闭环系统的鲁棒性,特别是对模型不确定性的容忍度
5. LQR的扩展应用
5.1 跟踪问题的处理
标准的LQR是调节器问题,对于跟踪问题,可以通过状态扩展来实现。引入积分器状态:
code复制xₙ₊₁ = ∫(r - y)dt
其中r是参考信号,y是输出。这样就将跟踪问题转化为增广系统的调节问题。
5.2 输出反馈LQR
当不是所有状态都可测量时,可以结合观测器设计输出反馈LQR。常用的方法是设计一个Kalman滤波器来估计状态,然后与LQR组合形成LQG控制器。
6. 实际应用案例分析
6.1 倒立摆控制
以经典的倒立摆为例,系统状态为[θ, θ̇, x, ẋ],控制输入是小车驱动力u。设计步骤:
- 在工作点附近线性化系统
- 选择Q = diag([100,1,10,1]),R=1(强调角度和位置控制)
- 求解Riccati方程得到K
- 仿真验证控制器性能
6.2 无人机姿态控制
在四旋翼无人机项目中,我使用LQR进行姿态控制。由于俯仰、滚转和偏航动力学近似解耦,可以分别设计三个LQR控制器。关键点在于:
- 角度的权重应大于角速度
- 考虑电机饱和,需要限制控制增益大小
- 在实际飞行测试中需要微调权重
7. LQR的局限性与改进方向
虽然LQR是非常强大的控制方法,但也有其局限性:
- 仅适用于线性系统(或线性化后的系统)
- 对模型精度要求较高
- 没有直接考虑控制输入的约束
针对这些局限,发展出了许多改进方法,如:
- LQR with input constraints
- Robust LQR
- Nonlinear LQR (基于SDRE)
- Model Predictive Control (可以看作有限时域的约束LQR)
我在实际项目中经常遇到的一个问题是,当系统存在显著非线性时,简单的线性化LQR可能性能不佳。这时可以考虑在工作点附近设计多个LQR控制器,然后根据工作状态切换或插值。
