首页 > 编程语言 >控制算法之二:LQR控制

控制算法之二:LQR控制

时间:2024-11-17 12:15:08浏览次数:3  
标签:控制 函数 系统 控制算法 矩阵 LQR 之二 代价

1.前言

线性二次调节(Linear Quadratic Regulator,LQR)是一种经典的现代控制理论方法,用于构造线性系统的最优控制器,它的目标是在控制系统的动态过程中,尽可能减少误差能耗。LQR 的目标是通过最优控制输入,使系统状态最小化某一代价函数(即性能指标),以实现最佳控制。

2.应用场景

LQR 广泛用于工业控制、自动驾驶、航天器姿态控制、无人机控制等场景,特别是那些需要平衡控制精度和能量消耗的系统。

3.系统方程

对于一个系统\dot{x} = Ax + Bu,假设设计状态反馈控制器 u = -Kx,将控制输入带入系统方程中,则可以得到: 

\dot{x} = (A - BK) x = A_{mex} x......................................................................................................(1)

由于让系统稳定的条件是矩阵^{A_{mex}}特征值的实部全为负的,其实设计一个控制律使系统稳定并不难,我们可以随便找几个具有负实部的特征值,从而得到系统的特征方程,然后利用待定系数,从而得到K值,利用这种方法,我们其实可以得到好多控制量。但是,如果我们想得到一个好的或者最优的控制量,那怎么办呢?

这里,就引出了代价函数的定义:

J = \int_{0}^{\infty }(x^{T}Qx + u^{T}Ru) dt....................................................................................................(2)

其中,Q 和 R 是两个对角参数矩阵,分别决定了状态向量 x 和输入向量 u 的重要性。显然,J是一个二次型函数,这也是LQR中“Q”的由来

4. 代价函数的意义

考虑一个双变量系统,即x = \begin{bmatrix} x_{1}\\ x_{2} \end{bmatrix}, 则控制器设计为u = \begin{bmatrix} k{_{1}} & k{_{2}} \end{bmatrix} * \begin{bmatrix} x{_{1}}\\ x{_{2}} \end{bmatrix} = -k_{1}* x_{1}-k_{2}* x_{2}

假设Q = \begin{bmatrix} q_{1}& 0\\0 & q_{2} \end{bmatrix}R = r, 则 代价函数可以写成:

J = \int_{0}^{\infty } (q_{1}x_{1}^2{}+q_{2}x_{1}^2{}+ru^{2})dt...............................................................................................(3)

如果令q_{1}>q_{2}>r,则状态变量x{_{1}}在代价函数的占比最大,x{_{1}}的收敛速度较快;反之,r>q_{1}>q_{2},则说明u的占比最大,如果想要使代价函数最小,则控制量需要最小,这也就意味着更加节省能量。

接下来,就是如何来确定K

5.LQR控制器的设计

将控制律 u = -Kx 代入(2),可得代价函数:

J = \int_{0}^{\infty }[x^{T}(Q+K^{T}RK)x]dt...............................................................................................(4)

定义一个常量对称矩阵P = P^{T} > 0,且矩阵满足:

\frac{\mathrm{d} }{\mathrm{d} x}(x^{T}Px) = -x^{T}(Q+K^{T}RK)x.........................................................................................(5)

由式(4)和(5)可得:

J =- \int_{0}^{\infty }[\frac{\mathrm{d} }{\mathrm{d} x}(x^{T}Px)]dt = -(x^{T}Px|_{\infty }-x^{T}Px|_{0 }) =x^{T}(0)Px(0)...............................(6)

所以,由(6)可知,代价函数的大小只与系统的初始状态和P有关,若想使代价函数最小,也就是使P最小。那么就转换成为求P的最小值。

将式子(5)进行展开,可得:

\dot{x}^{T}Px+{x}^{T}P\dot{x}+{x}^{T}Qx+{x}^{T}{K}^{T}RKx = 0........................................................................(7)

将式(1)代入,可得:

x^{T}A_{mex}^{T}Px + x^{T}PA_{mex}x+ x^{T}Qx+ x^{T} K^{T}RKx=0.....................................................(8)

化简可得:

x^{T}(A_{mex}^{T}P+P A_{mex}+Q+ K^{T}RK)x=0........................................................................(9)

A_{mex} = A-BK代入,若要式(9)成立,那么则有

A^{T}P+P A+Q+ K^{T}RK-PBK-K^{T}B^{T}P=0.....................................................(10)

在这里,我们取

K=R^{-1}B^{T}P..........................................................................................................................(11)

注意,关于这里K的取值,由于时间关系,本人也没去研究,后续如果有时间再进行补充。(在网上也看到部分关于K的推导过程,但是本人感觉有待商榷,所以就没有借鉴)

然后将(11)代入(10)中,最后可得:

A^{T}P+PA+Q-PBR^{-1}B^{T}P = 0................................................................................(12)

上式被称为连续时间Algebraic Riccati Equation (ARE)或者Riccati方程。ARE是一个矩阵二次方程,对于给定的(A,B,Q,R)可以解出辅助矩阵P。之后,优化反馈控制器的K就可通过式(11)得出。

6.LQR总结

(1)根据系统的状态空间模型,确定A,B,C,D;

(2)设计参数矩阵Q,R;

(3)根据式(12)Riccati方程计算出辅助矩阵P;

(4)根据式(11)计算出K,根据u = -Kx 设计出控制器。

标签:控制,函数,系统,控制算法,矩阵,LQR,之二,代价
From: https://blog.csdn.net/weixin_40046251/article/details/143787169

相关文章

  • 控制算法之一:PID控制
    PID控制广泛应用于温度控制、速度控制、位置控制等领域,其优势在于简单、鲁棒且易于实现。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制......
  • MODBUS规约的秘密之二-----写数据之遥控遥调
    写数据主要用于遥控,遥调和对时等操作,本质是通过写寄存器的方式来实现的。写数据分成两种,一种是写单个寄存器,功能码一般用5和6格式如下:请求报文格式:MBAP报文头报文中的长度:设备地址长度+功能码长度+寄存器地址长度+需要写的值的长度=6回复报文格式:MBAP报文头报文中的......
  • NOIP 复习题之二分图
    CF741C有\(2n\)个人围成一圈坐在桌子边上,每个人占据一个位子,对应这\(2n\)个人是\(n\)对情侣,要求情侣不能吃同一种食物,并且桌子上相邻的三个人的食物必须有两个人是不同的,只有两种食物,问一种可行分配方式。思路:我们在两个点之间连边,表示他们吃的不一样。然后对于点对\((......
  • 电路板维修入门之二极管篇
    晶体二极管在电路中常用“D”加数字表示,如:D5表示编号为5的二极管。二极管的作用二极管的主要特性是单向导电性,也就是在正向电压的作用下,导通电阻很小;而在反向电压作用下导通电阻极大或无穷大。正因为二极管具有上述特性,无绳电话机中常把它用在整流、隔离、稳压、极性保护、......
  • 每日一题之二叉树
    已知结点元素值为正整数且值不相同的一棵二叉树。该二叉树通过给出其先序遍历序列和中序遍历序列构造而成。输入一个整数x,针对此二叉树编写程序求出x的右子树中所有结点值的和(若x不在树上,输出-1)。 输入说明:第一行输入某二叉树的先序遍历序列第二行输入该二叉树的中序遍历......
  • C语言数据结构之二叉树(BINARY TREE)的多种数据类型存贮
    C语言数据结构之二叉树(BINARYTREE)的多种数据类型存贮用无类型指针(void*)来做为基本数据类型来存贮数据,将其他数据类型强制转化为无类型指针,从而达到目标!!!输出函数指针BTFunc比较函数指针BTCmpFunc返回值为整型值1、-1、0,表示大于、小于、相等代码如下:/*filename:btr......
  • PCIe系列专题之二:2.0 Transaction layer事务层概述
    一、故事前传上回我们对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:PCIe技术概述;二、事务层概述......
  • PCIe系列专题之二:2.1 TLP的前世今生
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......
  • PCIe系列专题之二:2.2 TLP事务处理方式解析
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......
  • PCIe系列专题之二:2.3 TLP结构解析
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......