四旋翼无人机建模 (附github源代码)

这篇具有很好参考价值的文章主要介绍了四旋翼无人机建模 (附github源代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

四旋翼无人机的应用十分广泛,而且四旋翼无人机是非常理想的控制模型。因为四旋翼是四输入(四个螺旋桨的升力) 六输出 (三个位置,三个姿态角)的欠驱动系统,而且四旋翼的三个姿态角之间是互相耦合的,并且位置与姿态也是耦合的,加上其固有的非线性特性,因此对于学习和熟悉控制系统是十分有帮助的。本文简要介绍无人机的建模以及串级PID控制器的设计。

无人机建模

坐标变换

四旋翼运动过程中实际上涉及很多坐标系,一般包括惯性系,地面系,机体系等等。本文假设四旋翼的运动范围不大,因此本文将惯性系和地面坐标系当做同一坐标系处理。并且为了方面显示图形,将无人机的机头定义为机体系+X,无人机的正左方定义为机体系+Y,垂直向上定义为机体系+Z;同理,水平向前定义为惯性系+X,水平向左定义为惯性系+Y,竖直向上定义为惯性系+Z(很多资料,使用前、右、下作为无人机的机体坐标系正方向,同时使用北东地作为惯性系,二者仅仅相差一个旋转矩阵,无本质差别)。给出图示:
四旋翼无人机建模 (附github源代码)
图中,CCW代表逆时针旋转,CW代表顺时针旋转, X b Y b Z b X_bY_bZ_b XbYbZb代表机体系, X i Y i Z i X_iY_iZ_i XiYiZi代表地面系。

地面系( O i X i Y i Z i O_iX_iY_iZ_i OiXiYiZi,记为 S i S_i Si)与机体系( O b X b Y b Z b O_bX_bY_bZ_b ObXbYbZb,记为 S b S_b Sb)之间的平移关系比较简单,四旋翼在 S i S_i Si系中的位置坐标就是两个坐标系的位置关系。 S i S_i Si S b S_b Sb之间的旋转关系由三个姿态角决定,分别为滚转角 ϕ \phi ϕ,俯仰角 θ \theta θ和偏航角 ψ \psi ψ。但是三个坐标轴的旋转顺序不同会产生不同的结果,所以这里按照一般顺序定义:先转 ψ \psi ψ,再转 θ \theta θ,最后转 ϕ \phi ϕ。其对应的旋转矩阵及临时坐标系定义如下:

  1. 绕惯性系 S i S_i Si Z Z Z O Z i OZ_i OZi旋转 ψ \psi ψ,得到临时坐标系 S b 1 S_{b1} Sb1。旋转矩阵为 R i b 1 ( ψ ) = [ cos ⁡ ψ sin ⁡ ψ 0 − sin ⁡ ψ cos ⁡ ψ 0 0 0 1 ] R_i^{b1}\left(\psi\right) = \left[ \begin{matrix} \cos{\psi} & \sin{\psi} & 0 \\ -\sin{\psi} & \cos{\psi} & 0\\ 0 & 0 & 1 \end{matrix} \right] Rib1(ψ)= cosψsinψ0sinψcosψ0001
  2. 绕系 S b 1 S_{b1} Sb1 Y Y Y O Y b 1 OY_{b1} OYb1旋转 θ \theta θ,得到临时坐标系 S b 2 S_{b2} Sb2。旋转矩阵为 R b 1 b 2 ( θ ) = [ cos ⁡ θ 0 − sin ⁡ θ 0 1 0 sin ⁡ θ 0 cos ⁡ θ ] R_{b1}^{b2}\left(\theta\right) = \left[ \begin{matrix} \cos{\theta} & 0 & -\sin{\theta} \\ 0 & 1 & 0\\ \sin{\theta} & 0 & \cos{\theta} \end{matrix} \right] Rb1b2(θ)= cosθ0sinθ010sinθ0cosθ
  3. 绕系 S b 2 S_{b2} Sb2 X X X O X b 2 OX_{b2} OXb2旋转 ϕ \phi ϕ,得到机体坐标系 S b S_{b} Sb。旋转矩阵为 R b 2 b ( ϕ ) = [ 1 0 0 0 cos ⁡ ϕ sin ⁡ ϕ 0 − sin ⁡ ϕ cos ⁡ ϕ ] R_{b2}^{b}\left(\phi\right) = \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & \cos{\phi} & \sin{\phi}\\ 0 & -\sin{\phi} & \cos{\phi} \end{matrix} \right] Rb2b(ϕ)= 1000cosϕsinϕ0sinϕcosϕ

综上,从地面系到机体系的旋转矩阵为
R i b = R b 2 b ( ϕ ) ⋅ R b 1 b 2 ( θ ) ⋅ R I b 1 ( ψ ) = [ c ( ψ ) c ( θ ) c ( θ ) s ( ψ ) − s ( θ ) c ( ψ ) s ( ϕ ) s ( θ ) − c ( ϕ ) s ( ψ ) c ( ϕ ) c ( ψ ) + s ( ϕ ) s ( ψ ) s ( θ ) c ( θ ) s ( ϕ ) s ( ϕ ) s ( ψ ) + c ( ϕ ) c ( ψ ) s ( θ ) c ( ϕ ) s ( ψ ) s ( θ ) − c ( ψ ) s ( ϕ ) c ( ϕ ) c ( θ ) ] \begin{align} \begin{aligned} R_i^b &= R_{b2}^{b}\left(\phi\right)\cdot R_{b1}^{b2}\left(\theta\right) \cdot R_I^{b1}\left(\psi\right)\\ &=\left[ \begin{matrix} c(\psi)c(\theta) & c(\theta)s(\psi) & -s(\theta)\\ c(\psi)s(\phi)s(\theta) - c(\phi)s(\psi) & c(\phi)c(\psi) + s(\phi)s(\psi)s(\theta) & c(\theta)s(\phi)\\ s(\phi)s(\psi) + c(\phi)c(\psi)s(\theta) & c(\phi)s(\psi)s(\theta) - c(\psi)s(\phi) & c(\phi)c(\theta) \end{matrix} \right] \end{aligned} \end{align} Rib=Rb2b(ϕ)Rb1b2(θ)RIb1(ψ)= c(ψ)c(θ)c(ψ)s(ϕ)s(θ)c(ϕ)s(ψ)s(ϕ)s(ψ)+c(ϕ)c(ψ)s(θ)c(θ)s(ψ)c(ϕ)c(ψ)+s(ϕ)s(ψ)s(θ)c(ϕ)s(ψ)s(θ)c(ψ)s(ϕ)s(θ)c(θ)s(ϕ)c(ϕ)c(θ)
相对应的,从机体系到地面系的变换矩阵为
R b i = R i b − 1 = R i b T = [ c ( ψ ) c ( θ ) c ( ψ ) s ( ϕ ) s ( θ ) − c ( ϕ ) s ( ψ ) s ( ϕ ) s ( ψ ) + c ( ϕ ) c ( ψ ) s ( θ ) c ( θ ) s ( ψ ) c ( ϕ ) c ( ψ ) + s ( ϕ ) s ( ψ ) s ( θ ) c ( ϕ ) s ( ψ ) s ( θ ) − c ( ψ ) s ( ϕ ) − s ( θ ) c ( θ ) s ( ϕ ) c ( ϕ ) c ( θ ) . ] \begin{align} \begin{aligned} R_b^i &= {R_{i}^{b}}^{-1} = {R_i^b}^T\\ &=\left[ \begin{matrix} c(\psi)c(\theta) & c(\psi)s(\phi)s(\theta) - c(\phi)s(\psi) & s(\phi)s(\psi) + c(\phi)c(\psi)s(\theta)\\ c(\theta)s(\psi) & c(\phi)c(\psi) + s(\phi)s(\psi)s(\theta) & c(\phi)s(\psi)s(\theta) - c(\psi)s(\phi)\\ -s(\theta) & c(\theta)s(\phi) & c(\phi)c(\theta) \end{matrix}. \right] \end{aligned} \end{align} Rbi=Rib1=RibT= c(ψ)c(θ)c(θ)s(ψ)s(θ)c(ψ)s(ϕ)s(θ)c(ϕ)s(ψ)c(ϕ)c(ψ)+s(ϕ)s(ψ)s(θ)c(θ)s(ϕ)s(ϕ)s(ψ)+c(ϕ)c(ψ)s(θ)c(ϕ)s(ψ)s(θ)c(ψ)s(ϕ)c(ϕ)c(θ).

位置-速度回路动态模型

在得到上面的旋转矩阵之后,加上牛顿第二定律,就可以给出四旋翼的位置动力学模型。
{ v i = x ˙ i a i = v ˙ i = m g i + f b m \begin{align} \left\{ \begin{aligned} & \boldsymbol{v}^i = \dot{\boldsymbol{x}}^i\\ & \boldsymbol{a}^i = \dot{\boldsymbol{v}}^i = \frac{m\boldsymbol{g}^i + \boldsymbol{f}^b}{m} \end{aligned} \right. \end{align} vi=x˙iai=v˙i=mmgi+fb
其中,上角标 i i i代表地面系,上角标 b b b代表机体系。已知高中的知识点:向量可以在空间内随意平移,标量没有坐标系的概念,所以把公式 ( 3 ) (3) (3)中的向量统一平移到地面系的原点是完全合理的。因此,可以利用旋转矩阵 ( 2 ) (2) (2)将力转换到地面系中,有
f i = R b i ⋅ f b ⋅ e 3 \begin{align} \begin{aligned} \boldsymbol{f}^i=R_b^i \cdot f^b \cdot \boldsymbol{e}_3 \end{aligned} \end{align} fi=Rbifbe3
其中 e 3 = [ 0 0 1 ] \boldsymbol{e}_3=\left[\begin{matrix}0\\0\\1\end{matrix}\right] e3= 001 为机体系的Z轴对应的单位向量,所以有
[ v ˙ x v ˙ y v ˙ z ] = − g i ⋅ [ 0 0 1 ] + f b m ⋅ R b i ⋅ [ 0 0 1 ] . \begin{align} \begin{aligned} \left[\begin{matrix} \dot{v}_x \\ \dot{v}_y \\ \dot{v}_z \end{matrix}\right] = -g^i \cdot \left[\begin{matrix}0 \\ 0 \\ 1\end{matrix}\right] + \frac{f^b}{m}\cdot R_b^i \cdot \left[\begin{matrix}0 \\ 0 \\ 1\end{matrix}\right]. \end{aligned} \end{align} v˙xv˙yv˙z =gi 001 +mfbRbi 001 .
( 2 ) (2) (2)带入 ( 5 ) (5) (5)得到
{ x ˙ = v x y ˙ = v y x ˙ = v z v ˙ x = f m [ c ( ψ ) s ( θ ) c ( ϕ ) + s ( ψ ) s ( ϕ ) ] v ˙ y = f m [ s ( ψ ) s ( θ ) c ( ϕ ) − c ( ψ ) s ( ϕ ) ] v ˙ z = − g + f m c ( ϕ ) c ( θ ) \begin{align} \left\{ \begin{aligned} & \dot{x} = v_x\\ & \dot{y} = v_y\\ & \dot{x} = v_z\\ &\dot{v}_x = \frac{f}{m}\left[c(\psi)s(\theta)c(\phi)+s(\psi)s(\phi)\right]\\ &\dot{v}_y = \frac{f}{m}\left[s(\psi)s(\theta)c(\phi) - c(\psi)s(\phi)\right]\\ &\dot{v}_z = -g + \frac{f}{m}c(\phi)c(\theta)\\ \end{aligned} \right. \end{align} x˙=vxy˙=vyx˙=vzv˙x=mf[c(ψ)s(θ)c(ϕ)+s(ψ)s(ϕ)]v˙y=mf[s(ψ)s(θ)c(ϕ)c(ψ)s(ϕ)]v˙z=g+mfc(ϕ)c(θ)
其中 f = C T ( ω 1 2 + ω 2 2 + ω 3 2 + ω 4 2 ) f=C_T\left(\omega_1^2 + \omega_2^2 + \omega_3^2 + \omega_4^2\right) f=CT(ω12+ω22+ω32+ω42) 是油门 (四个电机的升力和), C T C_T CT是升力系数, ω i , i = 1 , 2 , 3 , 4 \omega_i,i=1,2,3,4 ωi,i=1,2,3,4 是第 i i i个电机的转速。写成矩阵形式如下:
{ [ x ˙ y ˙ z ˙ ] = [ 1 0 0 0 1 0 0 0 1 ] [ v x v y v z ] [ v ˙ x v ˙ y v ˙ z ] = f m [ c ( ψ ) s ( θ ) c ( ϕ ) + s ( ψ ) s ( ϕ ) s ( ψ ) s ( θ ) c ( ϕ ) − c ( ψ ) s ( ϕ ) c ( ϕ ) c ( θ ) ] − [ 0 0 g ] \begin{align} \left\{ \begin{aligned} & \left[\begin{matrix}\dot{x}\\\dot{y}\\\dot{z}\end{matrix}\right] = \left[\begin{matrix} 1&0&0\\0&1&0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}v_x\\v_y\\v_z\end{matrix}\right]\\ & \left[\begin{matrix}\dot{v}_x\\\dot{v}_y\\\dot{v}_z\end{matrix}\right] = \frac{f}{m} \left[\begin{matrix} c(\psi)s(\theta)c(\phi)+s(\psi)s(\phi)\\ s(\psi)s(\theta)c(\phi) - c(\psi)s(\phi)\\ c(\phi)c(\theta) \end{matrix}\right]-\left[\begin{matrix}0\\0\\g\end{matrix}\right]\\ \end{aligned} \right. \end{align} x˙y˙z˙ = 100010001 vxvyvz v˙xv˙yv˙z =mf c(ψ)s(θ)c(ϕ)+s(ψ)s(ϕ)s(ψ)s(θ)c(ϕ)c(ψ)s(ϕ)c(ϕ)c(θ) 00g
至此,位置动力学模型建立完成。

姿态-旋转角速度回路动态模型

这里需要引入刚体动力学的欧拉方程。
J ω ˙ b + ω b × J ω b = M g + τ b \begin{align} \begin{aligned} J\dot{\boldsymbol{\omega}}^b + \boldsymbol{\omega}^b\times J\boldsymbol{\omega}^b = \boldsymbol{M}^{g} + \boldsymbol{\tau}^b \end{aligned} \end{align} Jω˙b+ωb×Jωb=Mg+τb
其中, J = d i a g ( J x x , J y y , J z z ) J=diag(J_{xx}, J_{yy}, J_{zz}) J=diag(Jxx,Jyy,Jzz) 无人机沿其机体轴方向的惯性张量矩阵, ω b = [ p q r ] T \boldsymbol{\omega}^b = \left[\begin{matrix}p&q&r\end{matrix}\right]^T ωb=[pqr]T 无人机在机体系 S b S_b Sb下的旋转角速度, M g = [ M x g M y g M z g ] T \boldsymbol{M}^{g}=\left[\begin{matrix} M_x^g & M_y^g & M_z^g \end{matrix}\right]^T Mg=[MxgMygMzg]T是机体系下的陀螺力矩 S b S_b Sb τ b = [ τ x b τ y b τ z b ] T \boldsymbol{\tau}^b=\left[\begin{matrix} \tau_x^b & \tau_y^b & \tau_z^b \end{matrix}\right]^T τb=[τxbτybτzb]T 是无人机的升力为无人机提供的力矩。

Tips:
很多无人机建模忽略了陀螺力矩的影响,实际是不可以忽略的,因为电机的质量虽然只占整个机体很小的比重,但是电机是高速旋转的。众所周知,高速旋转的刚体具有“定轴性”。意思就是,当它的转轴不变的时候,没有任何事情发生,但是如果转轴的方向发生改变,陀螺就会产生“进动”,意图抗拒这个“改变”。所以,当四旋翼悬停的时候,是没有陀螺力矩的;四旋翼只有偏航角改变的时候,也是没有陀螺力矩的。但是如果四旋翼的俯仰角或滚转角发生变化的时候,就会产生陀螺力矩。如果不考虑这个力矩,最后通过调节PID控制器的参数,也能把无人机控制地很好,但是陀螺进动给模型带来的变化是不可以忽略的。

陀螺进动的方程为 G = H × ω ′ = J 0 ω × ω ′ \boldsymbol{G} = \boldsymbol{H} \times \boldsymbol{\omega}' = J_0\boldsymbol{\omega}\times \boldsymbol{\omega}' G=H×ω=J0ω×ω,其中 G \boldsymbol{G} G为电机 (加螺旋桨) 的进动力矩, J 0 J_0 J0为电机加螺旋桨沿着电机转轴的转动惯量, ω \omega ω为电机的转速, ω ′ \omega' ω为电机的转轴的转速 (这里就是无人机本身的转速)。进而有,
M g = [ M x M y M z ] = [ ∑ i = 1 4 H i × q ∑ i = 1 4 H i × 1 0 ] = [ J 0 q ( − ω 1 + ω 2 − ω 3 + ω 4 ) J 0 p ( ω 1 − ω 2 + ω 3 − ω 4 ) 0 ] \begin{align} \begin{aligned} \boldsymbol{M}^{g} = \left[\begin{matrix} M_x \\ M_y \\M_z \end{matrix}\right]=\left[\begin{matrix} \sum_{i=1}^4{\boldsymbol{H}_i\times q}\\ \sum_{i=1}^4{\boldsymbol{H}_i\times 1} \\ 0 \end{matrix}\right] = \left[\begin{matrix} J_0q\left(-\omega_1+\omega_2-\omega_3+\omega_4\right)\\ J_0p\left(\omega_1-\omega_2+\omega_3-\omega_4\right) \\ 0 \end{matrix}\right] \end{aligned} \end{align} Mg= MxMyMz = i=14Hi×qi=14Hi×10 = J0q(ω1+ω2ω3+ω4)J0p(ω1ω2+ω3ω4)0
其中, p p p q q q已经在上文提到过, H i \boldsymbol{H}_i Hi的方向与电机的旋转方向相同,从上图中可以看出,1号3号向上,2号4号向下。

τ b \tau_b τb的表达式比较简单,就是中学阶段学过的力矩 = = = × \times ×力臂。有
τ b = [ τ x τ y τ z ] = [ 2 C T d 2 ( ω 1 2 − ω 2 2 − ω 3 2 + ω 4 2 ) 2 C T d 2 ( − ω 1 2 − ω 2 2 + ω 3 2 + ω 4 2 ) C M ( − ω 1 2 + ω 2 2 − ω 3 2 + ω 4 2 ) ] \begin{align} \begin{aligned} \boldsymbol{\tau}^b = \left[\begin{matrix} \tau_x \\ \tau_y \\ \tau_z \end{matrix}\right]=\left[\begin{matrix} \frac{\sqrt{2}C_Td}{2}\left(\omega_1^2 - \omega_2^2 - \omega_3^2 + \omega_4^2\right) \\ \frac{\sqrt{2}C_Td}{2}\left(-\omega_1^2 - \omega_2^2 + \omega_3^2 + \omega_4^2\right) \\ C_M\left(-\omega_1^2 + \omega_2^2 - \omega_3^2 + \omega_4^2\right) \end{matrix}\right] \end{aligned} \end{align} τb= τxτyτz = 22 CTd(ω12ω22ω32+ω42)22 CTd(ω12ω22+ω32+ω42)CM(ω12+ω22ω32+ω42)
其中, C M C_M CM为无人机的力矩系数,我们可以认为俯仰和滚转力矩就是电机的螺旋桨产生的,但是偏航的力矩本身不是由电机螺旋桨产生的。偏航力矩本身是由螺旋桨高速旋转与周围空气产生作用,然后空气作用给无人机的反作用力产生的。因此1号电机产生的角动量朝上,但是它在无人机偏航上的贡献是负的,其余三个电机以此类推。 (这个过程类似于坐在可以旋转的办公椅上,用手推门,自己身体会朝反方向转一样。本人没有学过空气动力学,所以最开始误解了。)

( 8 ) (8) (8)左边部分,直接按照向量叉乘的规则直接代入就好,没有任何细节和陷阱。综合 ( 8 ) − ( 10 ) (8)-(10) (8)(10)
{ p ˙ = 1 J x x [ 2 C T d 2 ( ω 1 2 − ω 2 2 − ω 3 2 + ω 4 2 ) + ( J y y − J z z ) q r − J 0 q Ω ] q ˙ = 1 J y y [ 2 C T d 2 ( − ω 1 2 − ω 2 2 + ω 3 2 + ω 4 2 ) + ( J z z − J x x ) p r + J 0 p Ω ] r ˙ = 1 J z z [ C M ( − ω 1 2 + ω 2 2 − ω 3 2 + ω 4 2 ) + ( J x x − J y y ) p q ] \begin{align} \left\{ \begin{aligned} & \dot{p} = \frac{1}{J_{xx}}\left[\frac{\sqrt{2}C_Td}{2}\left(\omega_1^2 - \omega_2^2 - \omega_3^2 + \omega_4^2\right)+\left(J_{yy}-J_{zz}\right)qr - J_0q\Omega\right] \\ & \dot{q} = \frac{1}{J_{yy}}\left[\frac{\sqrt{2}C_Td}{2}\left(-\omega_1^2 - \omega_2^2 + \omega_3^2 + \omega_4^2\right) +\left(J_{zz}-J_{xx}\right)pr + J_0p\Omega\right] \\ & \dot{r} = \frac{1}{J_{zz}}\left[C_M\left(-\omega_1^2 + \omega_2^2 - \omega_3^2 + \omega_4^2\right) +\left(J_{xx}-J_{yy}\right)pq \right] \end{aligned} \right. \end{align} p˙=Jxx1[22 CTd(ω12ω22ω32+ω42)+(JyyJzz)qrJ0qΩ]q˙=Jyy1[22 CTd(ω12ω22+ω32+ω42)+(JzzJxx)pr+J0pΩ]r˙=Jzz1[CM(ω12+ω22ω32+ω42)+(JxxJyy)pq]
其中 Ω = ω 1 − ω 2 + ω 3 − ω 4 \Omega = \omega_1-\omega_2+\omega_3-\omega_4 Ω=ω1ω2+ω3ω4

还没完,这里的角速度是机体坐标系下的,我们还需要获得无人机相对于地面系的旋转角速度。按照位置动力学里面旋转矩阵的建立顺序,计算一下从惯性系到机体系的旋转角速度的变换矩阵。

  1. 将地面系的Z轴的旋转速度通过 R b 2 b ( ϕ ) R_{b2}^b(\phi) Rb2b(ϕ) R b 1 b 2 ( θ ) R_{b1}^{b2}(\theta) Rb1b2(θ)变换到机体系下
    v 1 = R b 2 b ( ϕ ) ⋅ R b 1 b 2 ( θ ) [ 0 0 ψ ˙ ] \boldsymbol{v_1} = R_{b2}^{b}\left(\phi\right) \cdot R_{b1}^{b2}\left(\theta\right) \left[\begin{matrix} 0\\0\\ \dot{\psi} \end{matrix}\right] v1=Rb2b(ϕ)Rb1b2(θ) 00ψ˙
  2. 再将地面系的Y轴的旋转速度通过 R b 2 b ( ϕ ) R_{b2}^b(\phi) Rb2b(ϕ)变换到机体系下
    v 2 = R b 2 b ( ϕ ) [ 0 θ ˙ 0 ] \boldsymbol{v_2} = R_{b2}^{b}\left(\phi\right)\left[\begin{matrix} 0\\\dot{\theta}\\ 0 \end{matrix}\right] v2=Rb2b(ϕ) 0θ˙0
  3. 此时地面系的X轴的旋转角速度和机体系相等了
    v 3 = [ φ ˙ 0 0 ] \boldsymbol{v_3} = \left[\begin{matrix} \dot{\varphi}\\0\\ 0 \end{matrix}\right] v3= φ˙00
    进而有
    [ p q r ] = v 1 + v 2 + v 3 = [ φ ˙ 0 0 ] + R b 2 b ( φ ) [ 0 θ ˙ 0 ] + R b 2 b ( φ ) ⋅ R b 1 b 2 ( θ ) [ 0 0 ψ ˙ ] = [ 1 0 − sin ⁡ θ 0 cos ⁡ φ sin ⁡ φ cos ⁡ θ 0 − sin ⁡ φ cos ⁡ φ cos ⁡ θ ] [ φ ˙ θ ˙ ψ ˙ ] \begin{align} \begin{aligned} \left[\begin{matrix} p\\q\\r \end{matrix}\right] &= \boldsymbol{v_1} + \boldsymbol{v_2} + \boldsymbol{v_3}\\ &=\left[\begin{matrix} \dot{\varphi}\\0\\ 0 \end{matrix}\right]+R_{b2}^{b}\left(\varphi\right)\left[\begin{matrix} 0\\\dot{\theta}\\ 0 \end{matrix}\right]+R_{b2}^{b}\left(\varphi\right) \cdot R_{b1}^{b2}\left(\theta\right) \left[\begin{matrix} 0\\0\\ \dot{\psi} \end{matrix}\right]\\ &=\left[\begin{matrix} 1 & 0 & -\sin{\theta}\\ 0 & \cos{\varphi} & \sin{\varphi}\cos{\theta}\\ 0 & -\sin{\varphi} & \cos{\varphi}\cos{\theta} \end{matrix}\right]\left[\begin{matrix} \dot{\varphi}\\\dot{\theta}\\\dot{\psi} \end{matrix}\right] \end{aligned} \end{align} pqr =v1+v2+v3= φ˙00 +Rb2b(φ) 0θ˙0 +Rb2b(φ)Rb1b2(θ) 00ψ˙ = 1000cosφsinφsinθsinφcosθcosφcosθ φ˙θ˙ψ˙
    整理,有
    [ φ ˙ θ ˙ ψ ˙ ] = [ 1 tan ⁡ θ sin ⁡ φ tan ⁡ θ cos ⁡ φ 0 cos ⁡ φ − sin ⁡ φ 0 sin ⁡ φ / cos ⁡ θ cos ⁡ φ / cos ⁡ θ ] [ p q r ] \begin{align} \begin{aligned} \left[\begin{matrix} \dot{\varphi}\\\dot{\theta}\\\dot{\psi} \end{matrix}\right] = \left[\begin{matrix} 1 & \tan{\theta}\sin{\varphi} & \tan{\theta}\cos{\varphi} \\ 0 & \cos{\varphi} & -\sin{\varphi}\\ 0 & \sin{\varphi}/\cos{\theta} & \cos{\varphi}/\cos{\theta} \end{matrix}\right]\left[\begin{matrix} p\\q\\r \end{matrix}\right] \end{aligned} \end{align} φ˙θ˙ψ˙ = 100tanθsinφcosφsinφ/cosθtanθcosφsinφcosφ/cosθ pqr
    至此,无人机旋转动力学模型建立完成。

综合模型

综合式 ( 7 ) (7) (7) ( 11 ) (11) (11) ( 13 ) (13) (13),可以得到无人机整理的位置-姿态动力学模型为:
{ [ x ˙ y ˙ z ˙ ] = [ 1 0 0 0 1 0 0 0 1 ] [ v x v y v z ] [ v ˙ x v ˙ y v ˙ z ] = f m [ c ( ψ ) s ( θ ) c ( φ ) + s ( ψ ) s ( φ ) s ( ψ ) s ( θ ) c ( φ ) − c ( ψ ) s ( φ ) c ( φ ) c ( θ ) ] − [ 0 0 g ] [ p ˙ q ˙ r ˙ ] = J − 1 { [ τ x τ y τ z ] + ( [ J x x 0 0 0 J y y 0 0 0 J z z ] ⋅ [ p q r ] ) × [ p q r ] + [ − J 0 q Ω J 0 p Ω 0 ] } [ φ ˙ θ ˙ ψ ˙ ] = [ 1 tan ⁡ θ sin ⁡ φ tan ⁡ θ cos ⁡ φ 0 cos ⁡ φ − sin ⁡ φ 0 sin ⁡ φ / cos ⁡ θ cos ⁡ φ / cos ⁡ θ ] [ p q r ] \begin{align} \left\{ \begin{aligned} & \left[\begin{matrix}\dot{x}\\\dot{y}\\\dot{z}\end{matrix}\right] = \left[\begin{matrix} 1&0&0\\0&1&0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}v_x\\v_y\\v_z\end{matrix}\right]\\ & \left[\begin{matrix}\dot{v}_x\\\dot{v}_y\\\dot{v}_z\end{matrix}\right] = \frac{f}{m} \left[\begin{matrix} c(\psi)s(\theta)c(\varphi)+s(\psi)s(\varphi)\\ s(\psi)s(\theta)c(\varphi) - c(\psi)s(\varphi)\\ c(\varphi)c(\theta) \end{matrix}\right]-\left[\begin{matrix}0\\0\\g\end{matrix}\right]\\ & \left[\begin{matrix}\dot{p}\\\dot{q}\\\dot{r}\end{matrix}\right]= J^{-1} \left\{ \left[\begin{matrix}\tau_x\\ \tau_y\\ \tau_z\end{matrix}\right]+ \left(\left[\begin{matrix}J_{xx} & 0&0\\0&J_{yy}&0\\0&0&J_{zz}\end{matrix}\right]\cdot \left[\begin{matrix}p\\q\\r\end{matrix}\right]\right)\times \left[\begin{matrix}p\\q\\r\end{matrix}\right]+ \left[\begin{matrix}-J_0q\Omega\\J_0p\Omega\\0\end{matrix}\right] \right\}\\ &\left[\begin{matrix}\dot{\varphi}\\\dot{\theta}\\\dot{\psi}\end{matrix}\right]= \left[\begin{matrix} 1 & \tan{\theta}\sin{\varphi} & \tan{\theta}\cos{\varphi} \\ 0 & \cos{\varphi} & -\sin{\varphi}\\ 0 & \sin{\varphi}/\cos{\theta} & \cos{\varphi}/\cos{\theta} \end{matrix}\right]\left[\begin{matrix} p\\q\\r \end{matrix}\right] \end{aligned} \right. \end{align} x˙y˙z˙ = 100010001 vxvyvz v˙xv˙yv˙z =mf c(ψ)s(θ)c(φ)+s(ψ)s(φ)s(ψ)s(θ)c(φ)c(ψ)s(φ)c(φ)c(θ) 00g p˙q˙r˙ =J1 τxτyτz + Jxx000Jyy000Jzz pqr × pqr + J0qΩJ0pΩ0 φ˙θ˙ψ˙ = 100tanθsinφcosφsinφ/cosθtanθcosφsinφcosφ/cosθ pqr
其中
{ J = [ J x x 0 0 0 J y y 0 0 0 J z z ] Ω = ω 1 − ω 2 + ω 3 − ω 4 [ f τ x τ y τ z ] = [ C T C T C T C T C T d 2 − C T d 2 − C T d 2 C T d 2 − C T d 2 − C T d 2 C T d 2 C T d 2 − C M C M − C M C M ] [ ω 1 2 ω 2 2 ω 3 2 ω 4 2 ] \begin{align} \left\{ \begin{aligned} & J_=\left[\begin{matrix} J_{xx} & 0 & 0 \\ 0 & J_{yy} &0 \\ 0 & 0 & J_{zz} \end{matrix}\right]\\ & \Omega = \omega_1 - \omega_2 + \omega_3 -\omega_4\\ &\left[\begin{matrix} f \\ \tau_x\\\tau_y\\\tau_z \end{matrix}\right]=\left[\begin{matrix} C_T&C_T&C_T&C_T\\ \frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} &\frac{C_Td}{\sqrt{2}}\\ -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}}\\ -C_M &C_M&-C_M&C_M \end{matrix}\right]\left[\begin{matrix} \omega_1^2\\\omega_2^2\\\omega_3^2\\\omega_4^2 \end{matrix}\right] \end{aligned} \right. \end{align} J= Jxx000Jyy000Jzz Ω=ω1ω2+ω3ω4 fτxτyτz = CT2 CTd2 CTdCMCT2 CTd2 CTdCMCT2 CTd2 CTdCMCT2 CTd2 CTdCM ω12ω22ω32ω42

动力分配

( 15 ) (15) (15)中最后一个表达式就是动力分配矩阵,实际设计控制器时一般都不直接设计无人机四个电机的转速,而是先设计一个虚拟的控制量:无人机的升力 f f f,和无人机三个方向的转矩 τ x \tau_x τx τ y \tau_y τy τ z \tau_z τz。然后通过动力分配矩阵,将 [ f τ x τ y τ z ] \left[\begin{matrix} f \\ \tau_x\\\tau_y\\\tau_z \end{matrix}\right] fτxτyτz 反向映射回 [ ω 1 ω 2 ω 3 ω 4 ] \left[\begin{matrix} \omega_1\\\omega_2\\\omega_3\\\omega_4 \end{matrix}\right] ω1ω2ω3ω4 。实际使用时,可以先验算一下动力分配矩阵是不是满秩 (非奇异)。

无人机串级PID分为外环和内环两个,外环PID给出的实际上是无人机的参考加速度指令,内环PID给出的是无人机的合外力矩指令。定义外环的位置控制PID输出为
u x = P I D x . o u t ( x , x d , x ˙ , x ˙ d ) u y = P I D y . o u t ( y , y d , y ˙ , y ˙ d ) u z = P I D z . o u t ( z , z d , z ˙ , z ˙ d ) \begin{align} \begin{aligned} &u_x = PID_x.out(x, x_d, \dot{x}, \dot{x}_d)\\ &u_y = PID_y.out(y, y_d, \dot{y}, \dot{y}_d)\\ &u_z = PID_z.out(z, z_d, \dot{z}, \dot{z}_d) \end{aligned} \end{align} ux=PIDx.out(x,xd,x˙,x˙d)uy=PIDy.out(y,yd,y˙,y˙d)uz=PIDz.out(z,zd,z˙,z˙d)
根据式 ( 7 ) (7) (7)的后三个方程,有
[ u x u y u z ] = f m [ c ( ψ ) s ( θ ) c ( ϕ ) + s ( ψ ) s ( ϕ ) s ( ψ ) s ( θ ) c ( ϕ ) − c ( ψ ) s ( ϕ ) c ( ϕ ) c ( θ ) − m g ] \begin{align} \begin{aligned} \left[\begin{matrix} u_x\\u_y\\u_z \end{matrix}\right]=\frac{f}{m} \left[\begin{matrix} c(\psi)s(\theta)c(\phi)+s(\psi)s(\phi)\\ s(\psi)s(\theta)c(\phi) - c(\psi)s(\phi)\\ c(\phi)c(\theta)-mg \end{matrix}\right] \end{aligned} \end{align} uxuyuz =mf c(ψ)s(θ)c(ϕ)+s(ψ)s(ϕ)s(ψ)s(θ)c(ϕ)c(ψ)s(ϕ)c(ϕ)c(θ)mg
求出
f = m u x 2 + u y 2 + ( u z + g ) 2 f=m\sqrt{u_x^2+u_y^2+\left(u_z+g\right)^2} f=mux2+uy2+(uz+g)2
结合参考偏航角 ψ d \psi_d ψd (人为设定),同时求出参考滚转角,参考俯仰角为
{ ϕ d = arcsin ⁡ [ ( u x sin ⁡ ψ d − u y cos ⁡ ψ d ) m f ] θ d = arcsin ⁡ [ u x m − U 1 sin ⁡ ψ d sin ⁡ ϕ d f cos ⁡ ψ d cos ⁡ ϕ d ] \begin{align} \left\{ \begin{aligned} & \phi_d = \arcsin{\left[\left(u_x\sin{\psi_d}-u_y\cos{\psi_d}\right)\frac{m}{f}\right]}\\ & \theta_d = \arcsin{\left[\frac{u_xm-U_1\sin{\psi_d}\sin{\phi_d}}{f\cos{\psi_d}\cos{\phi_d}}\right]} \end{aligned} \right. \end{align} ϕd=arcsin[(uxsinψduycosψd)fm]θd=arcsin[fcosψdcosϕduxmU1sinψdsinϕd]
接下来是姿态控制,由于姿态回路不会被位置影响,所以姿态环的PID控制输出直接可以对应无人机三个方向的合外力矩
{ τ x = P I D r o l l . o u t ( ϕ , ϕ d , ϕ ˙ , ϕ ˙ d ) τ y = P I D p i t c h . o u t ( θ , θ , θ ˙ , θ ˙ d ) τ z = P I D y a w . o u t ( ψ , ψ d , ψ ˙ , ψ ˙ d ) \begin{align} \left\{ \begin{aligned} & \tau_x = PID_{roll}.out(\phi,\phi_d,\dot{\phi},\dot{\phi}_d) \\ & \tau_y = PID_{pitch}.out(\theta,\theta,\dot{\theta},\dot{\theta}_d) \\ & \tau_z = PID_{yaw}.out(\psi,\psi_d,\dot{\psi},\dot{\psi}_d) \end{aligned} \right. \end{align} τx=PIDroll.out(ϕ,ϕd,ϕ˙,ϕ˙d)τy=PIDpitch.out(θ,θ,θ˙,θ˙d)τz=PIDyaw.out(ψ,ψd,ψ˙,ψ˙d)
根据式 ( 15 ) (15) (15)最后一个公式,将动力分配矩阵记为
P = [ C T C T C T C T C T d 2 − C T d 2 − C T d 2 C T d 2 − C T d 2 − C T d 2 C T d 2 C T d 2 − C M C M − C M C M ] P=\left[\begin{matrix} C_T&C_T&C_T&C_T\\ \frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} &\frac{C_Td}{\sqrt{2}}\\ -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}}\\ -C_M &C_M&-C_M&C_M \end{matrix}\right] P= CT2 CTd2 CTdCMCT2 CTd2 CTdCMCT2 CTd2 CTdCMCT2 CTd2 CTdCM
则无人机四个电机转速的平方为
[ ω 1 2 ω 2 2 ω 3 2 ω 4 2 ] = P − 1 [ f τ x τ y τ z ] \begin{align} \begin{aligned} \left[\begin{matrix} \omega_1^2\\\omega_2^2\\\omega_3^2\\\omega_4^2 \end{matrix}\right]=P^{-1}\left[\begin{matrix} f\\\tau_x\\\tau_y\\\tau_z \end{matrix}\right] \end{aligned} \end{align} ω12ω22ω32ω42 =P1 fτxτyτz
至此,可以得到控制指令。上面的PID控制器仅仅是一个示例,实际上PID的输入参数有哪些,或者是否要使用PID控制器,都是根据设计者自己的需求去设计的,甚至可以在位置和参考加速度指令之间再加一个参考速度控制回路,在加速度与参考合外力矩之间加一个参考角速度控制回路,等等。

代码

文末附上仿真代码 (PID)没有经过精心设计,参数也没怎么调,不过方便阅读和修改。
Github链接
使用时,在\environment\env\下面的“PIDControl”和“UAV”文件夹中。文章来源地址https://www.toymoban.com/news/detail-428263.html

到了这里,关于四旋翼无人机建模 (附github源代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无人机基础知识:多旋翼无人机各模式控制框图

    无人机(Unmanned Aerial Vehicle),指的是一种由动力驱动的、无线遥控或自主飞行、机上无人驾驶并可重复使用的飞行器,飞机通过机载的计算机系统自动对飞行的平衡进行有效的控制,并通过预先设定或飞机自动生成的复杂航线进行飞行,并在飞行过程中自动执行相关任务和

    2023年04月09日
    浏览(113)
  • 旋翼无人机常用仿真工具

    简单的质点(也可以加上动力学姿态),用urdf模型在rviz中显示无人机和飞行轨迹、地图等。配合ROS代码使用,轻量化适合多机。典型的比如浙大ego-planner的仿真: https://github.com/ZJU-FAST-Lab/ego-planner-swarm.git https://github.com/ethz-asl/rotors_simulator 利用gazebo仿真,提供gazebo中的简单四

    2024年02月07日
    浏览(45)
  • 多旋翼无人机调试问题分析

    一、电机和螺旋桨检查 在多旋翼无人机的调试过程中,首先需要检查电机和螺旋桨的状态。电机应转动灵活,无卡滞现象,且无明显磨损。螺旋桨应安装牢固,无松动现象,且桨叶完好无损。若发现问题,应及时更换或维修。 二、电池和充电器检查 电池是无人机飞行的能量

    2024年01月24日
    浏览(57)
  • 【无人机】基于 ode45实现四旋翼无人机姿态仿真附Matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进, 代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信    

    2024年02月03日
    浏览(87)
  • 四旋翼无人机入门基础知识

    电池 聚合物锂电池单体电芯的 额定电压 都为3.7V 电池的 保存电压 :单个电芯3.8V 电池的 满电电压 :单个电芯4.2V 串联:容量不变,电压相加,并联:电压不变,容量相加 S:串联,P:并联。 比如:6s2p的电池,意思是将6片电芯串联,再将两组串联的电池并联起来。 1s的额定

    2024年02月02日
    浏览(55)
  • 基于ESP8266的四旋翼无人机代码分享,该无人机可以爬墙哦

    代码链接在:https://github.com/AnishDey27/Wall-Climbing-Drone/blob/main/Node%20MCU%20Codes/3_Drone_FInal.ino 源码贴出来吧: #includeWire.h #include ESP8266WiFi.h #include WiFiUdp.h WiFiUDP UDP; char packet[4]; //IPAddress local_IP(192, 168, 203, 158); //IPAddress gateway(192, 168, 1, 158); //IPAddress subnet(255, 255, 0, 0); //__________________

    2024年02月07日
    浏览(53)
  • 多旋翼无人机振动分析与减振方法

    振动机制包括: 激励(振动源) 系统 响应 无人机振动机制: 激励 —— 动力系统(旋翼+电机) 系统 —— 机架 响应 —— 传感器(惯导) 无人机振动来源: 动不平衡,振动频率等于旋转频率 单个旋翼产生的周期性气动力(升力波),引起的振动二次谐波 多个旋翼流场相

    2024年02月10日
    浏览(49)
  • 提高多旋翼无人机的悬停控制精度

    要提高多旋翼无人机的悬停控制精度,可以从以下几个方面进行优化: 优化传感器配置:选用高精度的传感器,如激光雷达、红外传感器等,可以提供更准确的姿态和位置信息。同时,对传感器进行定期标定和校准,确保其准确性。 改进控制算法:采用更为先进的控制算法

    2024年02月21日
    浏览(42)
  • 多旋翼无人机的PID调试思路

    在多旋翼无人机的控制系统中,PID控制器是一种广泛使用的调节器,用于调节无人机的各种动态特性。以下是进行多旋翼无人机的PID调试的基本思路: 一、确定系统参数 首先,你需要明确无人机的系统参数,如电机常数、旋翼半径、重力加速度等。这些参数是进行PID调节的

    2024年02月22日
    浏览(45)
  • 【rotors】多旋翼无人机仿真(二)——设置飞行轨迹

    【rotors】多旋翼无人机仿真(一)——搭建rotors仿真环境 【rotors】多旋翼无人机仿真(二)——设置飞行轨迹 【rotors】多旋翼无人机仿真(三)——SE3控制 【rotors】多旋翼无人机仿真(四)——参数补偿和PID控制 【rotors】多旋翼无人机仿真(五)——多无人机仿真 本贴内

    2024年02月02日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包