colavoidance4

共有四个Matlab文件,main.m、AirCraft.m、Arena.m和mission_planner.m

main.m

主文件比较简短,主要是模拟和控制无人机的飞行路径。

首先是一些初始定义和设置:

  1. num_of_UAVs = 4: 定义无人机的数量为4。
  2. time = 1300: 定义总时间为1300秒。
  3. sample_arena = Arena: 定义一个模拟竞技场sample_arena,其位置和障碍物可以通过Arena.m文件进行修改。
  4. tic: 开始一个计时器,用于计算代码运行时间。
  5. for i = 1:1:num_of_UAVs : 对于每个无人机,初始化一个飞行器对象。
  6. UAVs(i) = AirCraft(i): 将每个无人机与一个飞行器对象关联。
  7. sample_mission_planner = mission_planner(UAVs, sample_arena): 使用给定的无人机和竞技场初始化任务规划器。
  8. N = time/sample_arena.dt: 计算模拟的时间步数。

主循环:

  1. for i = 1:1:N : 主循环,模拟无人机的行为。
  2. for k = 1:1:numel(UAVs) : 对于每个无人机,计划其飞行任务。
  3. sample_mission_planner.plan_mission(k): 为第k个无人机计划任务。
  4. UAVs(k).move(sample_arena): 让第k个无人机移动。
  5. toc: 停止计时器,并显示运行时间。

绘图部分:

1.对于每个无人机,绘制其飞行路径:

  • X = [UAVs(l).vehical_log.x]; Y = [UAVs(l).vehical_log.y]; Z = [UAVs(l).vehical_log.h];: 获取每个无人机的位置信息。
  • 使用不同的颜色绘制不同无人机的路径。

2.对于每个无人机,提取其速度、航向、倾斜度和高度信息:

  • 速度随时间的变化。
  • 航向随时间的变化。
  • 倾斜度随时间的变化。
  • 高度随时间的变化。

Arena.m

这个文件是用于模拟无人机(UAV)的飞行环境。

  1. 属性:

    • dt: 模拟的时间步长,单位为秒。
    • rho: 空气的密度。
    • g: 重力加速度,单位为米每秒平方。
    • disturbance: 表示风的影响,包括风速和风加速度。
    • safety_distance: 安全距离。
    • static_object: 静态物体的位置。
    • AO_waypoint: 一个目标点,所有无人机在起飞后都会接近这个点。
  2. 方法:

    • Arena(): 这是Arena类的构造函数,用于初始化Arena对象。在这个函数中,静态物体的位置和AO_waypoint被初始化。

mission_planner.m

首先定义大类“mission_planner<handle”,主要功能是用于生成对对象AirCraft的命令指令。来自该类的对象将负责控制,而信使则嵌入在飞机本身中。你可以将其视为模拟器的游戏规划师/设计师。


接下来在大类中定义了一个类,并设置其访问级别为“private”,意味着这些属性只能在类的内部被访问和修改,而不能从类的外部直接访问。下面是各个属性的介绍。

  1. Agents:用于保存任务中的所有UAV(无人驾驶飞行器)。

  2. Arena:用于保存竞技场或环境信息。

  3. running_on:是一个数组或矩阵,用于跟踪哪些UAV正在运行或正在为哪个UAV规划路线点。例如,如果running_on(1) = 1,则表示第一个UAV正在运行。

  4. takeoff_order:是一个数组,保存了UAV的起飞顺序。例如,takeoff_order(1)可能是第一个UAV的ID,takeoff_order(2)是第二个UAV的ID,以此类推。

  5. take_off_orbit:用于保存UAV的起飞轨道或路径。

  6. step_number = 1:保存了主要的迭代次数或步骤数。从这里看,它被初始化为1。

这个类是为了管理一个包含多个UAV的飞行任务。每个UAV都有自己的起飞顺序和可能的任务规划。这个类提供了对这些信息的管理和存储。


然后定义了一个名为“Constant”的类,并为其设置了值,并设置其访问级别为“Constant”,意味着这个属性的值在初始化后不能被修改。

  1. Delta=10000:定义了一个名为“Delta”的属性,并为其赋值10000。注释“Used in the takeoff mode”表明这个值可能在起飞模式中被使用。


之后又定义了一个类,并设置其访问级别为“private”,意味着这些属性只能在类的内部被访问和修改,而不能从类的外部直接访问。

  1. working_mode:用于设置飞机的运行模式。注释提到了四种工作模式:起飞模式、飞往AO模式、搜索模式和跟踪模式。注释中解释了working_mode属性的用途和工作模式的选择。(for the takeoff mode工作模式1,表示这是起飞模式。for the fly to AO mode工作模式2,表示这是飞往某个目标(可能是机场或着陆点)的模式。for the search mode工作模式3,表示这是搜索模式。for the trackm mode工作模式4,表示这是跟踪模式。)

  2. arc_number:为其赋值了一个包含四个1的数组。根据注释和上下文,这个属性可能与飞机的工作模式相关,例如用于表示每种模式下飞机应该执行的任务或行为。

总的来说,这个类是用来管理飞机的各种工作模式的,每种模式都有不同的行为和任务。通过设置working_mode属性,可以控制飞机在不同的工作模式之间切换,而arc_number属性可能用于进一步定义或调整每种模式下飞机的具体行为。


然后又定义了一个类,并设置其访问级别为“public”,意味着这些属性可以从类的外部直接访问和修改。

  1. takeoff_parameters:是一个结构体,用于存储起飞模式的参数。注释中提到了几个字段,如飞机在起飞模式下的飞行高度(AC_current_level)、起飞标志(ready_flag)、飞机在协调过程中的状态(AC_CP_states)等。

  2. WayPointArcs:是一个结构体,用于存储无人机需要遵循的弧线的数据。注释中提到了弧线的端点、角度和方向等信息。

  3. WayPoint_level:用于表示无人机当前所在的位置或状态。如果无人机位于两个弧线之间并正在移动到下一个弧线,则其值为0;如果无人机正在跟随弧线,则其值为1。

  4. NTimer:表示等待时间。注释中提到,如果在给定的等待时间内没有收到来自上一级的其他无人机的通信,无人机将移动到另一个位置。

  5. ICA:表示在起飞模式中使用的中间高度或水平面。

这个类是用于管理无人机的起飞模式和相关参数的。通过设置和修改这些属性,可以控制无人机的起飞行为和路径规划。


定义函数“mission_planner”,该函数接受两个输入参数:UAVs(无人机的集合)和sample_arena(样本竞技场),主要功能是初始化一个对象,并设置该对象的多个属性。以下是对代码的详细解释:

  1. 对象属性的初始化:

    • obj.Agents = UAVs: 将输入参数UAVs赋值给对象的Agents属性,表示无人机的集合。
    • obj.Arena = sample_arena: 将输入参数sample_arena赋值给对象的Arena属性,表示样本竞技场。
  2. 工作模式的初始化:

    • obj.working_mode = ones(1,numel(UAVs)): 创建一个1xN的列向量,其中N是无人机的数量。这个向量被初始化为全1,意味着所有无人机的工作模式都被初始化为起飞模式。
  3. 起飞顺序的初始化:

    • obj.takeoff_order = transpose(linspace(1,numel(UAVs))): 使用linspace函数创建一个向量,从1到无人机的数量。然后使用transpose转置该向量,得到一个行向量作为起飞顺序。
  4. 计时器的初始化:

    • obj.NTimer = 20*ones(numel(UAVs)): 创建一个与无人机数量相同的列向量,并初始化为20。这可能是每个无人机的等待时间或计时器。
  5. WayPoint_level的初始化:

    • obj.WayPoint_level = zeros(numel(UAVs)): 创建一个与无人机数量相同的列向量,并初始化为0。这可能是无人机在飞行过程中的水平点或高度点。
  6. 无人机起飞模式的参数初始化:
    对于每一个无人机(由循环实现),其起飞模式的参数被初始化为:

    • AC_CP_states = 0: 表示无人机的状态在协调过程中为0。
    • ready_flag = 0: 表示无人机的准备标志为0。
    • AC_current_level = 0: 表示无人机当前的飞行高度或水平点为0。
    • jump_in_ready = 0: 表示无人机在准备跳跃时的状态为0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法分析与设计】无重复的最长子串

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s "abcabcbb" 输…

九州金榜|如何做好家庭教育

孩子的家庭教育是每个家庭都要做的&#xff0c;也是每个家长面临的事情&#xff0c;同样不同的家庭教育教育出来的孩子性格也各不相同&#xff0c;有时候家长看别别人家的孩子品学兼优非常羡慕&#xff0c;很多家长会把问题归结到孩子身上&#xff0c;其实有没有想过是家庭教育…

机器学习算法与Python实战 | 2024年吴恩达预测:关于AI,这些事未来十年不会变

本文来源公众号“机器学习算法与Python实战”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;2024年吴恩达预测&#xff1a;关于AI&#xff0c;这些事未来十年不会变 2024年&#xff0c;AI的发展会有怎样的改变&#xff1f; 在吴…

CSDN文章导出工具

源码地址&#xff1a; github:https://github.com/lishuangquan1987/CSDNExportergitee:https://gitee.com/lishuangquan1987/csdnexporter 介绍 最近有CSDN博客导出来的需求&#xff0c;翻看了很多开源工具&#xff0c;都不能用或者不好用&#xff0c;于是决定自己做一个。…

docker swarm

1.准备三台机器&#xff0c;分别安装docker,例如IP分别为&#xff1a; 192.168.88.131&#xff0c;192.168.88.136&#xff0c;192.168.88.138 2.修改/etc/hostname 分别为&#xff1a; manger,node1,node2 3.分别修改/etc/hosts添加: 192.168.88.131 manger 192.168.88.13…

支持534种语言,开源大语言模型MaLA-500

无论是开源的LLaMA 2还是闭源的GPT系列模型&#xff0c;功能虽然很强大&#xff0c;但对语言的支持和扩展比较差&#xff0c;例如&#xff0c;二者都是以英语为主的大模型。 为了提升大模型语言的多元化&#xff0c;慕尼黑大学、赫尔辛基大学等研究人员联合开源了&#xff0c;…

香港优才VS高才计划对比哪个好?详解申请条件、优缺点、续签转永居!

香港优才和高才计划对比哪个好&#xff1f;详解申请条件、优缺点、续签转永居&#xff01; 香港优才计划和香港高才通计划&#xff0c;都是热门的香港人才引进项目&#xff0c;在2023年&#xff0c;这两个项目为香港引进了超6万的优秀人才和高端人才&#xff0c;为香港经济发展…

CSRF:跨站请求伪造攻击

目录 什么是CSRF&#xff1f; DVWA中的CSRF low medium hight impossible 防御CSRF 1、验证码 2、referer校验 3、cookie的Samesite属性 4、Anti-CSRF-Token 什么是CSRF&#xff1f; CSRF全称为跨站请求伪造&#xff08;Cross-site request forgery&#xff09;&…

【Linux】静态库和动态库

动静态库 一、静态库1. 静态库概念2. 制作静态库&#xff08;1&#xff09;朴素方法 --- 不打包&#xff08;2&#xff09;对静态库打包 3. 使用静态库&#xff08;1&#xff09;朴素方法 --- 直接使用&#xff08;2&#xff09;使用打包好的静态库 二、动态库1. 动态库概念2. …

傅里叶变换在图像处理中的应用

傅里叶变换在图像处理中有着广泛的应用&#xff0c;因为它能将图像从空间域转换到频率域&#xff0c;使我们能够分析图像中的频率成分。以下是一些傅里叶变换在图像处理中的典型应用&#xff1a; 图像压缩&#xff1a;通过傅里叶变换&#xff0c;我们可以识别并去除图像数据中不…

jenkins 发布远程服务器并部署项目

安装参考另一个文章 配置maven 和 jdk 和 git 注意jdk的安装目录&#xff0c;是jenkins 安装所在服务器的jdk目录 注意maven的目录 是jenkins 安装所在服务器的maven目录 注意git的目录 是jenkins 安装所在服务器的 git 目录 安装 Publish Over SSH 插件 配置远程服务器 创…

不会Git也能玩Github吗?

不会Git也能玩Github吗&#xff1f; 前言使用Github的准备步骤使用一种访问外网资源的方法&#xff08;这一步才是新手最难的一步&#xff09;注册账号 创建一个自己的仓库创建完仓库后的界面 搜索你想要的代码类型以搜索坦克大战为例以下载烟花代码为例 总结 前言 说到Github&…

计算机自顶向下 Wireshark labs——DNS

如本文第2.4节所述&#xff0c;域名系统(DNS)将主机名转换为IP地址&#xff0c;在互联网基础设施中发挥着关键作用。在本实验中&#xff0c;我们将仔细研究DNS的客户端。回想一下&#xff0c;客户端在DNS中的角色相对简单—客户端向其本地DNS服务器发送查询&#xff0c;并收到响…

2023年06月CCF-GESP编程能力等级认证Python编程四级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。 A:编辑 B:保存 C:调试 D:编译 答案:D 第2题 排序算法是稳定的(Stable Sorting),就是指排序算…

Android Jetpack Compose之底部导航栏的实现

目录 1.概述2. 效果展示3. 代码实现3.1 定义底部导航栏的tab项3.2 整体页面架构搭建3.3 底部导航栏的实现3.4 所有代码 4.总结 1.概述 写过一段Android jetpack compose 界面的小伙伴应该都用过Compose的脚手架Scaffold&#xff0c;利用它我们可以很快的实现一个现代APP的主流…

Ubuntu使用Docker部署Nginx并结合内网穿透实现公网远程访问

文章目录 1. 安装Docker2. 使用Docker拉取Nginx镜像3. 创建并启动Nginx容器4. 本地连接测试5. 公网远程访问本地Nginx5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 在开发人员的工作中&#xff0c;公网远程访问内网是其必备的技术需求之一。对于…

为什么要进行网站内容监测?内容监测包括哪些方面?(国科云)

随着信息化的普及&#xff0c;网站已经成为企业和组织传递信息、与公众互动的重要平台。网站内容监测对于维护品牌形象&#xff0c;提升用户体验、防止不良信息传播等具有非常重要的作用。本文国科云简单介绍下进行内容监测的必要性以及内容监测包括哪些方面。 为什么要进行网…

基于YOLOv8的足球赛环境下足球目标检测系统(Python源码+Pyqt6界面+数据集)

博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量化&#xff1b;2&#xff09;目标检测、语义分割、OCR、分类等技术孵化&#xff0c;赋能智能制造&#xff0c;工业项目落地经验丰富&#xff1b; …

五、医学影像云平台 - 医共体

原创不易&#xff0c;多谢关注&#xff01;谢谢&#xff01; 1. 医学大影像设备市场现状 目前影像设备&#xff0c;可以说低端产品同质化越来越严重&#xff0c;利润越来越薄&#xff0c;而高端超高端设备&#xff0c;整体销售额却在增长&#xff0c;利润空间也比低端的要高的…

Netty入门使用

为什么会有Netty? NIO 的类库和 API 繁杂&#xff0c;使用起来比较麻烦&#xff0c;需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。开发工作量和难度都非常大&#xff0c;例如客户端面临断线重连、网络闪断、心跳处理、半包读写、网络拥塞和异…