【DR_CAN控制理论学习】最优控制中的DP与LQR

  • 本笔记根据b站【DR_CAN】的最优控制教程整理,主要是梳理公式推导过程(不包含详细的计算),主要是作为后续工程应用的理论参考,特别是一些结论性的东西。
  • 希望能对其他正在学习最优控制的朋友有帮助,如有错误也请帮忙指出,万分感谢。
  • 附bilibili视频链接:【最优控制-合集】 (不得不说,can老师真是全天下最好的控制老师!)

1.最优控制的基本概念

1.1 系统描述

  • 任意系统的状态-空间方程:
    • 状态变量: x ( t ) = [ x 1 ( t ) , x 2 ( t ) , . . . , x n ( t ) ] T x(t) =[ x_1(t) ,x_2(t) ,...,x_n(t) ]^T x(t)=[x1(t),x2(t),...,xn(t)]T(即一个n维的列向量)
    • 系统输入: u ( t ) = [ u 1 ( t ) , u 2 ( t ) , . . . , u m ( t ) ] T u(t) =[ u_1(t),u_2(t),...,u_m(t) ]^T u(t)=[u1(t),u2(t),...,um(t)]T(即一个m维的列向量)
    • 例如对于一个七轴机械臂而言:
      • x x x可以是包含末端位置与线速度的向量,即 n = 6 n=6 n=6
      • u u u则可以为七个关节驱动器的控制量,可以为角度、扭矩等,均有 m = 7 m=7 m=7
    • 此时系统状态空间可表示为: x ( t ) ⃗ ˙ = f ( x ( t ) ⃗ , u ( t ) ⃗ ) \dot{\vec{x(t)}}=f(\vec{x(t)},\vec{u(t)}) x(t) ˙=f(x(t) ,u(t) )
  • 为了方便求解,可选取一个采样时间,将上述方程离散化,即
    • x ⃗ ˙ ( k + 1 ) = f d ( x ⃗ ( k ) , u ⃗ ( k ) ) \large\color{black}\dot{\vec{x}}(k+1)=f_d(\vec{x}(k),\vec{u}(k)) x ˙(k+1)=fd(x (k),u (k))

1.2 控制的性能指标

  • 对任意控制,均存在一系列的期望目标与约束,我们希望的好的控制,应该是在设定的时间内使系统状态趋近于期望目标,同时在期间满足系统约束。
  • 为了描述这种好的控制,我们引入一个性能指标方程,也可称为代价函数,而我们的控制目标就是最小化控制代价。
    • 性能指标的一般形式为 J = ∫ 0 N ϕ ( x , x d , u ) J=\int_0^N \phi(x,xd,u) J=0Nϕ(x,xd,u)
    • 最小化J后所得的输入u,即为最优控制策略
      • 表示为: u ∗ = [ u ( 0 ) , u ( 1 ) , u ( 2 ) , . . . , u ( N − 1 ) ] u^*=[u(0),u(1),u(2),...,u(N-1)] u=[u(0),u(1),u(2),...,u(N1)]
      • 也可写为: u ∗ = a r g m i n J u^*=argmin J u=argminJ
  • 对于不同的控制场景,J的具体形式也会不同,下面举几个例子
    • 场景1:在N时刻将小车停在p点,类似这样的定时达点问题,性能指标可写为:
      • J 1 = ( x ( N ) − x d ) T Q ( x ( N ) − x d ) J_1=(x(N)-x_d)^TQ(x(N)-x_d) J1=(x(N)xd)TQ(x(N)xd)
        • Q一般为正对角矩阵,即 Q = d i a g ( s 1 , s 2 , . . . , s n ) Q=diag(s_1,s_2,...,s_n) Q=diag(s1,s2,...,sn)
        • 需要注意s必须提前标准化以排除各状态单位不同的影响

示例场景

  • 场景2:在1的基础上,考虑能耗最小,那么性能可写为:
    • J 2 = ( x ( N ) − x d ) T Q ( x ( N ) − x d ) + ∑ k = 1 n − 1 u k T R u k J_2=(x(N)-x_d)^TQ(x(N)-x_d)+\sum_{k=1}^{n-1} u_k^TRu_k J2=(x(N)xd)TQ(x(N)xd)+k=1n1ukTRuk
      • R与Q的特点与作用一致,用来调整可控制量的权重
  • 场景3:在2的基础上,加上轨迹跟踪要求,则有:
    • J 3 = ∥ x N − x d ∥ S 2 + ∑ k = 1 n − 1 ∥ x k − x d k ∥ Q 2 + ∥ u k ∥ R 2 J_3=\begin{Vmatrix} x_N-x_d \end{Vmatrix}_S^2+\sum_{k=1}^{n-1} \begin{Vmatrix} x_k-x_{d_k} \end{Vmatrix}_Q^2+\begin{Vmatrix} u_k \end{Vmatrix}_R^2 J3= xNxd S2+k=1n1 xkxdk Q2+ uk R2
      • S、Q、R表示三个二次范数的对角权重矩阵
  • 场景4:在3的基础上,加上循迹时的避障要求,则有:
    • J 4 = J 3 J_4=J_3 J4=J3
    • 但同时有 [ x 1 ( k ) , x 2 ( k ) ] ∈ [ x 1 ∗ , x 2 ∗ ] [x_1(k),x_2(k)]\in [x_1^*,x_2^*] [x1(k),x2(k)][x1,x2],即轨迹需在容许轨迹范围内。

1.3 最优控制的通用描述

  • 对于系统: x ⃗ ˙ ( k + 1 ) = f d ( x ⃗ ( k ) , u ⃗ ( k ) , k ) \dot{\vec{x}}(k+1)=f_d(\vec{x}(k),\vec{u}(k),k) x ˙(k+1)=fd(x (k),u (k),k)
  • 控制目标:
    • 找到最优控制策略 u ∗ ∈ Ω u^*\in\Omega uΩ,使得 x ⃗ ∈ X ∗ \vec{x}\in X^* x X x ⃗ ( 0 ) \vec{x}(0) x (0)转移到 x ⃗ d \vec{x}_d x d
    • 并满足 m i n J = h d ( x ⃗ ( N ) , N ) + ∑ k = 1 N − 1 g d ( x ⃗ ( k ) , u ( k ) , k \color{black}min J=h_d(\vec{x}(N),N)+\sum_{k=1}^{N-1}g_d(\vec{x}(k),u(k),k minJ=hd(x (N),N)+k=1N1gd(x (k),u(k),k

2.动态规划的基本概念

2.1 最优化理论

  • 贝尔曼最优化理论,由Richard·Bellman提出,大意为:

    • 最优化策略拥有一个特性,即无论初始状态与策略为何,接下来的控制“基于过去决策所带来的结果”所得的最优策略。即最优控制应该是一种面向未来的动态规划。

      The best time to plant a tree is 20 years ago.The second-best time is
      now. 即如果过去选择了“不种树策略”导致了现在没有树的结果,那么此时最优的策略就是尽早把这棵树种好。

  • 根据其核心思想,也就是说考虑当下的最小代价时,只需要基于上一时刻到这一时刻的最小即可,至于之前所积累的代价,当下并不考虑;如果每一时刻都是如此,即可保证每一时刻代价最小,进而达成全局最优。

    • 那么当我们想要求全局代价,只需要根据这一思想列出递推方程,即可求解,即:
      • J(N)=J(N-1)+minJ(N)

2.2 动态规划(Dynamic Programming)

  • 将动态规划问题离散化之后,就是一个逆向分级去求动态最小cost的问题。
  • 利用二维数组+递归即可解决,即考虑每个状态最小的CostToGo(详细推导见Dr_Can视频)

[dp推导]

3.最优控制之LQR

  • 设系统的代价函数为:
    • J = 1 2 x ( N ) T S x ( N ) + 1 2 ∑ k = 1 n − 1 x ( k ) T Q x ( k ) + u ( k ) T R u ( k ) J=\frac{1}{2}x(N)^TSx(N)+\frac{1}{2}\sum_{k=1}^{n-1} x(k)^TQx(k)+u(k)^TRu(k) J=21x(N)TSx(N)+21k=1n1x(k)TQx(k)+u(k)TRu(k)
    • 注意:这是一个regulator,要求 x d = 0 \color{orange}x_d=0 xd=0,也可将其视为误差为零(增广变换之后)。
  • 接下来,逆向递推
    • k=n: J N ∗ = 1 2 x N T S x N J^*_N=\frac{1}{2}x_N^TSx_N JN=21xNTSxN
    • k=n-1: J N − 1 ∗ = J N ∗ + 1 2 x N − 1 T Q x N − 1 + u N − 1 T R u N − 1 J^*_{N-1}=J^*_N+\frac{1}{2}x_{N-1}^TQx_{N-1}+u_{N-1}^TRu_{N-1} JN1=JN+21xN1TQxN1+uN1TRuN1
    • 可以发现,此时任意的J均只于当前的输入u有关,因此对其求偏导并使偏导为0,即可求出此时的最优控制策略,即
      u N − k ∗ ∣ ∂ J N − k ∗ ∂ u N − k = 0 u^*_{N-k}\bigg| {\frac{\partial J_{N-k}^*}{\partial u_{N-k}}=0} uNk uNkJNk=0
    • 推理可得:
      • J N − k ∗ = 1 2 x N − k T P k x N − k J_{N-k}^*=\frac{1}{2}x_{N-k}^TP_kx_{N-k} JNk=21xNkTPkxNk
      • P k = [ A − B F N − k ] T P k − 1 ( A − B F N − k ) + F N − k T R F N − k + Q P_k=[A-BF_{N-k}]^TP_{k-1}(A-BF_{N-k})+F^T_{N-k}RF_{N-k}+Q Pk=[ABFNk]TPk1(ABFNk)+FNkTRFNk+Q
      • F N − k = [ B T P k − 1 B + R ] − 1 B T P k − 1 A F_{N-k}=[B^TP_{k-1}B+R]^{-1}B^TP_{k-1}A FNk=[BTPk1B+R]1BTPk1A
      • u N − k ∗ = − F N − k x N − k u^*_{N-k}=-F_{N-k} x_{N-k} uNk=FNkxNk
  • 控制思路:
    • 利用递推关系,离线计算并存储 u ∗ = [ u N ∗ , u N ∗ − k , . . . , u 1 ∗ ] u^*=[u^*_N,u^*_N-k,...,u^*_1] u=[uN,uNk,...,u1]
    • 在线控制时按时间执行相应的 u k ∗ , k ∈ [ 1 , N ] u^*_k,k\in[1,N] uk,k[1,N]

4.轨迹跟踪控制

  • 轨迹跟踪控制器大致框架(Tracking Controller)
    轨迹跟踪控制器

4.1 目标误差控制

  • 在轨迹追踪中,我们需要将调节目标转换为调节系统误差至0,具体方法是将目标状态列入原系统-空间方程,将其改写为增广后的形式。
  • 具体过程如下:
    • 原系统: x k + 1 = A x k + B u k x_{k+1}=Ax_k+Bu_k xk+1=Axk+Buk
    • 设: x d k + 1 = A D x d k , A D = I x_{d_{k+1}}=A_Dx_{d_k},A_D=I xdk+1=ADxdk,AD=I
    • 定义: e k = x k − x d k e_k=x_k-x_{d_k} ek=xkxdk
    • x a k + 1 = [ x k + 1 , x d k + 1 ] T x_{a_{k+1}}=[x_{k+1},x_{d_{k+1}}]^T xak+1=[xk+1,xdk+1]T
    • 则有 x a k + 1 = [ A 0 0 A D ] [ x k x d k ] + [ B 0 ] u k x_{a_{k+1}}=\begin{bmatrix} A & 0 \\ 0 & A_D \end{bmatrix}\begin{bmatrix} x_k\\ x_{d_k} \end{bmatrix}+\begin{bmatrix} B\\ 0 \end{bmatrix}u_k xak+1=[A00AD][xkxdk]+[B0]uk
  • 由此,我们可以将原状态空间方程写为:
    • x a k + 1 = A a x a k + B a u k \large x_{a_{k+1}}=A_ax_{a_k}+B_au_k xak+1=Aaxak+Bauk
  • 此时 e k = x k − x d k = [ I − I ] x a k = C a x a k e_k=x_k-x_{d_k}=[I -I]x_{a_k}=C_ax_{a_k} ek=xkxdk=[II]xak=Caxak
  • 据此,我们将代价函数定义为: J = 1 2 e ( N ) T S e ( N ) + 1 2 ∑ k = 0 N − 1 e ( k ) T Q e ( k ) + u ( k ) T R u ( k ) = 1 2 x a ( N ) T C a T Q C a x a ( N ) + 1 2 ∑ k = 0 N − 1 x a ( k ) T C a T Q C a x a ( k ) + u ( k ) T R u ( k ) = 1 2 x a ( N ) T S a x a ( N ) + 1 2 ∑ k = 0 N − 1 x a ( k ) T Q a x a ( k ) + u ( k ) T R u ( k ) \begin{equation}\begin{split} J &=\frac{1}{2}e(N)^TSe(N)+\frac{1}{2}\sum_{k=0}^{N-1} e(k)^TQe(k)+u(k)^TRu(k)\\ &=\frac{1}{2}x_a(N)^TC_a^TQC_ax_a(N)+\frac{1}{2}\sum_{k=0}^{N-1} x_a(k)^TC_a^TQC_ax_a(k)+u(k)^TRu(k)\\ &=\color{red}\frac{1}{2}x_a(N)^TS_ax_a(N)+\frac{1}{2}\sum_{k=0}^{N-1} x_a(k)^TQ_ax_a(k)+u(k)^TRu(k) \end{split}\nonumber\end{equation} J=21e(N)TSe(N)+21k=0N1e(k)TQe(k)+u(k)TRu(k)=21xa(N)TCaTQCaxa(N)+21k=0N1xa(k)TCaTQCaxa(k)+u(k)TRu(k)=21xa(N)TSaxa(N)+21k=0N1xa(k)TQaxa(k)+u(k)TRu(k)

4.1.0 应用局限性

基于上述代价函数,我们可将其应用至弹簧-阻尼-质量系统,并将目标终点设置为某个x值。但是会出现一个问题

  • 我们会发现无论如何设置R的权重,即输入量的大小约束,目标最终都很难收敛至 x d x_d xd
  • 这是因为对于这个系统,要想系统最终稳定在非零位,就必须要施加一个恒力,也就是代价无法缩小至零。
  • 在这个优化过程中,如果R过大,系统便出现了“躺平”的现象,我们需要引入其它的方法来改进这一缺陷。

4.2 稳态目标控制

  • 对于一些系统而言,系统存在稳态,即当输入为 u d u_d ud时,输出为 x d x_d xd,即 x d [ k ] = x d x_d[k]=x_d xd[k]=xd
  • 此时系统表现为: x d = A x d + B u d x_d=Ax_d+Bu_d xd=Axd+Bud
    • 可得: u d = B − 1 ( I − A ) x d u_d=B^{-1}(I-A)x_d ud=B1(IA)xd,需要注意: B − 1 B^{-1} B1不一定存在(B不为方阵时),求解要注意方法
  • 接下来,定义系统稳态输入误差为
    • δ u k = u k − u d \delta u_k=u_k-u_d δuk=ukud u k = δ u k + u d u_k=\delta u_k+u_d uk=δuk+ud
    • 联立系统状态空间方程即稳态时输入与输出的关系,可得
      • x k + 1 = A x k + B δ u k + ( I − A ) x d x_{k+1}=Ax_k+B\delta u_k+(I-A)x_d xk+1=Axk+Bδuk+(IA)xd
  • 参照4.1,我们可将目标输出列入状态矩阵,将状态-空间方程进行改写
    • x a k + 1 = [ x k + 1 x d ] = [ A I − A 0 I ] [ x k x d ] + [ B 0 ] δ u k x_{a_{k+1}}= \begin{bmatrix} x_{k+1}\\ x_d \end{bmatrix}= \begin{bmatrix} A & I-A \\ 0 & I \end{bmatrix} \begin{bmatrix} x_k\\ x_{d} \end{bmatrix} +\begin{bmatrix} B\\ 0 \end{bmatrix} \delta u_k xak+1=[xk+1xd]=[A0IAI][xkxd]+[B0]δuk
    • 即 $ x a k + 1 = A a x a k + B a δ u k \color{black}\large x_{a_{k+1}}=A_ax_{a_k}+B_a\delta u_k xak+1=Aaxak+Baδuk
  • 由此,便可得到新系统的代价函数:
    J = 1 2 x a ( N ) T S a x a ( N ) + 1 2 ∑ k = 0 n − 1 x a ( k ) T Q a x a ( k ) + δ u ( k ) T R δ u ( k ) J=\frac{1}{2}x_a(N)^TS_ax_a(N)+\frac{1}{2}\sum_{k=0}^{n-1} x_a(k)^TQ_ax_a(k)+\delta u(k)^TR\delta u(k) J=21xa(N)TSaxa(N)+21k=0n1xa(k)TQaxa(k)+δu(k)TRδu(k)
    • 最后一项关于输入的代价,反映了当前输入相较于稳态输入的偏离程度

4.3 增量输入控制

  • 在4.1中,我们将目标定义为: x d k + 1 = A D x d k x_{d_{k+1}}=A_Dx_{d_k} xdk+1=ADxdk,其中 A D = I A_D=I AD=I为常数项
  • 如果在控制序列中, x d x_d xd在发生变化,则变成了轨迹跟踪问题,此时 A D A_D AD不为常数
  • 为了处理这样的非稳态控制系统,我们需要对输入进行增量控制。
  • 定义输入的增量为:
    • Δ u k = u k − u k − 1 \Delta u_k=u_k-u_{k-1} Δuk=ukuk1$
    • u k = Δ u k + u k − 1 u_k=\Delta u_k+u_{k-1} uk=Δuk+uk1
  • 由此,系统状态-空间方程可写为: x k + 1 = A x k + B Δ u k + B u k − 1 x_{k+1}=Ax_k+B\Delta u_k+Bu_{k-1} xk+1=Axk+BΔuk+Buk1
  • 设增广向量 x a k = [ x k , x d k , u k − 1 ] T x_{a_k}=[x_{k},x_{d_{k}},u_{k-1}]^T xak=[xk,xdk,uk1]T,那么可写出增广形式的状态空间方程如下
    x a k + 1 = [ x k + 1 x d k + 1 u k ] = [ A 0 B 0 A D 0 0 0 I ] [ x k x d k u k − 1 ] + [ B 0 I ] Δ u k = A a x a k + B a Δ u k \begin{equation}\begin{split}x_{a_{k+1}}&= \begin{bmatrix} x_{k+1}\\x_{d_{k+1}}\\u_k \end{bmatrix}= \begin{bmatrix} A & 0 &B\\ 0 & A_D & 0\\ 0 & 0 & I \end{bmatrix} \begin{bmatrix} x_k\\x_{d_k}\\u_{k-1} \end{bmatrix}+ \begin{bmatrix} B\\0 \\I \end{bmatrix} \Delta u_k\\\\ & = A_ax_{a_k}+B_a\Delta u_k \end{split}\nonumber\end{equation} xak+1= xk+1xdk+1uk = A000AD0B0I xkxdkuk1 + B0I Δuk=Aaxak+BaΔuk
  • 同理4.1与4.2,可将代价函数定义为:
    J = 1 2 x a ( N ) T S a x a ( N ) + 1 2 ∑ k = 0 n − 1 x a ( k ) T Q a x a ( k ) + Δ u ( k ) T R Δ u ( k ) J=\frac{1}{2}x_a(N)^TS_ax_a(N)+\frac{1}{2}\sum_{k=0}^{n-1} x_a(k)^TQ_ax_a(k)+\Delta u(k)^TR\Delta u(k) J=21xa(N)TSaxa(N)+21k=0n1xa(k)TQaxa(k)+Δu(k)TRΔu(k)
    • 通过调节R的值,便可让输入按期望的平滑度进行控制

4.3.1 实例与结论

  • 按照上述方法,如果我们想让弹簧-阻尼-质量系统中的滑块匀速运动,则有
    • x ˙ 1 = x 2 d \dot x_1=x_{2_d} x˙1=x2d x 1 x_1 x1表示位移, x 2 x_2 x2表示速度
    • x ˙ 2 d = 0 \dot{x}_{2_d}=0 x˙2d=0,即加速度为0
  • 将系统离散化,即选取一个采样时间间隔 T s T_s Ts后,可得
    x d k + 1 = [ 1 T s 0 1 ] x d k = A D x d k x_{d_{k+1}}=\begin{bmatrix}1&T_s\\0&1\end{bmatrix}x_{d_k}=A_Dx_{d_k} xdk+1=[10Ts1]xdk=ADxdk
    • 之后,设计 x 2 d x_{2_d} x2d关于时间的函数 X 2 d ( k ) X_{2_d}(k) X2d(k),应用LQR控制,即可实现轨迹跟踪控制
  • 其它结论
    • 如果轨迹为非线性函数,则需要先对其做线性化处理。
    • 轨迹跟踪的本质,就是通过矩阵变换将Tracking问题转为Regulation问题,再应用诸如LQR的调节方法,即可完成轨迹跟踪控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值