基于simulink的无人机姿态飞行控制仿真

2023-05-16

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        无人机是无人驾驶飞机的简称(Unmanned Aerial Vehicle),是利用无线电遥控设备和自备的程序控制装置的不载人飞机,包括无人直升机、固定翼机、多旋翼飞行器、无人飞艇、无人伞翼机。广义地看也包括临近空间飞行器(20-100 公里空域),如平流层飞艇、高空气球、太阳能无人机等。从某种角度来看,无人机可以在无人驾驶的条件下完成复杂空中飞行任务和各种负载任务,可以被看做是 “空中机器人”。
       飞控子系统是无人机完成起飞、空中飞行、执行任务和返场回收等整个飞行过程的核心系统,飞控对于无人机相当于驾驶员对于有人机的作用,我们认为是无人机最核心的技术之一。飞控一般包括传感器、机载计算机和伺服作动设备三大部分,实现的功能主要有无人机姿态稳定和控制、无人机任务设备管理和应急控制三大类。


       对于固定翼无人机,一般来说,在姿态平稳时,控制方向舵会改变飞机的航向,通常会造成一定角度的横滚,在稳定性好的飞机上,看起来就像汽车在地面转弯一般,可称其为测滑。方向舵是最常用做自动控制转弯的手段,方向舵转弯的缺点是转弯半径相对较大,较副翼转弯的机动性略差。 副翼的作用是进行飞机的横滚控制。固定翼飞机当产生横滚时,会向横滚方向进行转弯,同时会掉一定的高度。 升降舵的作用是进行飞机的俯仰控制,拉杆抬头,推杆低头。拉杆时飞机抬头爬升,动能朝势能的转换会使速度降低,因此在控制时要监视空速,避免因为过分拉杆而导致失速。 油门舵的作用是控制飞机发动机的转速,加大油门量会使飞机增加动力,加速或爬升,反之则减速或降低。

       了解了各舵的控制作用,我们开始讨论一下升降舵和油门的控制。固定翼飞机都有一个最低时速被称做失速速度,当低于这个速度的时候飞机将由于无法获得足够的升力而导致舵效失效,飞机失控。通过飞机的空速传感器我们可以实时获知飞机的当前空速,当空速降低时必须通过增加油门或推杆使飞机损失高度而换取空速的增加,当空速过高时减小油门或拉杆使飞机获得高度而换取空速的降低。因此固定翼飞机有两种不同的控制模式,根据实际情况的使用而供用户选择: 第一种控制方式是,根据设定好的目标空速,当实际空速高于目标空速时,控制升降舵拉杆,反之推杆;那空速的高低影响了高度的高低,于是采用油门来控制飞机的高度,当飞行高度高于目标高度时,减小油门,反之增加油门。由此我们可以来分析,当飞机飞行时,如果低于目标高度,飞控控制油门增加,导致空速增加,再导致飞控控制拉杆,于是飞机上升;当飞机高度高于目标高度,飞控控制油门减小,导致空速减小,于是飞控再控制推杆,使高度降低。这种控制方式的好处是,飞机始终以空速为第一因素来进行控制,因此保证了飞行的安全,特别是当发动机熄火等异常情况发生时,使飞机能继续保持安全,直到高度降低到地面。这种方式的缺点在于对高度的控制是间接控制,因此高度控制可能会有一定的滞后或者波动。 第二种控制方式是:设定好飞机平飞时的迎角,当飞行高度高于或低于目标高度时,在平飞迎角的基础上根据高度与目标高度的差设定一个经过PID控制器输出的限制幅度的爬升角,由飞机当前的俯仰角和爬升角的偏差来控制升降舵面,使飞机迅速达到这个爬升角,而尽快完成高度偏差的消除。但飞机的高度升高或降低后,必然造成空速的变化,因此采用油门来控制飞机的空速,即当空速低于目标空速后,在当前油门的基础上增加油门,当前空速高于目标空速后,在当前油门的基础上减小油门。这种控制方式的好处是能对高度的变化进行第一时间的反应,因此高度控制较好,缺点是当油门失效时,比如发动机熄火发生时,由于高度降低飞控将使飞机保持经过限幅的最大仰角,最终由于动力的缺乏导致失速。 因此,两种控制模式根据实际情况而选用。我们选用的是第二种控制模式,并增加了当空速低于一定速度的时候,认为异常发生,立刻转为第一种控制模式以保证飞机的安全。


         simulink是基于matlab的框图设计环境,可以用来对各种动态系统进行建模、分析和仿真,它的应用领域十分广泛,任何能用数学模型来描述的系统都可以在simulink中进行仿真分析,如:空气动力学、导航制导、通讯、电子、机械、热力学等诸多领域,这些系统从数学角度来描述多涉及连续、离散、非线性、时变、条件执行、多速率混合等用解析方法难以求解的系统,他们都可以通过simulink进行建模与仿真,从而指导系统的分析与设计。

simulink的特点
1.交互式建模:提供大量功能模块便于用户快速建立模型,建模仅需利用鼠标拖放功能块并将其连接起来。
2.交互式仿真:仿真结果可以动态显示,并可以在仿真过程中随时修改参数。
3.扩展与定制:提供了一个开放式的环境,允许用户扩充功能,可以将C、 fortran编写的算法集成到框图中。
4.专业的模型库:针对不同行业和领域提供了专业模型库

       Simulink具有适应面广、结构和流程清晰及仿真精细、贴近实际、效率高、灵活等优点,并基于以上优点Simulink已被广泛应用于控制理论和数字信号处理的复杂仿真和设计。同时有大量的第三方软件和硬件可应用于或被要求应用于Simulink。
       Simulink可以用连续采样时间、离散采样时间或两种混合的采样时间进行建模,它也支持多速率系统,也就是系统中的不同部分具有不同的采样速率。为了创建动态系统模型,Simulink提供了一个建立模型方块图的图形用户接口,这个创建过程只需单击和拖动鼠标操作就能完成,它提供了一种更快捷、直接明了的方式,而且用户可以立即看到系统的仿真结果。
       Simulink是用于动态系统和嵌入式系统的多领域仿真和基于模型的设计工具。对各种时变系统,包括通讯、控制、信号处理、视频处理和图像处理系统,Simulink提供了交互式图形化环境和可定制模块库来对其进行设计、仿真、执行和测试。.
       构架在Simulink基础之上的其他产品扩展了Simulink多领域建模功能,也提供了用于设计、执行、验证和确认任务的相应工具。Simulink与MATLAB紧密集成,可以直接访问MATLAB大量的工具来进行算法研发、仿真的分析和可视化、批处理脚本的创建、建模环境的定制以及信号参数和测试数据的定义。

​​​​​​​2.仿真效果预览

matlab2022a仿真结果如下:

3.MATLAB核心程序

function [sys,x0,str,ts] = Attitude7(t,x,u,flag,J)

switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u,J);
  case {2,4,9},
    sys=[];
  case 3,
    sys=mdlOutputs(t,x);
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end

function [sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates  = 6;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 6;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   

sys = simsizes(sizes);
% w0=[10 ;20 ;-30];
% theta0=[10 ;20 ;-30];
x0=[10 20 -30 10 20 -30]/180*pi;

str = [];

ts  = [0 0];
%---状态方程----姿态运动学和动力学方程-----
function sys=mdlDerivatives(t,x,u,J)
J1=J(1);J2=J(2);J3=J(3);
w1=x(1);w2=x(2);w3=x(3);
theta1=x(4);theta2=x(5);theta3=x(6);
%--------------------
dw1=(J2-J3)/J1*w3*w2+1/ J1*u(1);
dw2=(J3-J1)/J2*w1*w3+1/ J2*u(2);
dw3=(J1-J2)/J3*w1*w2+1/ J3*u(3);

dtheta1=w1-w2*cos(theta1)*tan(theta3)+w3*sin(theta1)*tan(theta3);
dtheta2=w2*cos(theta1)/cos(theta3)-w3*sin(theta1)/cos(theta3);
dtheta3=w2*sin(theta1)+w3*cos(theta1);
%-----------------------
sys =[dw1 dw2 dw3 dtheta1 dtheta2 dtheta3];
function sys=mdlOutputs(t,x)
wx=x(1);wy=x(2);wz=x(3);
thetax=x(4);thetay=x(5);thetaz=x(6);
% % dthetax=wx-wy*cos(thetax)*tan(thetaz)+wz*sin(thetax)*tan(thetaz);
% % dthetay=wy*cos(thetax)/cos(thetaz)-wz*sin(thetax)/cos(thetaz);
% % dthetaz=wy*sin(thetax)+wz*cos(thetax);
% wx=x(1);wy=x(2);wz=x(3);
% thetax=x(4);thetay=x(5);thetaz=x(6);
sys =[wx wy wz thetax thetay thetaz];
A240

4.完整MATLAB

V

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于simulink的无人机姿态飞行控制仿真 的相关文章

  • 自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建

    一 现在关于自抗扰控制技术方面的研究已经比较成熟了 xff0c 基本上熟悉结构以后都可以找到例子实现 xff0c 今天以一个简单的例子来介绍自抗扰控制的仿真系统搭建 xff0c 不必畏惧 xff0c 熟悉皆可达 1 首先自抗扰控制分为TD
  • Windows下编译PX4源码并连接simulink

    目录 一 安装UAV支持PX4飞行器支持包二 下载工具链对于2019a对于2021a 三 克隆PX4源码四 构建PX4固件固件的选择编译指令报错的处理 五 MATLAB的Test Connection 一 安装UAV支持PX4飞行器支持包
  • simulink bus总线创建方法

    在simulink中创建bus总线 xff0c 主要包含2种方法 xff1a 基于模块创建总线对象 使用模块 xff0c 根据输入信号创建总线 基于 MATLAB 数据创建总线对象 可以使用 Simulink Bus cellToObjec
  • Keil+Simulink生成Xcp标定协议A2L文件

    Keil 43 Simulink生成Xcp标定协议A2L文件 由于最近要为ECU移植XCP协议 xff0c 所以记录一下 xff0c 我使用的MCU为NXP S32K144 IDE选用MDK 官方IDE S32DS无代码联想功能 xff0c
  • 1708_Simulink中取数组元素

    全部学习汇总 xff1a GitHub GreyZhang g matlab MATLAB once used to be my daily tool After many years when I go back and read my
  • 【仿真】手把手学会基于Simulink下的模糊控制系统(上)

    目录 前言 xff1a 什么是模糊控制 1 模糊控制器MATLAB教程 xff08 初级 xff09 1 1 模糊PD控制器 前言 xff1a 什么是模糊控制 控制专业并且写过论文的同学想必一定听说过模糊控制 xff0c 但多数人对于什么是
  • 单相半桥逆变器仿真技巧

    1 拓扑与控制 单相半桥逆变器拓扑如下 电压环和电流环控制图如下 调制方式如下 2 仿真步骤 单相半桥逆变器的仿真应该遵循以下步骤 1 选择合适的滤波电感和滤波电容 一般是mH级别 2 选择合适的调制度 注意由于半桥电容电压波动过大 往往不
  • 基于Simulink的开关电源仿真设计

    基于Simulink的开关电源仿真设计 由220V单相工频交流电转变为直流电进行输出 设计由MATLAB的Simulink工具箱进行仿真实现 设计思路 输入端为220V单相工频交流电 输出端为48V直流电 48V直流电源应用广泛 如干电池
  • AD采样的问题答案

    群友提问 请教一个AD采样的问题 现在想采样一个4 20mA的电流信号 信号调理电路如图1所示 输入电流与输出电压关系如图1中公式所示 现在遇到一个问题 当输入电流给定为4 7 93mA时 运放2脚的电压为0 954V Vout为0 652
  • 1_simulink简单入门_simulink仿真PID控制

    1 simulink简单入门 simulink仿真PID控制 2 simulink搭建RCL 电阻电感电容模块 毕业前想去做物联网还是或者linux 结果玩了一年多的电机控制 早就深知matlab simulink绕不过的 拖到现在 下班晚
  • Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析

    文章目录 1 定义 2 变换和处理 3 函数 4 实例演示 例1 单频正弦信号 整数周期采样 例2 单频正弦信号 非整数周期采样 例3 含有直流分量的单频正弦信号 例4 正弦复合信号 例5 含有随机干扰的正弦信号 例6 实际案例 5 拓展
  • 放大滤波电路设计

    放大滤波电路设计 摘 要 研究目的主要为自主设计一个放大滤波电路 使其满足相应参数要求 并且在放大器输出端留有测试端子 本作品信号源提供正弦输入信号 基本满足电压增益40dB可调 低通滤波器 带通滤波器设计等任务要求 关键词 放大滤波电路
  • 如何将数据从 Simulink 模块获取到 MATLAB GUI?

    我有一个 Simulink 模型 该模型使用嵌入式 MATLAB 函数作为模块 但我无法弄清楚如何在嵌入式 MATLAB 模块和 GUI 之间实时 即模型运行时 移动数据 我尝试在模型中实现 到工作区 块 但我不知道如何正确使用它 有谁知道
  • 如何在不使用绘图的情况下将范围保存到图像文件?

    这个条件非常重要 因为绘图以不可接受的方式拉伸我的图表 如果 MikeT 的评论是正确的 并且您正在尝试保存 Scope 块中显示的图像 则可以通过以下几种方法来执行此操作 打印示波器窗口的内容通过单击Print图标 范围工具栏上最左边的图
  • Simulink - 每 30 秒输出 1,否则输出 0

    我需要一个需要每隔 30 秒或略超过 30 秒输出 1 的子系统 用matlab代码编写它应该像这样工作 function y fcn time uplinkTimeInterval codegen persistent lastTrigg
  • 基于PI控制器的光伏并网逆变器系统simulink建模与仿真

    目录 1 算法仿真效果 2 MATLAB源码 3 算法概述 4 部分参考文献 1 算法仿真效果 matlab2022a仿真结果如下
  • 如何获取嵌入式 MATLAB 函数的内容

    我的 Simulink 模型中有一些嵌入式 MATLAB 函数 有没有办法获取此块的内容 您在编辑器中看到的文本 我的第一个猜测是使用 find system 获取嵌入式 MATLAB 函数 然后使用 get param 获取内容 但我没有
  • 将 Matlab Simulink 模型保存为带有紧密边界框的 PDF

    给定一个 Simulink 框图 模型 我想生成一个 屏幕截图 以便稍后在 LaTeX 文档中使用 我希望这个屏幕截图是带有紧密边框的 PDF 矢量图形 gt pdflatex 我的意思是图表周围没有不必要的空白 我搜索了网络 搜索了 st
  • 以编程方式连接两个子系统

    我正在尝试以编程方式重用我之前开发的一些自定义块 模型来构建一个复杂的模型 但我无法设法连接两个 PMC Port 这就是我所拥有的 Main system sys name model sys new system sys name op
  • 如何将 Simulink 编码器编译器版本设置为支持 C++11 的版本?

    我正在尝试将代码合并到 Simulink 及其嵌入式编码器中 该代码使用 C 11 扩展 跑步mex setup c 给出这个输出 mex setup c MEX configured to use Xcode Clang for C la

随机推荐

  • Flask 入门教程:Jinja2模板用法

    Jinja2模板引擎简介 模板 在前面的示例中 xff0c 视图函数的主要作用是生成请求的响应 xff0c 这是最简单的请求 实际上 xff0c 视图函数有两个作用 xff1a 处理业务逻辑和返回响应内容 在大型应用中 xff0c 把业务逻
  • VINS-mono中坐标系定义以及通过VINS-mono求解无人机位姿

    因为在科研中需要使用VINS mono算法来为无人机提供位姿估计信息 因此需要搞清楚VINS mono相应坐标系以及无人机坐标系之间的关系 目录 1 坐标系关系 1 1 VINS mono坐标系定义 1 2 无人机坐标系 2 通过VINS
  • Github Copilot 开始收费了, 帮你列出些替代的插件

    今天打开 VSCode xff0c 弹出了Github Copilot 开始收费的通知 可以免费用到 8 月 22 日 xff0c 每月 70 元还是有些小贵 这里给大家推荐一些替代品 xff1a Kite https www kite c
  • 如何在 Ubuntu上使用 Nginx 设置密码验证

    介绍 设置 Web 服务器时 xff0c 您通常希望限制访问网站的某些部分 Web 应用程序通常提供自己的身份验证和授权方法 xff0c 但如果这些方法不充分或不可用 xff0c 则可以使用 Web 服务器本身来限制访问 在本指南中 xff
  • 使用Argo CD和GitOps持续部署到Kubernetes

    引言 使用Kubernetes部署你的应用程序可以提供显著的基础设施优势 xff0c 例如灵活的伸缩 分布式组件的管理以及对应用程序不同版本的控制 然而 xff0c 随着控制的增加 xff0c 复杂性也随之增加 持续集成和持续部署 CI C
  • GitHub Codespaces 的配置

    CPU xff1a 4x Xeon 64 2 60 GHz 轻度开发够用 xff0c 要是编译什么稍微复杂一点的项目 估计会CPU跑满 内存 xff1a 8G xff0c 勉强够用 自用的Mac 16G都感觉不太够 硬盘 xff1a 32G
  • 使用Zoundry在CSDN发布Blog

    安装一个Zoundry吧 xff0c 用这个来离线写Blog xff0c 再也不怕突然断线和丢失文章了 Zoundry是用Python实现的一个离线撰写Blog工具 支持Community Servedr blogger com Wordp
  • Python中Array的常用操作(二)数组基本操作

    1 数组操作 x代表数组中的元素 xff0c i代表位置 a append x 把元素x添加到数组的尾部 b insert i x 把元素x 插入到位置i c remove x 删除第一个元素x d pop i 删除第i个元素 xff0c
  • Python中Array的常用操作(三)数组高级操作

    1 抽取数组中不重复的数据 gt gt gt a 61 x 2 for x in range 1 5 2 gt gt gt uniq 61 list set a 8 2 4 6 gt gt gt uniq 61 sorted set a 2
  • 2011年,移动互联网加速蔓延 – 来自2011移动开发者大会

    2011移动开发者大会 xff0c 这是第二届移动开发者大会了 xff0c 这一年来移动互联网各个领域蔓延开来 xff0c 蔓延这个词是开复老师演讲的主题 从事塞班开发的请举手 xff0c 举手者寥寥 记得在去年移动开发者大会上 xff0c
  • main函数之前做了什么?

    main函数之前 真正的函数执行入口或开始 一种解释 实际上 xff0c 在可执行文件被加载之后 xff0c 控制权立即交给由编译器插入的Start函数 xff0c 它将对后面这些全局变量进行准备 xff1a osver 操作系统的构件编号
  • detecron2中的注册机制

    文章目录 一 为什么使用注册类二 注册类的实现 传送门 Detectron2 01 注册机制 Registry 实现 一 为什么使用注册类 以下转自知乎 https zhuanlan zhihu com p 93835858 对于detec
  • 单目视觉SLAM在无人机上的应用

    目录 写在前面 本文说明 论文链接和实验视频 源代码链接 一 实验环境 硬件 软件 算法 二 实验环境搭建过程 1 Intel NUC安装Ubuntu 16 04 2 安装ROS D435i驱动以及ORB SLAM2算法 3 ORB SLA
  • TypeError: Expected cv::UMat for argument ‘img‘

    研究Detectron2中的在线数据增强的源码 并显示数据增强后的图像时 xff0c 遇到 TypeError Expected cv UMat for argument 39 img 的问题 显然 xff0c 问题要求是输入一个uint8
  • Linux 桌面终于迎来了 Docker Desktop

    Docker 桌面是容器化应用程序的最简单方法 无需考虑在你选择的系统上设置环境即可开始使用 只需要安装 Docker 桌面 xff0c 就可以开始了 Docker 桌面应用程序附带容器工具 xff0c 如 Kubernetes Docke
  • Dockerfile制作镜像和常用Shell脚本语法记录

    一 常规命令和使用记录 1 定义变量 判断匹配 赋值等 定义变量 addr 61 a namespace 61 b 判断匹配自定义的 包括参数化构建设置的变量 环境变量 xff0c 并赋值 case 34 Env 34 in dev nam
  • [Holo_wo]-vscode常用配置项说明

    vscode 配置文件核心 settings json xff1a 整个vscode的配置 xff0c 是本地vscode的配置 xff0c 如果有ssh远程 xff0c 那么会在远程主机的 vscode server目录下有setting
  • 基于jQuery的ajax跨域请求,PHP作为服务器端代码

    ajax实现跨域请求有两种方式 xff1a 方法一 xff1a jsonp的方式 jsonp方式的关键点在客户请求以jsonp作为数据类型 xff0c 服务器端接收jsonp的回调函数 xff0c 并通过回调函数进行数据的传输 具体代码如下
  • 无人机位置信息计算无人机的瞬时速度的matlab仿真

    目录 1 算法描述 2 仿真效果预览 3 MATLAB核心程序 4 完整MATLAB 1 算法描述 无人机最早在20世纪20年代出现 xff0c 1914年第一次世界大战正进行得如火如荼 xff0c 英国的卡德尔和皮切尔两位将军 xff0c
  • 基于simulink的无人机姿态飞行控制仿真

    目录 1 算法描述 2 仿真效果预览 3 MATLAB核心程序 4 完整MATLAB 1 算法描述 无人机是无人驾驶飞机的简称 xff08 Unmanned Aerial Vehicle xff09 xff0c 是利用无线电遥控设备和自备的