LQR控制基本原理(包括Riccati方程具体推导过程)

全状态反馈控制系统

\left\{\begin{matrix} \dot{x}=Ax+Bu\\ y=Cx+Du \end{matrix}\right.

状态反馈控制器     

 u=-kx=-[k_{1},k_{2},\cdots]\begin{bmatrix} x_{1}\\ x_{2}\\ \vdots \end{bmatrix}

\dot{x}=Ax-Bkx=(A-Bk)x=A_{cl}x

通过选择K,可以改变A_{cl}的特征值,进而控制系统表现。

LQR控制器

最优控制,其本质就是让系统以某种最小的代价来让系统运行,当这个代价被定义为二次泛函,且系统是线性的话,那么这个问题就称为线性二次问题,设计的控制器(即问题的解)可以称为LQR(Linear Quadratic Regulator)线性二次调节器。

1、连续时间

代价函数

J=\int_{0}^{\infty }(x^{T}Qx+u^{T}Ru)dt,Q=Q^T,R=R^T,Q\geqslant 0,R\geqslant 0

一般来说,Q阵和R阵为单位对角阵,对角阵上的元素对应着不同状态量和控制量的权重大小,越大说明我们设计时对于该量的重视程度越大,即希望这个量在变化过程中保持较小的值,换种说法就是对于该量的“惩罚”越大。积分号说明从开始控制起到最终无限时间代价函数值的累积,因为是二次的,所以代价始终大于0,最终趋于0,我们的设计目标就是得到一系列的控制序列使代价累积的最小。

具体推导过程

u=-kx代入代价函数J,有

J=\int_{0}^{\infty }x^{T}(Q+K^{T}RK)xdt

假设存在一个常量矩阵P使得

\frac{\mathrm{d} }{\mathrm{d} t}(x^TPx)=-x^{T}(Q+K^{T}RK)x

将上式左侧微分展开

\frac{\mathrm{d} }{\mathrm{d} t}(x^TPx)=\dot{x}^TPx+x^TP\dot{x}=-x^{T}(Q+K^{T}RK)x

代入控制量\dot{x}=(A-BK)x可以整理得到

A^TP+PA+Q-K^TB^TP-PBK+K^TRK=0

观察上面的等式,A,B,Q,R,P都是常值矩阵,唯一可变的是K阵,所以问题转换为找到一个K使得代价函数最小,一种思路是如果我们可以把含有K的部分转换成类似(M+N)^T(M+N)的结构,那么要使代价最小,只需使M+N=0,那么K便可以求出。

R=T^TT代入上式中,可以得到

A^TP+PA+Q-K^TB^TP-PBK+K^TT^TTK=0

-K^TB^TP-PBK+K^TT^TTK用待定系数法化成目标形式M^TM+M^TN+N^TM+N^TN,可得

M=-(T^{-1})^TB^TP,N=TK

-K^TB^TP-PBK+K^TT^TTK=(M+N)^T(M+N)-PBR^{-1}B^TP

令​​​​​​​TK-(T^{-1})^TB^TP=0解出

K=R^{-1}B^TP

代入Riccati方程中化简后得

A^TP+PA-PBR^{-1}B^TP+Q=0

设计步骤

  • 选择Q、R参数矩阵
  • 求解Riccati方程A^TP+PA-PBR^{-1}B^TP+Q=0得到矩阵P
  • 计算增益K=R^{-1}B^TP得到反馈控制量u=-kx

2、离散时间

离散系统

x(K+1)=Ax(k)+Bu(k)

代价函数

J=\sum_{k=1}^{N}(x^TQx+u^TRu)

设计步骤

  • 确定迭代范围N
  • 设置迭代初始值P_{N}=Q
  • t=N,\cdots ,1从后向前循环迭代求解离散时间的代数RIccati方程

​​​​​​​​​​​​​​P_{t-1}=Q+A^TP_{t}A-A^TP_{t}B(R+B^TP_{t+1}B)^{-1}B^TP_{t}A​​​​​​​ 

  •  t=0,\cdots ,N​​​​循环计算反馈系数K_{t}=(R+B^TP_{t+1}B)^{-1}B^TP_{t+1}A并得到控制量

u_{t}=-K_{t}x_{t}​​​​​​​ 

 参考资料:LQR最优控制方法小结 - 知乎

【控制理论】离散及连续的LQR控制算法原理推导_CHH3213的博客-CSDN博客_lqr控制

【Advanced控制理论】8_LQR 控制器_状态空间系统Matlab/Simulink建模分析_哔哩哔哩_bilibili

### 离散LQR中的黎卡提方程推导 离散线性二次型调节器(Discrete Linear Quadratic Regulator, DLQR)的目标是最小化给定性能指标下的控制输入和状态轨迹。为了实现这一目标,需要解决一个最优控制问题,该问题通常通过求解离散时间黎卡提方程来完成。 #### 性能指标定义 考虑如下形式的离散时间动态系统: \[ x(k+1) = A x(k) + B u(k), \] 其中 \(x\) 是系统的状态向量,\(u\)控制输入向量,而 \(A\) 和 \(B\) 则分别是描述系统行为的状态转移矩阵与输入影响矩阵[^1]。 对于上述系统,希望最小化的成本函数可以表示为: \[ J(u) = \sum_{k=0}^{N-1} [x^T(k)Qx(k)+u^T(k)Ru(k)] + x^T(N)F x(N). \] 这里,\(Q\geq 0\) 表示状态权重矩阵;\(R>0\) 控制代价加权矩阵;以及终端惩罚项 \(F\geq 0\)【注意这里的不等号意味着这些是对称半正定/正定矩阵】。 #### 黎卡提方程的形式 为了找到使此成本函数达到极小值的最佳反馈增益律 \(K_k=-R^{-1}B^TP_{k+1}A\) ,引入了所谓的“价值函数”,它满足贝尔曼优化原理并最终简化成下面这个著名的离散代数黎卡提方程(DARE): \[ P=A^TPA-(A^TPB)(R+B^TPB)^{-1}(B^TPA)+Q. \] 当边界条件设定为终态的价值函数等于 \(P_N=F\) 时,在有限预测范围内迭代应用上式可得到各时刻对应的协态变量或称为共轭动量张量 \(P_k\) 。而在无限水平情形下,则寻求使得 DARE 收敛到稳定固定点解的方法[^2]。 #### 初始化及迭代计算 选取合适的初值是至关重要的一步。一般情况下可以选择: \[ P(1)=Q-LR^{-1}L^T,\] 作为初始猜测来进行后续的数值求解过程。 ```python import numpy as np from scipy.linalg import solve_discrete_are # 定义参数 A = ... # 系统矩阵 B = ... # 输入矩阵 Q = ... # 状态权重矩阵 R = ... # 控制代价矩阵 # 使用SciPy库求解DARE P = solve_discrete_are(A, B, Q, R) print("The solution of the discrete Riccati equation is:\n", P) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值