基于LQR和前馈控制的自动驾驶控制算法(2.1):离散LQR原理


前言

本文通关动态规划的思路推导离散LQR的求解方法,本文思路参考 离散LQR黎卡提方程推导
同时也可通关拉格朗日乘子法推导,可参考 【基础】自动驾驶控制算法第五讲 连续方程的离散化与离散LQR原理


目标函数

针对离散线性自治系统(时不变系统、与时间无关):
X k + 1 = A X k + B u k (1) X_{k+1}=AX_{k}+Bu_{k} \tag{1} Xk+1=AXk+Buk(1)
其中, X X X 为系统状态, u u u 为系统输入。
定义优化的目标函数(代价)为:
J = X N T P X N + ∑ k = 1 N ( X k T Q X k + u k T R u k ) (2) J = X_N^TPX_N+\sum_{k=1}^{N}{\left(X_k^TQX_k + u_k^TRu_k\right)} \tag{2} J=XNTPXN+k=1N(XkTQXk+ukTRuk)(2)
LQR的目标是求解得最优控制律 u k = K X k u_k=KX_k uk=KXk 来使目标函数最小化。
下面将推导如何得到使目标函数最小化的 K K K

动态规划求解

动态规划: 将复杂问题分解为相互重叠的子问题来求解复杂问题

将目标函数记为新的形式:

  1. 最终状态 k = N k=N k=N 的代价(由于 X 1 X_1 X1 不受 u 1 u_1 u1 影响,故定义 J 1 J_1 J1 不包含 u 1 u_1 u1):
    J N = X N T P X N J_N=X_N^TPX_N JN=XNTPXN
  2. 从最终状态到状态 k = N − 1 k=N-1 k=N1 的总代价:
    J N − 1 = X N − 1 T Q X N − 1 + u N − 1 T R u N − 1 + J N = X N − 1 T Q X N − 1 + u N − 1 T R u N − 1 + X N T P X N J_{N-1}=X_{N-1}^TQX_{N-1} + u_{N-1}^TRu_{N-1} + J_N = X_{N-1}^TQX_{N-1} + u_{N-1}^TRu_{N-1} + X_N^TPX_N JN1=XN1TQXN1+uN1TRuN1+JN=XN1TQXN1+uN1TRuN1+XNTPXN
    通过式 (1) 知 X N = A X N − 1 + B u N − 1 X_N=AX_{N-1}+Bu_{N-1} XN=AXN1+BuN1,代入上式得:
    J N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + ( A X N − 1 ) T P ( B u N − 1 ) + ( B u N − 1 ) T P ( A X N − 1 ) + u N − 1 T ( B T P B + R ) u N − 1 J_{N-1}=X_{N-1}^T(A^TPA + Q)X_{N-1} + (AX_{N-1})^TP(Bu_{N-1}) + (Bu_{N-1})^TP(AX_{N-1}) + u_{N-1}^T(B^TPB + R)u_{N-1} JN1=XN1T(ATPA+Q)XN1+(AXN1)TP(BuN1)+(BuN1)TP(AXN1)+uN1T(BTPB+R)uN1
    因为此处 X X X u u u 为列向量,且P为对角阵,有:
    { A X = [ x 1   x 2   x 3   . . . ] T ( A X ) T = [ x 1   x 2   x 3   . . . ] B u = [ u 1   u 2   u 3   . . . ] T ( B u ) T = [ u 1   u 2   u 3   . . . ] P T = P ⇒ ( A X N − 1 ) T P ( B u N − 1 ) = ( B u N − 1 ) T P ( A X N − 1 ) \left\{ \begin{aligned} AX &=[x_1~x_2~x_3~...]^T \\ (AX)^T &=[x_1~x_2~x_3~...] \\ Bu &=[u_1~u_2~u_3~...]^T \\ (Bu)^T &=[u_1~u_2~u_3~...] \\ P^T &= P \end{aligned} \right. \Rightarrow (AX_{N-1})^TP(Bu_{N-1}) = (Bu_{N-1})^TP(AX_{N-1}) AX(AX)TBu(Bu)TPT=[x1 x2 x3 ...]T=[x1 x2 x3 ...]=[u1 u2 u3 ...]T=[u1 u2 u3 ...]=P(AXN1)TP(BuN1)=(BuN1)TP(AXN1)
    有:
    J N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + 2 u N − 1 T ( B T P A ) X N − 1 + u N − 1 T ( B T P B + R ) u N − 1 (3) J_{N-1}=X_{N-1}^T(A^TPA + Q)X_{N-1} + 2u_{N-1}^T(B^TPA)X_{N-1} + u_{N-1}^T(B^TPB + R)u_{N-1} \tag{3} JN1=XN1T(ATPA+Q)XN1+2uN1T(BTPA)XN1+uN1T(BTPB+R)uN1(3)
    通过令导数为 0,求 J N − 1 J_{N-1} JN1 取最小值时的输入 u N − 1 u_{N-1} uN1
    ∂ J N − 1 ∂ u N − 1 = 2 ( B T P B + R ) u N − 1 + 2 ( B T P A ) X N − 1 = 0 \frac{\partial{J}_{N-1}}{\partial{u}_{N-1}} = 2(B^TPB + R)u_{N-1} + 2(B^TPA)X_{N-1} = 0 uN1JN1=2(BTPB+R)uN1+2(BTPA)XN1=0
    得:
    u N − 1 = K 1 X N − 1 (4) u_{N-1} = K_1X_{N-1} \tag{4} uN1=K1XN1(4)
    其中反馈增益 K 1 = − ( B T P B + R ) − 1 ( B T P A ) K_1=-(B^TPB + R)^{-1}(B^TPA) K1=(BTPB+R)1(BTPA)
    当P和R正定或半正定时,有2阶导数 ≥ 0 \ge0 0,保证导数为 0 时取到的是最小值:
    ∂ 2 J 2 ∂ u 1 2 = 2 ( B T P B + R ) ≥ 0 \frac{\partial^2{J_2}}{\partial{u_1}^2} = 2(B^TPB + R) \ge 0 u122J2=2(BTPB+R)0
    此时的控制律 u N − 1 = K 1 X N − 1 u_{N-1}=K_1X_{N-1} uN1=K1XN1 只能保证 J N − 1 J_{N-1} JN1 最小化。
    但通过不断迭代(动态规划),就可以进一步求得使 J 1 J_1 J1 最小化的反馈增益 ( J 1 J_1 J1 为式 (2) )。
    构建动态规划
    将式 (4) 代入式 (3) 得:
    J N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + 2 X N − 1 T K 1 T ( B T P A ) X N − 1 + X N − 1 T K 1 T ( B T P B + R ) K 1 X N − 1 = X N − 1 T ( A T P A + Q ) X N − 1 + 2 X N − 1 T K 1 T ( B T P A ) X N − 1 − X N − 1 T K 1 T ( B T P A ) X N − 1 = X N − 1 T ( A T P A + Q + K 1 T ( B T P A ) ) X N − 1 \begin{align*} J_{N-1} &= X_{N-1}^T(A^TPA + Q)X_{N-1} + 2X_{N-1}^TK_1^T(B^TPA)X_{N-1} + X_{N-1}^TK_1^T(B^TPB + R)K_1X_{N-1} \\ &= X_{N-1}^T(A^TPA + Q)X_{N-1} + 2X_{N-1}^TK_1^T(B^TPA)X_{N-1} - X_{N-1}^TK_1^T(B^TPA)X_{N-1} \\ &= X_{N-1}^T(A^TPA + Q + K_1^T(B^TPA))X_{N-1} \end{align*} JN1=XN1T(ATPA+Q)XN1+2XN1TK1T(BTPA)XN1+XN1TK1T(BTPB+R)K1XN1=XN1T(ATPA+Q)XN1+2XN1TK1T(BTPA)XN1XN1TK1T(BTPA)XN1=XN1T(ATPA+Q+K1T(BTPA))XN1
    P 1 = A T P A + Q + K 1 T ( B T P A ) P_1 = A^TPA + Q + K_1^T(B^TPA) P1=ATPA+Q+K1T(BTPA),有:
    J N − 1 = X N − 1 T P 1 X N − 1 J_{N-1}=X_{N-1}^TP_1X_{N-1} JN1=XN1TP1XN1
    由此, J N − 1 J_{N-1} JN1 转化为了 J N J_N JN 的形式,可以类推得到 J N − 2 J_{N-2} JN2 J N − 3 J_{N-3} JN3、…、 J 1 J_1 J1
  3. 类推最终状态到状态 k = N − 2 k=N-2 k=N2 的总代价:
    J N − 2 = X N − 2 T Q X N − 2 + u N − 2 T R u N − 2 + J N − 1 = X N − 2 T Q X N − 2 + u N − 2 T R u N − 2 + X N − 1 T P 1 X N − 1 J_{N-2}=X_{N-2}^TQX_{N-2} + u_{N-2}^TRu_{N-2} + J_{N-1} = X_{N-2}^TQX_{N-2} + u_{N-2}^TRu_{N-2} + X_{N-1}^TP_1X_{N-1} JN2=XN2TQXN2+uN2TRuN2+JN1=XN2TQXN2+uN2TRuN2+XN1TP1XN1
    X N − 1 = A X N − 2 + B u N − 2 X_{N-1}=AX_{N-2}+Bu_{N-2} XN1=AXN2+BuN2 代入上式得:
    J N − 2 = X N − 2 T ( A T P 1 A + Q ) X 2 + 2 u N − 2 T ( B T P 1 A ) X N − 2 + u N − 2 T ( B T P 1 B + R ) u N − 2 J_{N-2}=X_{N-2}^T(A^TP_1A + Q)X_2 + 2u_{N-2}^T(B^TP_1A)X_{N-2} + u_{N-2}^T(B^TP_1B + R)u_{N-2} JN2=XN2T(ATP1A+Q)X2+2uN2T(BTP1A)XN2+uN2T(BTP1B+R)uN2
    同理可求得 K 2 = − ( B T P 1 B + R ) − 1 ( B T P 1 A ) K_2=-(B^TP_1B + R)^{-1}(B^TP_1A) K2=(BTP1B+R)1(BTP1A),把 u N − 2 = K 2 X N − 2 u_{N-2} = K_2 X_{N-2} uN2=K2XN2 代入上式得:
    J N − 2 = X N − 2 T ( A T P 1 A + Q + K 2 T ( B T P 1 A ) ) X N − 2 J_{N-2} = X_{N-2}^T(A^TP_1A + Q + K_2^T(B^TP_1A))X_{N-2} JN2=XN2T(ATP1A+Q+K2T(BTP1A))XN2
    P 2 = A T P 1 A + Q + K 2 T ( B T P 1 A ) P_2 = A^TP_1A + Q + K_2^T(B^TP_1A) P2=ATP1A+Q+K2T(BTP1A),有:
    J N − 2 = X N − 2 T P 2 X N − 2 J_{N-2}=X_{N-2}^TP_2X_{N-2} JN2=XN2TP2XN2
  4. 类推得到最终状态到状态 k = 1 k=1 k=1 的总代价:
    J 1 = X 1 T Q X 1 + u 1 T R u 1 + J 2 = X 1 T Q X 1 + u 1 T R u 1 + X 2 T P N − 2 X 2 J_{1}=X_{1}^TQX_{1} + u_{1}^TRu_{1} + J_{2} = X_{1}^TQX_{1} + u_{1}^TRu_{1} + X_{2}^TP_{N-2}X_{2} J1=X1TQX1+u1TRu1+J2=X1TQX1+u1TRu1+X2TPN2X2
    X 2 = A X 1 + B u 1 X_{2}=AX_{1}+Bu_{1} X2=AX1+Bu1 代入上式得:
    J 1 = X 1 T ( A T P N − 2 A + Q ) X 1 + 2 u 1 T ( B T P N − 2 A ) X 1 + u 1 T ( B T P N − 2 B + R ) u 1 J_{1}=X_{1}^T(A^TP_{N-2}A + Q)X_1 + 2u_{1}^T(B^TP_{N-2}A)X_{1} + u_{1}^T(B^TP_{N-2}B + R)u_{1} J1=X1T(ATPN2A+Q)X1+2u1T(BTPN2A)X1+u1T(BTPN2B+R)u1
    同样可以求得 K N − 1 = − ( B T P N − 2 B + R ) − 1 ( B T P N − 2 A ) K_{N-1}=-(B^TP_{N-2}B + R)^{-1}(B^TP_{N-2}A) KN1=(BTPN2B+R)1(BTPN2A)
    注意到 J 1 J_1 J1 已经包含目标函数式 (2) 中的所有项,故控制律 u 1 = K N − 1 X 1 u_{1} = K_{N-1}X_1 u1=KN1X1 已使目标函数最小化,此时得到LQR的最终解。

迭代流程

  1. 设置矩阵 P P P, P P P 需为对称矩阵,可令 P = Q P=Q P=Q
  2. 计算 P 1 P_1 P1
    { P 1 = A T P A + Q + K 1 T ( B T P A ) K 1 = − ( B T P B + R ) − 1 ( B T P A ) ⇒ P 1 = A T P A + Q − A T P B ( B T P B + R ) − 1 B T P A \begin{align*} & \left\{ \begin{aligned} P_1 &= A^TPA + Q + K_1^T(B^TPA) \\ K_1 &=-(B^TPB + R)^{-1}(B^TPA) \end{aligned} \right. \Rightarrow P_1 = A^TPA + Q - A^TPB(B^TPB + R)^{-1}B^TPA \end{align*} {P1K1=ATPA+Q+K1T(BTPA)=(BTPB+R)1(BTPA)P1=ATPA+QATPB(BTPB+R)1BTPA
    上式中,每一项都是对称矩阵,故 P 1 T = P 1 P_1^T=P_1 P1T=P1,相似地有 P k T = P k P_k^T=P_k PkT=Pk

矩阵基础:矩阵A的逆的转置等于矩阵A的转置的逆: ( A T ) − 1 = ( A − 1 ) T (A^T)^{-1}=(A^{-1})^T (AT)1=(A1)T

  1. 同理可计算 P 2 P_2 P2 P 3 P_3 P3、…:
    P 2 = A T P 1 A + Q − A T P 1 B ( B T P 1 B + R ) − 1 B T P 1 A P 3 = A T P 2 A + Q − A T P 2 B ( B T P 2 B + R ) − 1 B T P 2 A ⋮ \begin{align*} P_2 &= A^TP_1A + Q - A^TP_1B(B^TP_1B + R)^{-1}B^TP_1A \\ P_3 &= A^TP_2A + Q - A^TP_2B(B^TP_2B + R)^{-1}B^TP_2A \\ &\hspace{0.5cm} \vdots \end{align*} P2P3=ATP1A+QATP1B(BTP1B+R)1BTP1A=ATP2A+QATP2B(BTP2B+R)1BTP2A
  2. 迭代停止条件:
    在LQR的优化中, N → ∞ N \to \infty N,但实际中不可能让其无限迭代。
    若系统是渐近稳定的, X ∞ = 0 {X_\infty}=\mathbf{0} X=0,这也意味当 N → ∞ N \to \infty N P N P_N PN趋向于定值(因为总代价 J k = X k T P N X k J_k = X_k^TP_NX_k Jk=XkTPNXk 在系统收敛后不再增加,总代价只与当前状态 X k X_k Xk 有关)。
    故迭代停止条件可设为:
    ∣ P k + 1 − P k ∣ < C |P_{k+1}-P_{k}|<C Pk+1Pk<C
    其中 C C C 为定值。
    若系统纯在稳态误差, X ∞ ≠ 0 {X_\infty} \ne \mathbf{0} X=0,当 N → ∞ N \to \infty N P N P_N PN可能不会收敛。
    故需设置最大迭代次数 N N N ,认为只优化 N N N 步的目标函数。
  3. 根据迭代得到的 P k P_k Pk 计算反馈增益:
    K = − ( B T P k B + R ) − 1 ( B T P k A ) u k = K X k \begin{align*} K &=-(B^TP_kB + R)^{-1}(B^TP_kA) \\ u_k &= KX_k \end{align*} Kuk=(BTPkB+R)1(BTPkA)=KXk

MATLAB中实现:

function K = LQR(A, B, Q, R, maxIter, eps)
% A、B分别为系统矩阵和输入矩阵,Q和R分别为状态误差和输入的对角权重矩阵
% maxIter为最大迭代步数N,eps为迭代精度C
	i = 1; P = Q; delta = 1e9;
	while i < maxIter && delta > eps
	    Pn = Q + A' * (P - P*B* inv(R+B'*P*B) *B'*P) * A;
	    delta = max(abs(Pn-P), [], "all");
	    P = Pn;
	    i = i+1;
	end
	K = -inv(R + B' * P * B) * B' * P * A;
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车队老哥记录生活

支持作者创作更多免费好文~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值