想了解更多技术分享请搜索“技术”标签,本人水平有限,内容可能不严谨或存在错误,如有发现错误请在评论区处留言,欢迎批评指正。
推荐视频
跳出课本看LQR控制,从公式到代码!_哔哩哔哩_bilibili
【手把手教做平衡步兵轮足】7_LQR系统建模_哔哩哔哩_bilibili
一、什么LQR控制算法
LQR 的全称是 Linear Quadratic Regulator,中文叫线性二次型调节器。它是一种最优控制算法,核心目标就是:让系统以 “最小的控制代价”,稳定地达到目标状态。LQR是现代控制理论中最优反馈控制的核心算法,其本质是在满足线性系统动力学约束的前提下,通过最小化二次型性能指标,得到唯一的最优线性状态反馈律,并从数学上严格保证闭环系统的渐近稳定性。
典型适用场景:
- 多变量耦合系统(如无人机姿态控制:俯仰 / 横滚 / 偏航耦合);
- 高阶系统(如机械臂多关节、飞行器六自由度控制);
- 对 “控制代价” 敏感的场景(如卫星推进器燃料消耗、电机功耗限制)。
1.线性系统(Linear):
就是系统的 “输入” 和 “输出” 是成正比的简单关系。
比如:你踩油门的力度(输入),和汽车加速的快慢(输出),大概是成正比的 —— 踩得越狠,加速越快(忽略复杂因素)。
反之,非线性系统就是输入输出不成正比,比如:你踩油门太猛,轮胎打滑了,再踩油门速度也不涨了。
LQR 的控制对象必须是线性时不变(LTI)系统,其动力学特性由状态空间方程描述,分为连续时间和离散时间两种形式。
连续时间线性系统:


离散时间线性系统:

2.二次型指标(Quadratic):
可以理解成 “咱们要付出的总代价”。这个代价分两部分:
①状态偏差代价:系统实际状态和目标状态的差距。比如:你想让小车停在10米处,结果停在了8米,差距是2米,这个差距越大,代价越高。
②控制量代价:为了调整系统,咱们付出的 “力气”。比如:为了让小车从8米到10米,你需要踩油门,踩得越狠(控制量越大),油耗越高,代价越高。
二次型的意思就是:这些代价会被平方计算(比如差距的平方、控制量的平方),目的是惩罚大的偏差和大的控制量—— 毕竟偏差太大、控制太猛,系统容易出问题。

- Q:状态权重矩阵(云台中角度权重设大,优先保证对准);
- R:控制权重矩阵(设大则限制电机电压,避免过载);
- J越小,云台既准又省电。
通过求解离散代数黎卡提方程,得到唯一的正定矩阵P:

再用P算出最优反馈增益矩阵Kd:

3.调节器(Regulator):
核心作用是 “维稳” —— 让系统待在一个固定的目标状态,就算受到干扰,也能快速拉回来。
比如:让无人机悬停在5米高度,就算有风刮它,也能通过调整螺旋桨转速,保持在5米。
LQR 的最优控制指令是状态反馈形式,直接用当前状态偏差计算:

仅反馈会有小偏差,加稳态前馈项u0,最终控制律:

二、LQR控制流程(以大小yaw云台为例子)
先离线建模求解增益,再在线实时闭环控制。最最重要的是要对系统进行数学建模或系统辨识求出状态向量与控制输入之间的函数关系。
(数学建模需要大量的物理知识,本文略过物理知识的讲解,请自行学习。)
1.明确控制目标与系统变量:


- 控制目标:
- 双层 Yaw 云台双轴精准跟踪目标角度θ1r、θ2r,抑制轴间耦合。
- 状态向量定义:
- 包含所有需要控制的核心状态,n为状态维度(云台 n=4)
- θ1/θ 2= 大 / 小 Yaw 轴角度,ω 1/ω 2= 大 / 小 Yaw 轴角速度。
- 控制输入定义:驱动系统的执行量,p为输入维度(云台p=2)
- u1/u2= 大 / 小 Yaw 轴电机控制输入(电压 / 力矩 / 速度指令)。
2.系统矩阵Ad、输入矩阵Bd
把系统规律写成一种标准的表达形式。
方法 1:连续模型离散化(理论建模法,最常用):
- 离散状态方程为:
- 其中:(以下仅为参考,实际上要根据数学建模得出的函数关系转换得到A和B)
- J1/J2:
- 大 / 小 Yaw 轴等效惯量(电机 + 负载);
- B1/B2:
- 大 / 小 Yaw 轴等效阻尼;
- J12/J21:
- 轴间耦合惯量(小轴转动对大轴的影响);
- Kt1/Kt2:
- 电机力矩常数。
方法 2:系统辨识(实验法,无模型时用):
若云台结构复杂、无法推导理论模型,或者要得到像阻尼系数这样不能通过计算的来的参数,考虑直接通过测试实验的数据,对数据进行分析计算得出想要的参数:
- 给双电机施加伪随机激励信号(如白噪声电压);
- 用编码器采集双轴的角度 / 角速度数据;
- 用工具拟合离散模型:
- Matlab:用System Identification Toolbox,导入输入输出数据,选择 “状态空间模型”,直接输Ad/Bd;
- 优势:无需知道任何机械参数,直接贴合实际系统。
3.状态权重矩阵Q、控制权重矩阵R。
Q惩罚状态偏差,R惩罚控制输入代价,无通用公式,靠工程经验整定,核心原则是 “跟踪精度” 与 “控制代价” 的权衡 。
①状态权重矩阵 Q(n×n 对称半正定,云台 n=4):
- 结构选择:
- 优先选对角矩阵(非对角元素为 0,简化整定),对角元素对应每个状态的惩罚权重。
- 取值原则:
- 对辅助状态(如角速度ω1,ω2),权重取小(如10∼50),抑制震荡即可;
- 若轴间耦合严重,可增大非对角元素(如θ1与ω2的耦合项),主动抑制耦合扰动。
- 云台示例:
- Q=diag{Qθ1,Qω1,Qθ2,Qω2}=diag{200,20,200,20}
②控制权重矩阵R(p×p对称正定,云台p=2):
- 结构选择:
- 优先选对角矩阵,对角元素对应每个控制输入的惩罚权重。
- 取值原则:
- 权重越大,控制输入越小(避免电机过载),但跟踪速度越慢;
- 权重越小,控制输入越大,跟踪速度越快,但易超调 / 过载;
- 双电机性能一致时,权重取相同值;性能不同时,弱电机权重取大。
- 云台示例:
- R=diag{R1,R2}=diag{1,1}
③整定技巧(试凑法,工程通用):
- 初始值:
- Q对角元素设为diag{100,10,100,10},R=diag{1,1};
- 仿真测试:
- 若跟踪慢 → 增大Q角度权重;若电机过载 → 增大R;若震荡 → 增大Q角速度权重;
- 迭代优化:
- 逐步调整,直到满足 “跟踪精度 + 控制约束” 的要求。
4.求解最优反馈增益Kd。
在获取Ad、Bd、Q、R后,求解最优反馈增益Kd(简称 K)的核心是先解离散黎卡提方程得矩阵P,再代入公式算Kd,工程中几乎不用手动算,优先用工具函数,以下是最简实操方法:
工程实操(Matlab 一行搞定,最常用):
matlab代码:
% 前面要定义好Ad(4×4)、Bd(4×2)、Q(4×4)、R(2×2)矩阵。
[Kd, P, E] = dlqr(Ad, Bd, Q, R); % 离散LQR求解核心函数
- Kd:就是你要的最优反馈增益矩阵(2×4),直接用于后续实时控制;
- P:黎卡提方程的解(4×4),可验证是否正定(工程中一般不用管);
- E:闭环系统特征值,若所有特征值模 < 1 → 系统稳定(关键验证)。
5.针对大小yaw云台进行实践
以下将采用数学建模的方式进行初步理论实操



对于其中的阻尼系数b就必须要用系统辨识法来获得了,方法有很多,本文略,感兴趣请自行搜索。
因为条件不太允许,我只能先实践到这里,后续的参数测量、数值计算、系统收敛性测试和最终成果无法给大家进行展示,这部分的内容推荐去观看文章开头推荐的视频,里面有详细的讲解。
三、谈谈个人对LQR控制算法的理解
- 相比于PID这种纯凭借经验调参的控制方式,LQR的控制是基于真实的物理模型的,在数学建模完备且精确的前提下,LQR的控制会更加精准,控制性能会更优秀。
- LQR对于多维度相互耦合的系统有天然的优势,不必像PID那样需要复杂的解耦合,商业上的多连杆的机械臂都是用的LQR进行控制的,当然算法会更加的复杂,仅仅只有LQR是不好用的,并且LQR的每一个参数都是有明确意义的,如果更新了机械结构不必像PID那样从头开始调,只需要修改相对应的数学建模模型的参数就行了。
- 对于简单的系统还是建议去使用PID,因为LQR对于单电机的控制没有很大的优势,反而因为它的复杂性,和对数学模型的依赖性,上手门槛很高,是很大的劣势,如果中途计算出现错误,那么LQR系统很可能就崩了,论下限完全比不过PID。












