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