AirSim学习日志 5-LQR实现无人机轨迹跟踪

1.LQR控制器算法原理推导

1.1 状态反馈控制

连续线性系统的状态空间表示为
{ x ˙ = A x + B u y = C x + D u x ( t ) ∈ R n , u ( t ) ∈ R m \left \{ \begin{aligned} \dot{x}&=Ax+Bu \\y&=Cx+Du \end{aligned} \right. \\ x(t)\in R^n,u(t)\in R^m {x˙y=Ax+Bu=Cx+Dux(t)Rn,u(t)Rm
对其设计状态反馈控制器
u = w − K x u=w-Kx u=wKx
其中 w w w为设定值, K K K为反馈矩阵,得到的结构图如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hRI3n1D-1657001135363)(https://cdn.jsdelivr.net/gh/kun-k/blogweb/imageimage-20220630163853280.png)]

设计状态反馈的目标为,通过设计反馈矩阵 K K K,使得闭环系统的极点为期望的极点位置。

1.2 连续时间系统LQR

LQR(Linear quadratic regulator,线性二次型调节器)设计的目标为,找到一组控制量 u 0 , u 1 , ⋅ ⋅ ⋅ u_0,u_1,··· u0,u1,,使得状态量 x 0 , x 1 , ⋅ ⋅ ⋅ x_0,x_1,··· x0,x1,能够快速、稳定地趋近并保存平衡状态,且控制量尽可能小。

其优化目标为
m i n J = 1 2 ∫ 0 ∞ ( x T Q x + u T R u ) d t min\quad J=\frac{1}{2}\int_0^\infty (x^TQx+u^TRu)dt minJ=210(xTQx+uTRu)dt
其中,矩阵 Q Q Q为半正定的状态加权矩阵, R R R为正定的控制量加权矩阵,且通常取为对角阵,需根据问题的需求进行设计。接下来对算法进行推导。

使用1.1中的状态反馈,取 w = 0 w=0 w=0以简化问题,将 u = − K x u=-Kx u=Kx带入优化目标后,得到
J = 1 2 ∫ 0 ∞ x T ( Q + K T R K ) x d t ( 1 ) J=\frac{1}{2}\int_0^\infty x^T(Q+K^TRK)xdt\qquad (1) J=210xT(Q+KTRK)xdt(1)
假设存在一个常数矩阵 P P P
d d t ( x T P x ) = − x T ( Q + K T R K ) x ( 2 ) \frac{d}{dt}(x^TPx)=-x^T(Q+K^TRK)x \qquad (2) dtd(xTPx)=xT(Q+KTRK)x(2)

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ J&=\frac{1}{2}…
为使得 J J J达到最小值, t → ∞ t\rightarrow \infty t x ( t ) x(t) x(t)应趋于0,故
J = 1 2 x T ( 0 ) P x ( 0 ) ( 3 ) J=\frac{1}{2}x^T(0)Px(0)\qquad (3) J=21xT(0)Px(0)(3)
将(2)式左侧微分展开后得到
x ˙ T P x + x T P x ˙ + x T Q x + x T K T R K T x = 0 ( 4 ) \dot{x}^TPx+x^TP\dot{x}+x^TQx+x^TK^TRK^Tx=0\qquad (4) x˙TPx+xTPx˙+xTQx+xTKTRKTx=0(4)
又因为
x ˙ = A x + B u = ( A − B K ) x = A ′ x ( 5 ) \dot{x}=Ax+Bu=(A-BK)x=A'x\qquad (5) x˙=Ax+Bu=(ABK)x=Ax(5)
代入(4)式得到s
x T A ′ T P x + x T P A ′ x + x T Q x + x T K T R K T x = 0 x^TA'^TPx+x^TPA'x+x^TQx+x^TK^TRK^Tx=0\qquad xTATPx+xTPAx+xTQx+xTKTRKTx=0
整理得到
x T ( A ′ T P + P A ′ + Q + K T R K T ) x = 0 x^T(A'^TP+PA'+Q+K^TRK^T)x=0\qquad xT(ATP+PA+Q+KTRKT)x=0

A ′ T P + P A ′ + Q + K T R K T = 0 A'^TP+PA'+Q+K^TRK^T=0 ATP+PA+Q+KTRKT=0

( A − B K ) T P + P ( A − B K ) + Q + K T R K T = 0 A T P + P A + Q + K T R K − K T B T P − P B K = 0 (A-BK)^TP+P(A-BK)+Q+K^TRK^T=0 \\A^TP+PA+Q+K^TRK-K^TB^TP-PBK=0 (ABK)TP+P(ABK)+Q+KTRKT=0ATP+PA+Q+KTRKKTBTPPBK=0
K = R − 1 B T P K=R^{-1}B^TP K=R1BTP时上式取最小值,此时上式化为
A T P + P A + Q − P B R − 1 B T P = 0 A^TP+PA+Q-PBR^{-1}B^TP=0 ATP+PA+QPBR1BTP=0
可求解得到矩阵 P P P

故连续时间系统的LQR算法流程为

  1. 根据实际问题选择参数矩阵 Q , R Q,R Q,R
  2. 求解方程 A T P + P A + Q − P B R − 1 B T P = 0 A^TP+PA+Q-PBR^{-1}B^TP=0 ATP+PA+QPBR1BTP=0得到矩阵 P P P
  3. 计算反馈矩阵 K = R − 1 B T P K=R^{-1}B^TP K=R1BTP
  4. 计算控制量 u = − K x u=-Kx u=Kx
1.3 离散时间系统无限时间LQR

离散时间系统的状态空间描述为
X ( k + 1 ) = A X ( k ) + B u ( k ) X(k+1)=AX(k)+Bu(k) X(k+1)=AX(k)+Bu(k)
LQR计算的优化目标为
m i n J = 1 2 ∑ k = 1 ∞ [ x ( k ) T Q x ( k ) + u ( k ) T R u ( k ) ] min\quad J=\frac{1}{2}\sum_{k=1}^\infty [x(k)^TQx(k)+u(k)^TRu(k)] minJ=21k=1[x(k)TQx(k)+u(k)TRu(k)]
这个问题可以用线性规划的方法求解,求解过程比较复杂,也没有深究,感兴趣的话可以看这个视频:https://www.bilibili.com/video/BV1P54y1m7CZ?share_source=copy_web

该问题求解的结果为
P = Q + A T P A − A T P B ( R + B T P B ) − 1 B T P A K = ( R + B T P B ) − 1 B T P A u ( k ) = − K X ( k ) P=Q+A^TPA-A^TPB(R+B^TPB)^{-1}B^TPA \\K=(R+B^TPB)^{-1}B^TPA \\u(k)=-KX(k) P=Q+ATPAATPB(R+BTPB)1BTPAK=(R+BTPB)1BTPAu(k)=KX(k)
离散时间无限时间系统的LQR算法(DLQR)流程为

  1. 根据实际问题选择参数矩阵 Q , R Q,R Q,R
  2. 根据方程 P = Q + A T P A − A T P B ( R + B T P B ) − 1 B T P A P=Q+A^TPA-A^TPB(R+B^TPB)^{-1}B^TPA P=Q+ATPAATPB(R+BTPB)1BTPA,计算矩阵 P P P
  3. 计算反馈矩阵 K = ( R + B T P B ) − 1 B T P A K=(R+B^TPB)^{-1}B^TPA K=(R+BTPB)1BTPA
  4. 计算控制量 u = − K X ( k ) u=-KX(k) u=KX(k)

2.无人机轨迹跟踪控制器DLQR算法设计

取无人机的位置和速度为状态量: x = [ p , v ] T x=[p, v]^T x=[p,v]T,加速度为输入量 u = a u=a u=a,则系统状态方程为
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ &x(k+1)=Ax(k)+…
假设要跟踪的目标轨迹为 x d e s = [ p d e s , v d e s ] T x_{des}=[p_{des}, v_{des}]^T xdes=[pdes,vdes]T,加速度为 a d e s a_{des} ades,则 x d e x , a d e x x_{dex},a_{dex} xdex,adex满足
x d e s ( k + 1 ) = A x d e s ( k ) + B a d e s ( k ) ( 2 ) x_{des}(k+1)=Ax_{des}(k)+Ba_{des}(k)\qquad(2) xdes(k+1)=Axdes(k)+Bades(k)(2)
将(1)(2)两个式子相减得到:
[ x d e s ( k + 1 ) − x ( k + 1 ) ] = A [ x d e s ( k ) − x ( k ) ] + B ( a d e s ( k ) − u ( k ) ) [x_{des}(k+1)-x(k+1)]=A[x_{des}(k)-x(k)]+B(a_{des}(k)-u(k)) [xdes(k+1)x(k+1)]=A[xdes(k)x(k)]+B(ades(k)u(k))
上式可以看作是一个以 x d e s − x x_{des}-x xdesx为状态变量的状态方程,设计LQR控制器使得 x d e s − x x_{des}-x xdesx趋于0,其优化目标为:
m i n J = 1 2 ∑ k = 1 ∞ { [ x d e s ( k ) − x ( k ) ] T Q [ x d e s ( k ) − x ( k ) ] + [ a d e s ( k ) − u ( k ) ] T R [ a d e s ( k ) − u ( k ) ] } min\quad J=\frac{1}{2}\sum_{k=1}^\infty \{[x_{des}(k)-x(k)]^TQ[x_{des}(k)-x(k)] +[a_{des}(k)-u(k)]^TR[a_{des}(k)-u(k)]\} minJ=21k=1{[xdes(k)x(k)]TQ[xdes(k)x(k)]+[ades(k)u(k)]TR[ades(k)u(k)]}
其求解结果为 a d e x ( k ) − u ( k ) = − K [ x d e x ( k ) − x ( k ) ] a_{dex}(k)-u(k)=-K[x_{dex}(k)-x(k)] adex(k)u(k)=K[xdex(k)x(k)],则四旋翼的系统输入量为 u ( k ) = − K [ x ( k ) − x d e x ( k ) ] + a d e x ( k ) u(k)=-K[x(k)-x_{dex}(k)]+a_{dex}(k) u(k)=K[x(k)xdex(k)]+adex(k),可根据1.3中的方法计算反馈矩阵和系统输入量。

加权矩阵可取
Q = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] , R = [ 0.4 0 0 0.4 ] Q=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}, R=\begin{bmatrix}0.4&0\\0&0.4\end{bmatrix} Q=1000010000100001,R=[0.4000.4]

3.使用加速度进行无人机控制

3.1 四旋翼姿态解算

根据四旋翼的横滚、俯仰、偏航三个角度的计算,可以得到四旋翼的姿态,横滚角 ϕ \phi ϕ、俯仰角 θ \theta θ、偏航角 ψ \psi ψ的示意如下图所示:

image-20220701113706395

假设一向量 t t t,其在世界坐标系world和机体坐标系body下均为 ( t 1 , t 2 , t 3 ) T (t_1,t_2,t_3)^T (t1,t2,t3)T。经过偏航、俯仰、横滚,即依次绕 x , y , z x,y,z x,y,z轴旋转后,在世界坐标系下得到向量 t w t^w tw,在机体坐标系下向量 t t t依然为 ( t 1 , t 2 , t 3 ) T (t_1,t_2,t_3)^T (t1,t2,t3)T。需计算机体坐标系到世界坐标系之间的旋转矩阵,使 t w = R ⋅ t t^w=R·t tw=Rt

首先计算向量 t t t x x x轴旋转的旋转矩阵 R x R_x Rx,将其分解为向量
t x = ( t 1 , 0 , 0 ) T , t y = ( 0 , t 2 , 0 ) T , t z = ( 0 , 0 , t 3 ) T t_x=(t_1,0,0)^T,t_y=(0,t_2,0)^T,t_z=(0,0,t_3)^T tx=(t1,0,0)T,ty=(0,t2,0)T,tz=(0,0,t3)T
容易计算得三个分量绕 x x x轴旋转角度 ϕ \phi ϕ后,转换为向量
t x w = ( t 1 , 0 , 0 ) T , t y w = ( 0 , t 2 ⋅ c o s ϕ , t 2 ⋅ s i n ϕ ) T , t z w = ( 0 , − t 3 ⋅ s i n ϕ , t 3 ⋅ c o s ϕ ) T t ′ = t x ′ w + t y w + t z w = ( t 1 , t 2 ⋅ c o s ϕ − t 3 ⋅ s i n ϕ , t 2 ⋅ s i n ϕ + t 3 ⋅ c o s ϕ ) T t_x^w=(t_1,0,0)^T,t_y^w=(0,t_2·cos\phi,t_2·sin\phi)^T,t_z^w=(0,-t_3·sin\phi,t_3·cos\phi)^T \\t'=t_x'^w+t_y^w+t_z^w=(t_1,t_2·cos\phi-t_3·sin\phi,t_2·sin\phi+t_3·cos\phi)^T txw=(t1,0,0)T,tyw=(0,t2cosϕ,t2sinϕ)T,tzw=(0,t3sinϕ,t3cosϕ)Tt=txw+tyw+tzw=(t1,t2cosϕt3sinϕ,t2sinϕ+t3cosϕ)T

R x = [ 1 0 0 0 c o s ϕ − s i n ϕ 0 s i n ϕ c o s ϕ ] R_x= \begin{bmatrix} 1&0&0\\ 0&cos\phi&-sin\phi\\ 0&sin\phi&cos\phi \end{bmatrix} Rx=1000cosϕsinϕ0sinϕcosϕ
同理,可计算得
R y = [ c o s θ 0 s i n θ 0 1 0 − s i n θ 0 c o s θ ] , R z = [ c o s ψ − s i n ψ 0 s i n ψ c o s ψ 0 0 0 1 ] R_y= \begin{bmatrix} cos\theta&0&sin\theta\\ 0&1&0\\ -sin\theta&0&cos\theta \end{bmatrix}, R_z= \begin{bmatrix} cos\psi&-sin\psi&0\\ sin\psi&cos\psi&0\\ 0&0&1 \end{bmatrix} Ry=cosθ0sinθ010sinθ0cosθ,Rz=cosψsinψ0sinψcosψ0001
则向量 t t t依次绕 x , y , z x,y,z x,y,z轴旋转的旋转矩阵为
R = R z R y R x R=R_zR_yR_x R=RzRyRx

故机体坐标系下的向量 t t t,变换到世界坐标系下向量 t ′ t' t,变换矩阵为 R = R z R y R x R=R_zR_yR_x R=RzRyRx

3.2 根据四旋翼加速度解算姿态角

如果坐标系、欧拉角的定义、坐标轴旋转的方向等不同,会导致旋转矩阵的计算结果不同,故3.1中的结果不能直接搬移到其他坐标系中。AirSim中, 世界坐标系 x , y , z x,y,z x,y,z三个坐标轴的朝向分别为北、东、地,机体坐标系 z , y , z z,y,z z,y,z三个坐标轴的朝向分别为前、右、下,滚转角、俯仰角、偏航角的旋转方向分别为顺时针、顺时针、逆时针。按照3.1中的计算方法,计算得三个旋转矩阵为
R x = [ 1 0 0 0 c o s ϕ − s i n ϕ 0 s i n ϕ c o s ϕ ] , R y = [ c o s θ 0 − s i n θ 0 1 0 s i n θ 0 c o s θ ] , R z = [ c o s ψ s i n ψ 0 − s i n ψ c o s ψ 0 0 0 1 ] R_x= \begin{bmatrix} 1&0&0\\ 0&cos\phi&-sin\phi\\ 0&sin\phi&cos\phi \end{bmatrix}, R_y= \begin{bmatrix} cos\theta&0&-sin\theta\\ 0&1&0\\ sin\theta&0&cos\theta \end{bmatrix}, R_z= \begin{bmatrix} cos\psi&sin\psi&0\\ -sin\psi&cos\psi&0\\ 0&0&1 \end{bmatrix} Rx=1000cosϕsinϕ0sinϕcosϕRy=cosθ0sinθ010sinθ0cosθ,Rz=cosψsinψ0sinψcosψ0001
这里只考虑无人机水平运动的情况,即无人机保持一定高度,只存在水平方向的加速度,竖直方向加速度为0。

在机体坐标系下,无人机的四个旋翼产生的升力沿 − x -x x方向,故加速度 a b = ( 0 , 0 , − k ) T a^b=(0,0,-k)^T ab=(0,0,k)T k k k为未知参数。

将向量 a b a^b ab变换到世界坐标系下,
a w = R a b = − k ⋅ ( m 1 , m 2 , c o s ϕ ⋅ c o s θ ) T ( m 1 , m 2 ) T = [ c o s ψ s i n ψ − s i n ψ c o s ψ ] ⋅ [ − s i n θ ⋅ c o s ϕ − s i n ϕ ] a^w=Ra^b=-k·(m_1,m_2,cos\phi·cos\theta)^T \\(m_1,m_2)^T= \begin{bmatrix} cos\psi&sin\psi\\ -sin\psi&cos\psi \end{bmatrix}· \begin{bmatrix} -sin\theta·cos\phi\\ -sin\phi \end{bmatrix} aw=Rab=k(m1,m2,cosϕcosθ)T(m1,m2)T=[cosψsinψsinψcosψ][sinθcosϕsinϕ]
在世界坐标系下,无人机同时受到重力和旋翼的升力,其总加速度为
a = g + a w = ( − k ⋅ m 1 , − k ⋅ m 2 , − k ⋅ c o s ϕ ⋅ c o s θ + g ) T a=g+a^w=(-k·m_1,-k·m_2,-k·cos\phi·cos\theta+g)^T a=g+aw=(km1,km2,kcosϕcosθ+g)T
由于无人机在 z z z轴上加速度为0,故
− k ⋅ c o s ϕ ⋅ c o s θ + g = 0 k = g c o s ϕ ⋅ c o s θ -k·cos\phi·cos\theta+g=0 \\k=\frac{g}{cos\phi·cos\theta} kcosϕcosθ+g=0k=cosϕcosθg
无人机在其他两个方向的加速度为
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ (a_x,a_y)^T&= …

然后可以根据加速度解算出无人机的姿态角。

3.3 AirSim中四旋翼的姿态角控制

解算出四旋翼的姿态角后,可使用如下的函数控制;

moveByRollPitchYawZAsync(roll, pitch, yaw, z, duration, vehicle_name)

四个参数分别为滚转角、俯仰角、偏航角、高度、持续时间。

综上,使用LQR实现无人机轨迹跟踪的算法流程为:
在这里插入图片描述

参考来源:

四旋翼轨迹跟踪:https://zhuanlan.zhihu.com/p/394491146

连续时间LQR控制算法原理推导:https://blog.csdn.net/weixin_42301220/article/details/124542242

离散时间无限时间系统LQR控制算法推导:https://www.bilibili.com/video/BV1P54y1m7CZ?share_source=copy_web

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值