共有四个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。