四旋翼无人机建模与实现(二)

本文是对GitHub上的一个开源的四旋翼无人机建模与编程实现的学习笔记,因为原作者的文档使用英文写的,花了很长的时间才看懂,因此,我觉得用自己的语言将这个开源项目分享出来是有意义的,爱因斯坦曾说过:“如果你不能简单地解释某一概念,说明你没有很好地掌握它”。因此便有了写这篇文档的想法。
原文链接: https://github.com/SKYnSPACE/AE450
本文的贡献在于将原作者文档中的公式做了更为详细的推导,并以更为通俗的语言来描述整个建模过程。


7、旋转运动方程

后六个状态量的变化率可以从旋转运动方程中获得,状态变化率表示如下:
[ ϕ ˙ , ψ ˙ , θ ˙ , p ˙ , q ˙ , r ˙ ] \boldsymbol{[\dot{\phi},\dot{\psi},\dot{\theta},\dot{p},\dot{q},\dot{r}]} [ϕ˙​,ψ˙​,θ˙,p˙​,q˙​,r˙]
速度方程:
R ˙ = R ⋅ s k ( ω ⃗ ) \boldsymbol{\dot{R}=R \cdot sk(\vec{\omega})} R˙=R⋅sk(ω )
我不是太理解原作者写的这些标识意义,我觉得这样写仿佛更容易理解:
R P Y ˙ = T r ⋅ ω ⃗ \boldsymbol{\dot{RPY}=Tr \cdot \vec{\omega}} RPY˙=Tr⋅ω
其中等号左边是欧拉角的变化率,等号右边时变换矩阵和角速度的乘积,这个公式表达了姿态变化率和角速度的关系。将上述方程展开如下:
[ ϕ ˙ θ ˙ ψ ˙ ] = [ 1 t a n θ s i n ϕ t a n θ c o s ϕ 0 c o s ϕ − s i n ϕ 0 s i n ϕ / c o s θ c o s ϕ / c o s θ ] [ p q r ] \boldsymbol{ \begin{bmatrix} \dot{\phi}\\ \dot{\theta} \\ \dot{\psi} \end{bmatrix}= \begin{bmatrix} 1& tan\theta sin\phi & tan\theta cos\phi\\ 0 & cos\phi & -sin\phi\\ 0 & sin\phi / cos\theta & cos\phi / cos\theta \end{bmatrix} \begin{bmatrix} p\\q\\r \end{bmatrix} } ⎣⎡​ϕ˙​θ˙ψ˙​​⎦⎤​=⎣⎡​100​tanθsinϕcosϕsinϕ/cosθ​tanθcosϕ−sinϕcosϕ/cosθ​⎦⎤​⎣⎡​pqr​⎦⎤​
姿态变化率和角速度之间满足线性变换关系,该线性变换关系是关于翻滚和俯仰角的线性变换关系,和偏航角无关。
加速度方程(牛顿第二定律):
I ω ⃗ ˙ = − ω ⃗ × I ω ⃗ + M \boldsymbol{I \dot{\vec{\omega}}=-\vec{\omega} \times I\vec{\omega}+M} Iω ˙=−ω ×Iω +M
将该公式展开后得到:
p ˙ = I y y − I z z I x x ⋅ q r + 1 I x x ⋅ M 1 \boldsymbol{\dot{p}=\frac{I_{yy}-I_{zz}}{I_{xx}} \cdot qr+\frac{1}{I_{xx}}\cdot M_1} p˙​=Ixx​Iyy​−Izz​​⋅qr+Ixx​1​⋅M1​
q ˙ = I z z − I x x I y y ⋅ r p + 1 I y y ⋅ M 2 \boldsymbol{\dot{q}=\frac{I_{zz}-I_{xx}}{I_{yy}} \cdot rp+\frac{1}{I_{yy}}\cdot M_2} q˙​=Iyy​Izz​−Ixx​​⋅rp+Iyy​1​⋅M2​
r ˙ = I z z − I y y I z z ⋅ p q + 1 I z z ⋅ M 3 \boldsymbol{\dot{r}=\frac{I_{zz}-I_{yy}}{I_{zz}} \cdot pq+\frac{1}{I_{zz}}\cdot M_3} r˙=Izz​Izz​−Iyy​​⋅pq+Izz​1​⋅M3​

此时,已经将十二个状态变量的变化率推导完毕。接下来考虑悬停位置的姿态控制。

8、四旋翼无人机整体模型

非线性的四旋翼状态空间模型可以按照如下表示:
x ⃗ ˙ = f ( x ⃗ , u ⃗ ) \boldsymbol{\dot{\vec{x}}=f(\vec{x},\vec{u})} x ˙=f(x ,u )
其中,
x ⃗ = [ X Y Z X ˙ Y ˙ Z ˙ ϕ θ ψ p q r ] T u ⃗ = [ u 1 , u 2 , u 3 , u 4 ] T = [ T ∑ , M 1 , M 2 , M 3 ] T \boldsymbol{\vec{x}=\begin{bmatrix} X&Y& Z& \dot{X}& \dot{Y}& \dot{Z}& \phi & \theta & \psi & p& q& r \end{bmatrix}^T} \\ \boldsymbol{\vec{u}=[u_1 ,u_2 ,u_3 ,u_4]^T=[T_{\sum},M_1,M_2,M_3]^T} x =[X​Y​Z​X˙​Y˙​Z˙​ϕ​θ​ψ​p​q​r​]Tu =[u1​,u2​,u3​,u4​]T=[T∑​,M1​,M2​,M3​]T

都目前为止,完成了整个被控对象的模型建立,整体模型如下:
X ˙ = X ˙ Y ˙ = Y ˙ Z ˙ = Z ˙ X ¨ = − 1 m ( s i n ψ s i n ϕ + c o s ψ s i n θ c o s ϕ ) ⋅ T ∑ Y ¨ = − 1 m ( − c o s ψ s i n ϕ + s i n ψ s i n θ c o s ϕ ) ⋅ T ∑ Z ¨ = − 1 m c o s θ c o s ϕ ⋅ T ∑ ϕ ˙ = p + s i n ϕ t a n θ ⋅ q + c o s ϕ t a n θ ⋅ r ψ ˙ = s i n ϕ / c o s θ ⋅ q + c o s ϕ / c o s θ ⋅ r p ˙ = I y y − I z z I x x ⋅ q r + 1 I x x ⋅ M 1 q ˙ = I z z − I x x I y y ⋅ r p + 1 I y y ⋅ M 2 r ˙ = I z z − I y y I z z ⋅ p q + 1 I z z ⋅ M 3 \dot{X}=\dot{X}\\ \dot{Y}=\dot{Y}\\ \dot{Z}=\dot{Z}\\ \boldsymbol{\ddot{X}=-\frac{1}{m}(sin\psi sin\phi+cos\psi sin\theta cos\phi)\cdot T_{\sum}}\\ \boldsymbol{\ddot{Y}=-\frac{1}{m}(-cos\psi sin\phi+sin\psi sin\theta cos\phi)\cdot T_{\sum}}\\ \boldsymbol{\ddot{Z}=-\frac{1}{m}cos\theta cos\phi \cdot T_{\sum}}\\ \boldsymbol{\dot{\phi}=p+sin\phi tan\theta \cdot q+cos\phi tan\theta \cdot r}\\ \boldsymbol{\dot{\psi}=sin\phi /cos\theta \cdot q +cos\phi/cos\theta \cdot r}\\ \boldsymbol{\dot{p}=\frac{I_{yy}-I_{zz}}{I_{xx}} \cdot qr+\frac{1}{I_{xx}}\cdot M_1}\\ \boldsymbol{\dot{q}=\frac{I_{zz}-I_{xx}}{I_{yy}} \cdot rp+\frac{1}{I_{yy}}\cdot M_2}\\ \boldsymbol{\dot{r}=\frac{I_{zz}-I_{yy}}{I_{zz}} \cdot pq+\frac{1}{I_{zz}}\cdot M_3} X˙=X˙Y˙=Y˙Z˙=Z˙X¨=−m1​(sinψsinϕ+cosψsinθcosϕ)⋅T∑​Y¨=−m1​(−cosψsinϕ+sinψsinθcosϕ)⋅T∑​Z¨=−m1​cosθcosϕ⋅T∑​ϕ˙​=p+sinϕtanθ⋅q+cosϕtanθ⋅rψ˙​=sinϕ/cosθ⋅q+cosϕ/cosθ⋅rp˙​=Ixx​Iyy​−Izz​​⋅qr+Ixx​1​⋅M1​q˙​=Iyy​Izz​−Ixx​​⋅rp+Iyy​1​⋅M2​r˙=Izz​Izz​−Iyy​​⋅pq+Izz​1​⋅M3​

9、在悬停位置对无人机模型进行线性化

在悬停位置处,有以下特点:悬停位置的偏航角不为零,其余状态量都为零,输入量只有重力,表示如下:
x ⃗ e = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , ψ e , 0 , 0 , 0 ] T u ⃗ e = [ m g , 0 , 0 , 0 ] T \boldsymbol{\vec{x}_e=[0,0,0,0,0,0,0,0,\psi_e,0,0,0]^T \qquad \vec{u}_e=[mg,0,0,0]^T} x e​=[0,0,0,0,0,0,0,0,ψe​,0,0,0]Tu e​=[mg,0,0,0]T
线性化后的方程如下:
x ′ ⃗ ˙ = A x ′ ⃗ + B u ′ ⃗ \boldsymbol{\dot{\vec{x^{'}}}=A\vec{x^{'}}+B\vec{u^{'}}} x′ ˙=Ax′ +Bu′
其中,
A = ∂ f ( x ⃗ , u ⃗ ) ∂ x ⃗ x ⃗ = x ⃗ e u ⃗ = u ⃗ e \boldsymbol{ A=\frac{\partial f(\vec{x},\vec{u})}{\partial \vec{x}}_{ \begin{matrix} \vec{x}=\vec{x}_e\\\vec{u}=\vec{u}_e \end{matrix}}} A=∂x ∂f(x ,u )​x =x e​u =u e​​​

B = ∂ f ( x ⃗ , u ⃗ ) ∂ u ⃗ x ⃗ = x ⃗ e u ⃗ = u ⃗ e \boldsymbol{ B=\frac{\partial f(\vec{x},\vec{u})}{\partial \vec{u}}_{ \begin{matrix} \vec{x}=\vec{x}_e\\\vec{u}=\vec{u}_e \end{matrix}}} B=∂u ∂f(x ,u )​x =x e​u =u e​​​
x ′ ⃗ = x ⃗ − x ⃗ e 状 态 偏 差 u ′ ⃗ = u ⃗ − u ⃗ e 输 入 偏 差 \boldsymbol{\vec{x^{'}}=\vec{x}-\vec{x}_e} \qquad 状态偏差\\ \boldsymbol{\vec{u^{'}}=\vec{u}-\vec{u}_e} \qquad 输入偏差 x′ =x −x e​状态偏差u′ =u −u e​输入偏差
使用泰勒展开式,在悬停位置进行线性化:
x ⃗ ˙ = f ( x ⃗ e , u ⃗ e ) + ∂ f ( x ⃗ , u ⃗ ) ∂ x ⃗ x ⃗ = x ⃗ e u ⃗ = u ⃗ e ( x ⃗ − x ⃗ e ) + ∂ f ( x ⃗ , u ⃗ ) ∂ u ⃗ x ⃗ = x ⃗ e u ⃗ = u ⃗ e ( x ⃗ − x ⃗ e ) + o ( x ⃗ − x ⃗ e ⃗ ) = x ⃗ ˙ e + ∂ f ( x ⃗ , u ⃗ ) ∂ x ⃗ x ⃗ = x ⃗ e u ⃗ = u ⃗ e ( x ⃗ − x ⃗ e ) + ∂ f ( x ⃗ , u ⃗ ) ∂ u ⃗ x ⃗ = x ⃗ e u ⃗ = u ⃗ e ( x ⃗ − x ⃗ e ) + o ( x ⃗ − x ⃗ e ⃗ ) \boldsymbol{\dot{\vec{x}}=f(\vec{x}_e,\vec{u}_e)+\frac{\partial f(\vec{x},\vec{u})}{\partial \vec{x}}_{ \begin{matrix} \vec{x}=\vec{x}_e\\\vec{u}=\vec{u}_e \end{matrix}}(\vec{x}-\vec{x}_e)+ \frac{\partial f(\vec{x},\vec{u})}{\partial \vec{u}}_{ \begin{matrix} \vec{x}=\vec{x}_e\\\vec{u}=\vec{u}_e \end{matrix}}(\vec{x}-\vec{x}_e)+o(\vec{\vec{x}-\vec{x}_e}) }\\ \boldsymbol{=\dot{\vec{x}}_e+\frac{\partial f(\vec{x},\vec{u})}{\partial \vec{x}}_{ \begin{matrix} \vec{x}=\vec{x}_e\\\vec{u}=\vec{u}_e \end{matrix}}(\vec{x}-\vec{x}_e)+ \frac{\partial f(\vec{x},\vec{u})}{\partial \vec{u}}_{ \begin{matrix} \vec{x}=\vec{x}_e\\\vec{u}=\vec{u}_e \end{matrix}}(\vec{x}-\vec{x}_e)+o(\vec{\vec{x}-\vec{x}_e}) } x ˙=f(x e​,u e​)+∂x ∂f(x ,u )​x =x e​u =u e​​​(x −x e​)+∂u ∂f(x ,u )​x =x e​u =u e​​​(x −x e​)+o(x −x e​ ​)=x ˙e​+∂x ∂f(x ,u )​x =x e​u =u e​​​(x −x e​)+∂u ∂f(x ,u )​x =x e​u =u e​​​(x −x e​)+o(x −x e​ ​)
将上述泰勒展开式忽略高阶无穷小量之后,得到如下状态空间模型:
x ′ ⃗ ˙ = A x ′ ⃗ + B u ′ ⃗ \boldsymbol{\dot{\vec{x^{'}}}=A\vec{x^{'}}+B\vec{u^{'}}} x′ ˙=Ax′ +Bu′


笔者在用自己的语言表达的过程中,难免存在诸多理解错误或者笔误,如果各位朋友在阅读中发现,敬请在评论区批评指正,一起交流!

四旋翼无人机建模与实现(二)相关推荐

  1. 四旋翼无人机建模与实现(一)

    四旋翼无人机建模与实现(一) 本文是对GitHub上的一个开源的四旋翼无人机建模与编程实现的学习笔记,因为原作者的文档使用英文写的,花了很长的时间才看懂,因此,我觉得用自己的语言将这个开源项目分享出来 ...

  2. 四旋翼无人机建模与实现(三)

    四旋翼无人机建模与实现(三) 本文是对GitHub上的一个开源的四旋翼无人机建模与编程实现的学习笔记,因为原作者的文档使用英文写的,花了很长的时间才看懂,因此,我觉得用自己的语言将这个开源项目分享出来 ...

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

    前言 四旋翼无人机的应用十分广泛,而且四旋翼无人机是非常理想的控制模型.因为四旋翼是四输入(四个螺旋桨的升力) 六输出 (三个位置,三个姿态角)的欠驱动系统,而且四旋翼的三个姿态角之间是互相耦合的,并 ...

  4. 四旋翼无人机Matlab建模

    本文主要分享一下四旋翼无人机的建模过程,然后在Matlab的simulink模块搭建起四旋翼无人机的模型,本篇文章主要参考了康日晖的<四旋翼无人机建模>与南京邮电大学周帆同学的硕士毕业论文 ...

  5. 四旋翼无人机硬件,飞控,基站,NX

    四旋翼无人机硬件 一 总览 四旋翼无人机的硬件组成:无刷电机(4个):电子调速器(简称电调,4个,常见有好盈.中特威.新西达等品牌):螺旋桨(4个,需要2个正浆,2个反浆):飞控:电池(11.1v航模 ...

  6. 基于STM32的四旋翼无人机项目(二):MPU6050姿态解算(含上位机3D姿态显示教学)

    前言:本文为手把手教学飞控核心知识点之一的姿态解算--MPU6050 姿态解算(飞控专栏第2篇).项目中飞行器使用 MPU6050 传感器对飞行器的姿态进行解算(四元数方法),搭配设计的卡尔曼滤波器与 ...

  7. Robotics: Aerial Robotics(空中机器人)笔记(二):如何设计一架四旋翼无人机

    在这一章里,我们将探索四旋翼如何飞行的. 这章将会讲一些基本的力学原理以及如何设计无人机. 上一章链接: Robotics: Aerial Robotics(空中机器人)笔记(一): Introduc ...

  8. 【控制】四旋翼无人机姿态角分析

    搞起来,从建模到控制,再到仿真 Link: [控制]<多无人机协同控制技术>周伟老师-第3章-面向协同控制的无人机单机控制 文章目录 1. 坐标系 2. 角度介绍 航向角 yaw ange ...

  9. Backstepping反步法控制四旋翼无人机(一)

    目录 四旋翼基本参数 基本假设 转换矩阵 基本方程 线性化 综合 四旋翼基本参数 四旋翼作为一种可以在空间中自由飞行的无人飞行器,具有6个自由度和4个螺旋桨.其中,4个螺旋桨提供动力,作为四旋翼的动力 ...

最新文章

  1. 【数据库】sqlite3常用命令及SQL语句
  2. 疫情严重!国内互联网公司上班时间汇总!
  3. LUA __call
  4. PagedList.Mvc只有一行时不显示分页
  5. 【CyberSecurityLearning 19】NAT与动态路由协议RIP
  6. PYTHON自动化Day3-列表/元组/切片/字典/字符串处理方法
  7. Android开发面试题之activity生命周期变化
  8. linux下C语言中的flock函数用法
  9. linux安装自带mysql吗_Linux下安装mysql
  10. 输入三角形的三c语言程序,输入三角形的三边 a,b,c,计算三角形的面积的公式是 C++...
  11. Android Studio内置JDK源码关联和断点错乱问题解决
  12. 【深度学习】训练集、测试集和验证集
  13. OpenGL日常-GLAD
  14. Linux那些事儿之我是U盘(5)外面的世界很精彩
  15. Ubuntu下WIFI不稳定问题
  16. PDPS软件:机器人可达性测试功能介绍与使用方法
  17. python框架Django数据库类型
  18. 传动系统结构简图_输送带传动结构简图大全
  19. 通信中相干时间与相干带宽
  20. basler相机出现buffer不足的解决方案

热门文章

  1. jom qt linux,【求助】Qt Creater编译问题——jom.exe退出
  2. 《多移动机器人协同原理与技术》读书笔记(一、绪论)
  3. 国行Switch Joy-Con手柄-摇杆漂移的官方解决方法(送修)
  4. 一道肤浅、奇葩、却又常常让人阴沟里翻船的面试题
  5. ubuntu 列出当前主机上的声卡
  6. 客户案例|低代码上的西门子,乘风破浪的财务部
  7. 笔记本电脑外接显示器时,WPS office软件的文字显示不清晰,不管是文档本身还是软件界面的字
  8. echarts 图表的滚动条
  9. 开发中git提交代码注释规范
  10. 针式打印机打印WEB页面字体不清晰,解决方法