参考资料

1. 全状态反馈控制系统

假设有一个线性系统用状态向量表示:
{ x ˙ = A x + B u y = C x + D u (1) \tag{1} \left\{\begin{array}{l} \dot{x}=A x+B u \\ y=C x+D u \end{array}\right. {x˙=Ax+Buy=Cx+Du(1)
其中, x ( t ) ∈ R n , u ( t ) ∈ R m x(t) \in R^{n} , u(t) \in R^{m} x(t)Rnu(t)Rm

设计状态反馈控制器
u = − K x (2) \tag{2} u=-K x u=Kx(2)
将式(2)带入系统状态方程(1)中,有
x ˙ = ( A − B K ) x = A c x (3) \tag{3} \dot{x}=(A-B K) x=A_{c} x x˙=(ABK)x=Acx(3)
设定系统中的各个状态量都可知,式(1)所示的开环系统,传递函数的极点就是系统矩阵A的特征值。 式(2)所示的闭环形式,通过配置反馈矩阵 K K K ,可以使得闭环系统达到所期望的系统状态。

接下来讲解如何使用LQR设计控制量 u u u

2. LQR控制器

最优控制理论主要探讨的是让动力系统以最小成本来运作,若系统动态可以用一组线性微分方程表示,而其成本为二次泛函,这类的问题称为线性二次(LQ)问题。此类问题的解即为线性二次调节器,简称LQR。

LQR(Linear quadratic regulator,线性二次型调节器),它假设模型是locally lineartime-varied的。

2.1 连续时间

LQR的目标就是找到一组控制量 u 0 , u 1 , . . . u_0,u_1,... u0,u1,...,使得同时有 x 0 , x 1 , . . . x_0,x_1,... x0,x1,...能够快速、稳定地趋近于零,并保持平衡(系统达到稳定状态), u 0 , u 1 , . . . u_0,u_1,... u0,u1,...尽可能小(控制量尽量小的变化)。

这是一个典型的多目标优化最优控制问题,选取代价函数(目标函数)为
J = 1 2 ∫ 0 ∞ x T Q x + u T R u d t (4) \tag{4} J=\frac{1}{2} \int_{0}^{\infty} x^{T} Q x+u^{T} R u d t J=210xTQx+uTRudt(4)
其中,Q、R分别是需要设计的半正定矩阵和正定矩阵

代价函数 J J J需要达到最小值,那么在 t t t趋近于无穷时,状态向量 x ( t ) x(t) x(t)肯定趋近于0,即是达到了系统稳态;同理, t t t趋近于无穷时,控制向量 u ( t ) u(t) u(t)也会趋近于0,意味着,随着时间的推移,需要对系统施加的控制量会越来越小,意味着使用最小的控制量使得系统达到了最终控制目标,反映的是控制能量的损耗优化。

2.1.1 Q、R矩阵的选取

Q Q Q为半正定的状态加权矩阵, R R R为正定的控制加权矩阵,两者通常取为对角阵。 Q Q Q矩阵元素变大意味着希望状态量能够快速趋近于零; R R R 矩阵元素变大意味着希望控制输入能够尽可能小,它意味着系统的状态衰减将变慢。比如, Q 11 Q_{11} Q11​选取较大的值,会让 x 1 x_1 x1​很快的衰减到0;所以, Q 、 R Q、R QR的选取,要综合看具体的实际应用场景来调节。

2.1.2推导过程

  1. u = − K x u=-K x u=Kx 代入代价函数后,有
    J = 1 2 ∫ 0 ∞ x T ( Q + K T R K ) x d t (5) \tag{5} J=\frac{1}{2} \int_{0}^{\infty} x^{T}\left(Q+K^{T} R K\right) x d t J=210xT(Q+KTRK)xdt(5)
  2. 假设存在一个常量矩阵 P P P 使得,
    d d t ( x T P x ) = − x T ( Q + K T R K ) x (6) \tag{6} \frac{d}{d t}\left(x^{T} P x\right)=-x^{T}\left(Q+K^{T} R K\right) x dtd(xTPx)=xT(Q+KTRK)x(6)
  3. 把式(6)代入(5)后,有
    J = − 1 2 ∫ 0 ∞ d d t x T ( P ) x d t = − 1 2 x T P x ∣ 0 ∞ = 1 2 x T ( 0 ) P x ( 0 ) (7) \tag{7} J=-\frac{1}{2} \int_{0}^{\infty} \frac{d}{d t} x^{T}(P) x dt=-\frac{1}{2} x^{T}P x\bigg|^{\infty}_{0}=\frac{1}{2} x^{T}(0) P x(0) J=210dtdxT(P)xdt=21xTPx0=21xT(0)Px(0)(7)
    式(7)的意思就是,t趋近于无穷时,系统状态向量 x ( t ) x(t) x(t) 趋近于 0 ,这样就直接计算出了积分方程。
  4. 把式(6)左边微分展开,并且将右边移到左边后有
    x ˙ T P x + x T P x ˙ + x T Q x + x T K T R K x = 0 (8) \tag{8} \dot{x}^{T} P x+x^{T} P \dot{x}+x^{T} Q x+x^{T} K^{T} R K x=0 x˙TPx+xTPx˙+xTQx+xTKTRKx=0(8)
    x ˙ \dot x x˙用式(3)表示,代入式(8)
    x T A c T P x + x T P A c x + x T Q x + x T K T R K x = 0 (9) \tag{9} x^{T} A_{c}^{T} P x+x^{T} P A_{c} x+x^{T} Q x+x^{T} K^{T} R K x=0 xTAcTPx+xTPAcx+xTQx+xTKTRKx=0(9)
    整理后,有
    x T ( A c T P + P A c + Q + K T R K ) x = 0 (10) \tag{10} x^{T}\left(A_{c}^{T} P+P A_{c}+Q+K^{T} R K\right) x=0 xT(AcTP+PAc+Q+KTRK)x=0(10)
    如果式(10)要有解,那么括号里面的部分必须等于0.
    A c T P + P A c + Q + K T R K = 0 (11) \tag{11} A_{c}^{T} P+P A_{c}+Q+K^{T} R K=0 AcTP+PAc+Q+KTRK=0(11)
    A c = A − B K A_{c}=A-B K Ac=ABK 代入式(11)
    ( A − B K ) T P + P ( A − B K ) + Q + K T R K = 0 (12) \tag{12} (A-B K)^{T} P+P(A-B K)+Q+K^{T} R K=0 (ABK)TP+P(ABK)+Q+KTRK=0(12)

    A T P + P A + Q + K T R K − K T B T P − P B K = 0 (13) \tag{13} A^{T} P+P A+Q+K^{T} R K-K^{T} B^{T} P-P B K=0 ATP+PA+Q+KTRKKTBTPPBK=0(13)
  5. K = R − 1 B T P K=R^{-1} B^{T} P K=R1BTP ,式(13)化为
    A T P + P A + Q + K T R ( R − 1 B T P ) − K T B T P − P B ( R − 1 B T P ) = 0 (14) \tag{14} A^{T} P+P A+Q+K^{T} R\left(R^{-1} B^{T} P\right)-K^{T} B^{T} P-P B\left(R^{-1} B^{T} P\right)=0 ATP+PA+Q+KTR(R1BTP)KTBTPPB(R1BTP)=0(14)
    化简后得
    A T P + P A − P B R − 1 B T P + Q = 0 (15) \tag{15} A^{T} P+P A-P B R^{-1} B^{T} P+Q=0 ATP+PAPBR1BTP+Q=0(15)
    式(15)中, A , B , Q , R A, B, Q, R A,B,Q,R 都是已知量,那么通过式(15)可以求解出 P P P n × n n \times n n×n维) ,式(15)就是著名的连续时间代数Riccati方程(CARE)。

2.1.3 连续时间下的LQR算法步骤

LQR的算法步骤如下:

  • 选择参数矩阵Q,R(分别满足半正定和正定)
  • 根据公式(15)求解Riccati方程得到矩阵P
    A T P + P A − P B R − 1 B T P + Q = 0 A^{T} P+P A-P B R^{-1} B^{T} P+Q=0 ATP+PAPBR1BTP+Q=0
  • 根据P计算增益 K = R − 1 B T P K=R^{-1}B^{T}P K=R1BTP
  • 计算控制量 u ∗ = − K x u^*=-Kx u=Kx

2.2 离散时间

2.2.1 推导

假设一个离散的系统表示为
X ( k + 1 ) = A X ( k ) + B u ( k ) (16) \tag{16} \mathbf{X}(k+1) = A \mathbf{X}(k)+B \mathbf{u}(k) X(k+1)=AX(k)+Bu(k)(16)

离散得LQR的目标函数如下:
J = ∑ k = 1 N ( X T Q X + u T R u ) (17) \tag{17} J=\sum_{k=1}^{N}\left(\mathbf{X}^{T} Q \mathbf{X}+\mathbf{u}^{T} R \mathbf{u}\right) J=k=1N(XTQX+uTRu)(17)

其中 X \mathbf{X} X n × 1 n \times 1 n×1 的状态向量, u \mathbf{u} u k × 1 k \times 1 k×1 的控制变数向量, A A A n × n n \times n n×n 的状态递移矩阵, B B B n × k n \times k n×k 的控制系数矩阵, Q Q Q n × n n \times n n×n的半正定状态损失函数矩阵, R R R k × k k \times k k×k的正定控制损失函数矩阵。

求解LQR的方法,有最小二乘法和动态规划算法。详情请参考博客

这里直接给出结果:从后往前推导可以找到每一个时间的最优控制律:
K t = ( R + B T P t + 1 B ) − 1 B T P t + 1 A u t ∗ = − K t X t (18) \tag{18} \begin{aligned} K_{t}&=\left(R+B^{T} P_{t+1} B\right)^{-1} B^{T} P_{t+1} A\\ u_{t}^{*}&=-K_{t} X_{t} \end{aligned} Ktut=(R+BTPt+1B)1BTPt+1A=KtXt(18)
其中矩阵 P P P 会依据下式并且配合初始值 P N = Q P_{N}=Q PN=Q 进行迭代求解
P t − 1 = Q + A T P t A − A T P t B ( R + B T P t + 1 B ) − 1 B T P t A (19) \tag{19} P_{t-1}=Q+A^{T} P_{t} A-A^{T} P_{t} B\left(R+B^{T} P_{t+1} B\right)^{-1} B^{T} P_{t} A Pt1=Q+ATPtAATPtB(R+BTPt+1B)1BTPtA(19)
这个就是离散时间的代数 Riccati 方程(DARE)。 P P P 的稳态解和和 N N N 趋近无限大时的无限时间问题有关,可以将方程(19)反复迭代直到收敛,来求得 P P P 的稳态解。

2.2.2 离散时间下的LQR算法步骤

综上采用LQR算法进行控制率求解的步骤概括为

  1. 确定迭代范围 N N N
  2. 设置迭代初始值 P N = Q f P_{N}=Q_{f} PN=Qf,其中 Q f = Q Q_f=Q Qf=Q
  3. 循环迭代, 从后往前 t = N , … , 1 t=N, \ldots, 1 t=N,,1
    P t − 1 = Q + A T P t A − A T P t B ( R + B T P t B ) − 1 B T P t A P_{t-1}=Q+A^{T} P_{t} A-A^{T} P_{t} B\left(R+B^{T} P_{t} B\right)^{-1} B^{T} P_{t} A Pt1=Q+ATPtAATPtB(R+BTPtB)1BTPtA
  4. t = 0 , … , N − 1 t=0, \ldots, N-1 t=0,,N1,循环计算反馈系数 K t = ( R + B T P t + 1 B ) − 1 B T P t + 1 A K_{t}=\left(R+B^{T} P_{t+1} B\right)^{-1} B^{T} P_{t+1} A Kt=(R+BTPt+1B)1BTPt+1A
  5. 最终得优化的控制量 u t ∗ = − K t X t u_{t}^{*}=-K_{t} X_{t} ut=KtXt

3. MPC与LQR比较

MPC和LQR两种控制方式有很多的相似之处,但是也有很多不相同的地方,

  • 首先,LQR的研究对象是现代控制理论中的状态空间方程给出的线性系统,而MPC的研究对象可以是线性系统,也可以是非线性系统。不过现在很多的做法都是将非线性系统线性化,然后进行相关计算,具体要根据自己的工程情况来确定哪种方式比较好。
  • 其次,既然是优化问题,那就离不开目标函数的设计,LQR的目标函数在上面已经有描述,MPC的目标函数,多数都是多个优化目标乘以不同权重然后求和的方式。虽然方式不同,不过都是对达到控制目标的代价累计。
  • 最后,工作时域上的不同,LQR的计算针对同一工作时域,在一个控制周期内,LQR只计算一次,并将此次计算出的最优解下发给控制器即可;而MPC是滚动优化的,计算未来一段时间内,每个采样周期都会经过计算,得出一组控制序列,但是只将第一个控制值下发给控制器。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐