共有四个Matlab文件,main.m、AirCraft.m、Arena.m和mission_planner.m
main.m
主文件比较简短,主要是模拟和控制无人机的飞行路径。
首先是一些初始定义和设置:
- num_of_UAVs = 4: 定义无人机的数量为4。
- time = 1300: 定义总时间为1300秒。
- sample_arena = Arena: 定义一个模拟竞技场- sample_arena,其位置和障碍物可以通过- Arena.m文件进行修改。
- tic: 开始一个计时器,用于计算代码运行时间。
- for i = 1:1:num_of_UAVs: 对于每个无人机,初始化一个飞行器对象。
- UAVs(i) = AirCraft(i): 将每个无人机与一个飞行器对象关联。
- sample_mission_planner = mission_planner(UAVs, sample_arena): 使用给定的无人机和竞技场初始化任务规划器。
- N = time/sample_arena.dt: 计算模拟的时间步数。
主循环:
- for i = 1:1:N: 主循环,模拟无人机的行为。
- for k = 1:1:numel(UAVs): 对于每个无人机,计划其飞行任务。
- sample_mission_planner.plan_mission(k): 为第k个无人机计划任务。
- UAVs(k).move(sample_arena): 让第k个无人机移动。
- toc: 停止计时器,并显示运行时间。
绘图部分:
1.对于每个无人机,绘制其飞行路径:
- X = [UAVs(l).vehical_log.x]; Y = [UAVs(l).vehical_log.y]; Z = [UAVs(l).vehical_log.h];: 获取每个无人机的位置信息。
- 使用不同的颜色绘制不同无人机的路径。
2.对于每个无人机,提取其速度、航向、倾斜度和高度信息:
- 速度随时间的变化。
- 航向随时间的变化。
- 倾斜度随时间的变化。
- 高度随时间的变化。
Arena.m
这个文件是用于模拟无人机(UAV)的飞行环境。
-  属性: - dt: 模拟的时间步长,单位为秒。
- rho: 空气的密度。
- g: 重力加速度,单位为米每秒平方。
- disturbance: 表示风的影响,包括风速和风加速度。
- safety_distance: 安全距离。
- static_object: 静态物体的位置。
- AO_waypoint: 一个目标点,所有无人机在起飞后都会接近这个点。
 
-  方法: - Arena(): 这是- Arena类的构造函数,用于初始化- Arena对象。在这个函数中,静态物体的位置和- AO_waypoint被初始化。
 
mission_planner.m
首先定义大类“mission_planner<handle”,主要功能是用于生成对对象AirCraft的命令指令。来自该类的对象将负责控制,而信使则嵌入在飞机本身中。你可以将其视为模拟器的游戏规划师/设计师。
接下来在大类中定义了一个类,并设置其访问级别为“private”,意味着这些属性只能在类的内部被访问和修改,而不能从类的外部直接访问。下面是各个属性的介绍。
-  Agents:用于保存任务中的所有UAV(无人驾驶飞行器)。
-  Arena:用于保存竞技场或环境信息。
-  running_on:是一个数组或矩阵,用于跟踪哪些UAV正在运行或正在为哪个UAV规划路线点。例如,如果running_on(1) = 1,则表示第一个UAV正在运行。
-  takeoff_order:是一个数组,保存了UAV的起飞顺序。例如,takeoff_order(1)可能是第一个UAV的ID,takeoff_order(2)是第二个UAV的ID,以此类推。
-  take_off_orbit:用于保存UAV的起飞轨道或路径。
-  step_number = 1:保存了主要的迭代次数或步骤数。从这里看,它被初始化为1。
这个类是为了管理一个包含多个UAV的飞行任务。每个UAV都有自己的起飞顺序和可能的任务规划。这个类提供了对这些信息的管理和存储。
然后定义了一个名为“Constant”的类,并为其设置了值,并设置其访问级别为“Constant”,意味着这个属性的值在初始化后不能被修改。
-  Delta=10000:定义了一个名为“Delta”的属性,并为其赋值10000。注释“Used in the takeoff mode”表明这个值可能在起飞模式中被使用。
之后又定义了一个类,并设置其访问级别为“private”,意味着这些属性只能在类的内部被访问和修改,而不能从类的外部直接访问。
-  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,表示这是跟踪模式。)
-  arc_number:为其赋值了一个包含四个1的数组。根据注释和上下文,这个属性可能与飞机的工作模式相关,例如用于表示每种模式下飞机应该执行的任务或行为。
总的来说,这个类是用来管理飞机的各种工作模式的,每种模式都有不同的行为和任务。通过设置working_mode属性,可以控制飞机在不同的工作模式之间切换,而arc_number属性可能用于进一步定义或调整每种模式下飞机的具体行为。
然后又定义了一个类,并设置其访问级别为“public”,意味着这些属性可以从类的外部直接访问和修改。
-  takeoff_parameters:是一个结构体,用于存储起飞模式的参数。注释中提到了几个字段,如飞机在起飞模式下的飞行高度(AC_current_level)、起飞标志(ready_flag)、飞机在协调过程中的状态(AC_CP_states)等。
-  WayPointArcs:是一个结构体,用于存储无人机需要遵循的弧线的数据。注释中提到了弧线的端点、角度和方向等信息。
-  WayPoint_level:用于表示无人机当前所在的位置或状态。如果无人机位于两个弧线之间并正在移动到下一个弧线,则其值为0;如果无人机正在跟随弧线,则其值为1。
-  NTimer:表示等待时间。注释中提到,如果在给定的等待时间内没有收到来自上一级的其他无人机的通信,无人机将移动到另一个位置。
-  ICA:表示在起飞模式中使用的中间高度或水平面。
这个类是用于管理无人机的起飞模式和相关参数的。通过设置和修改这些属性,可以控制无人机的起飞行为和路径规划。
定义函数“mission_planner”,该函数接受两个输入参数:UAVs(无人机的集合)和sample_arena(样本竞技场),主要功能是初始化一个对象,并设置该对象的多个属性。以下是对代码的详细解释:
-  对象属性的初始化: - obj.Agents = UAVs: 将输入参数- UAVs赋值给对象的- Agents属性,表示无人机的集合。
- obj.Arena = sample_arena: 将输入参数- sample_arena赋值给对象的- Arena属性,表示样本竞技场。
 
-  工作模式的初始化: - obj.working_mode = ones(1,numel(UAVs)): 创建一个1xN的列向量,其中N是无人机的数量。这个向量被初始化为全1,意味着所有无人机的工作模式都被初始化为起飞模式。
 
-  起飞顺序的初始化: - obj.takeoff_order = transpose(linspace(1,numel(UAVs))): 使用- linspace函数创建一个向量,从1到无人机的数量。然后使用- transpose转置该向量,得到一个行向量作为起飞顺序。
 
-  计时器的初始化: - obj.NTimer = 20*ones(numel(UAVs)): 创建一个与无人机数量相同的列向量,并初始化为20。这可能是每个无人机的等待时间或计时器。
 
-  WayPoint_level的初始化: - obj.WayPoint_level = zeros(numel(UAVs)): 创建一个与无人机数量相同的列向量,并初始化为0。这可能是无人机在飞行过程中的水平点或高度点。
 
-  无人机起飞模式的参数初始化: 
 对于每一个无人机(由循环实现),其起飞模式的参数被初始化为:- AC_CP_states = 0: 表示无人机的状态在协调过程中为0。
- ready_flag = 0: 表示无人机的准备标志为0。
- AC_current_level = 0: 表示无人机当前的飞行高度或水平点为0。
- jump_in_ready = 0: 表示无人机在准备跳跃时的状态为0。