LQR控制器——简单实现与仿真

本文回顾了线性二次型最优控制(LQR)理论在系统控制中的应用,通过调整反馈增益k来改变闭环系统的特征值,以优化成本函数。作者使用Simulink对倒立摆进行建模和仿真,通过调整Q和R矩阵的值来平衡状态收敛速度和控制输入大小。实验结果显示,增大R矩阵的值可以减小控制输入u,而减小Q矩阵的值则能减慢状态收敛速度,适应实际应用场景的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对B站一位良心up主的视频学习总结
安利:https://www.bilibili.com/video/BV1RW411q7FD/?spm_id_from=trigger_reload

对于可镇定的线性系统: x ˙ = A x + B u \dot{x}=Ax+Bu x˙=Ax+Bu, u = − k x u=-kx u=−kx
写成闭环形式,也就是 x ˙ = A c l x \dot{x}=A_{cl}x x˙=Acl​x
我们的做法是通过选择反馈增益k来改变闭环矩阵 A c l A_{cl} Acl​ 的特征值,从而控制系统的表现。
那么

  • 什么样的反馈增益k才是最好的呢?

在优化理论中,引入cost function的概念,来帮助选择反馈增益k。

找到一个k,使得在满足镇定系统的同时,最小化cost function。

m i n J = ∫ 0 ∞ [ x T Q x + u T R u ] d t min J=\int_{0}{\infty}[x{T}Qx+u^{T}Ru]dt minJ=∫0∞​[xTQx+uTRu]dt
这里,矩阵Q和R都是对角正定矩阵,他们的每一个对角元素的值都代表着对每一个对应的状态 x i ≠ 0 x_{i}\neq 0 xi​​=0和输入 u i ≠ 0 u_{i}\neq 0 ui​​=0的惩罚。

  • 矩阵对角元素的值越大,表示对该状态或输入的惩罚越厉害。那么体现在最终系统的表现上就是,该状态或输入的值越小。

视频中,老师对倒立摆进行建模,得到其状态空间方程下的系统矩阵:A,B
倒立摆建模
状态空间方程

然后利用simulink对其进行仿真:(这里目的主要是学习一下simulink仿真时,如何从0进行建模与simulink仿真)
SIMULINK
第一次选择Q=[100 0; 0 1]; R=.01,在MATLAB中用

k=lqr(A,B,Q,R)

命令得到该cost function下的最有反馈增益k。其内部主要是通过求解Riccati方程得到k。

得到如下仿真曲线
仿真曲线
可以看到状态最终能够被镇定到0,但是控制输入u太大。
那么接下来,可以尝试将和u相关的矩阵R的值给大一点。对u的值惩罚大,从而得到的仿真结果中,u的计算结果就相对要小一点。同时将Q矩阵中的元素值给小一点,表示不是很关心状态的收敛速度。

第二次选择Q=[1 0; 0 1]; R=100,在MATLAB中用

k=lqr(A,B,Q,R)

得到新的k,仿真得到如下对照曲线。(为了便于观察,复制了一份刚刚的系统,作为对照)
对照仿真
可以看到,蓝色的线条是第二组的仿真结果。收敛速度变慢了,但是控制输入u的值相对的变小了。这样更加符合实际情况,因为有时会考虑到执行器饱和的问题。

总结

这里主要是复习一下LQR的相关知识,并且系统的学习一下,对一个实际的问题进行建模、simulink仿真的过程。
simulink搭建一个模型的时候,主要考虑以下步骤:

  • 将状态空间方程分别写成单个状态的表达式
  • 用n个积分器由 x ˙ \dot{x} x˙得到 x x x,从而得到各个状态,注意积分器要置初值,默认0
  • 搭建控制输入u,构成闭环系统
  • 必要时,对模块化的子系统创建subsystem,便于观察。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值