无人机集群控制及其应用——无人机编队仿真(Matlab代码实现)

       💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

四旋翼无人机具有成本较低、设备简单、飞行时间灵活等特点,近些年被广泛应用于军事和民用领域,如目标侦察、应急救援、农业植保、无人机灯光表演。随着任务复杂度的增加,单架无人机往往难以满足任务需求,因此无人机集群控制及其应用由此成为目前的研究热点,多无人机集群能够提高执行任务效率和灵活度。无人机队形变换控制方法是实现多无人机编队飞行的前提,集群无人机队形重构问题是我们要考虑的一个重要问题,让每架无人机都能从初始位置无碰撞的到达最终位置,进而保证队形重构过程中代价最小或能耗最优。其中目标分配问题最多利用匈牙利算法进行解决,但是在多无人机轨迹规划时普遍存在计算难度大、规划时间增长、规划效率难以满足实际需求的问题。因此,探索计算简便、效率高的多无人机路径规划算法是目前迫切需要的。

无人机集群控制及其应用——无人机编队仿真研究

一、引言

无人机集群控制是指通过先进的通信、导航和控制算法,实现多架无人机之间的协同、协调和高效的任务执行。随着无人机技术的不断发展,无人机编队飞行得到了越来越多的关注。与单架无人机相比,无人机编队可以显著提高其完成作战任务的效率,如执行侦查、打击、通信中继、环境监测、灾害救援、交通监管等多种任务。

二、无人机集群控制技术

无人机集群的控制技术包括通信技术、路径规划技术、碰撞避免技术、分布式控制技术、集中式控制结构、混合式控制结构、任务与资源分配以及实时数据处理等方面。

  1. 通信技术:实现无人机之间的实时数据传输和共享,确保集群控制的准确性和稳定性。这通常采用无线通信技术,如Wi-Fi、LoRa、Zigbee或定制的无人机专用通信协议。
  2. 路径规划技术:通过对任务区域进行建模和分析,确定最优的路径规划方案,使无人机能够高效地完成任务。常用的路径规划算法有A*算法、Dijkstra算法和遗传算法等。
  3. 碰撞避免技术:利用无人机之间的通信和传感器技术,感知周围环境和其他无人机的状态,避免碰撞事件的发生。常用的碰撞避免算法有最近邻算法、虚拟势场算法和避障路径规划算法等。
  4. 控制结构
    • 集中式控制结构:有一个主控单元负责全局信息和任务分配,但存在计算复杂度高、反应速度慢等问题。
    • 分布式控制结构:更加灵活,适用于动态环境,但协调合作难度较大。
    • 混合式控制结构:结合了两者的优点,既包含统一全局的中央管理模块,也采用分布式结构中每个成员无人机之间的通信方式。

三、无人机编队仿真研究

无人机编队飞行可以大幅提高作战效率,但也面临多机任务协同分配、传感器数据融合等问题。无人机编队仿真研究旨在通过模拟无人机编队的飞行过程,验证和优化编队控制算法。

  1. 编队运动模型
    • 采用长机-僚机结构,建立以僚机速度方向为X轴且建立固连于僚机的旋转坐标系。
    • 根据两机相对运动关系建立编队运动数学模型,设计控制器进行仿真验证。
  2. 控制器设计
    • 设计一种小脑模型神经网络(CMAC)与PID并行控制器,利用PID构成反馈控制,CMAC构成前馈控制。
    • 以双机编队为基础对控制器进行仿真验证,仿真结果表明该控制器能够实现编队队形保持与重构,并且与传统PID控制器相比,在受到指令扰动及控制器参数变动时,长机与僚机间距变化较小,调节过程明显加快,具有更强的鲁棒性。

四、无人机编队应用

无人机编队的应用领域十分广泛,主要包括以下几个方面:

  1. 侦察:无人机集群可以在不同区域进行搜索和侦查,及时发现和评估威胁。在军事领域,这可以提高作战效率和准确性;在民用领域,则可用于环境监测、交通监管等任务。
  2. 打击:通过搭载武器和感应设备,无人机集群可以对打击目标进行反应和打击。这在军事领域具有显著优势,能够快速响应并摧毁敌方目标。
  3. 通信中继:无人机集群可以作为临时的通信中继节点,提高通信覆盖范围和可靠性。在自然灾害发生时,这种应用尤为重要,可以确保救援行动的通信畅通。
  4. 环境监测:无人机集群可以快速巡查各个区域,获取空气质量、水质、土壤等信息,为环境保护和研究提供支撑。
  5. 灾害救援:在地震、洪水等自然灾害发生时,无人机集群可以快速定位受困人员并提供实时数据支持救援行动。

五、结论

无人机集群控制及应用技术是一项复杂而富有挑战性的领域,涉及多个学科和技术。随着技术的不断发展和进步,无人机集群控制技术将在更多领域发挥重要作用。未来的无人机集群将具备更高的智能化水平和自主决策能力,能够应对更加复杂和多变的任务场景。同时,随着技术的不断进步和应用领域的不断拓展,无人机集群的成本也将逐渐降低,推动其在民用和商用领域的广泛应用。

📚2 运行结果

主函数部分代码:

% 该程序用到
%  main.m :
%            主函数  
​
%  calc.m  :
%            位置计算函数,实际上是将矩阵的点绘制到固定坐标位置
%        例如矩阵 array_f 中第一行第二列中的1 表示一架无人机。在模型场景中
%        他的位置实际上是(90, 30),这个计算过程就是通过这个函数计算得到,知道他的功能就行。
%
%  move.m :
%            位置移动函数,该函数主要功能是做点的位置移动,不需要理会。
%
% my_function.m
: %           算法函数,需要完成的算法函数,具体要完成什么在函数中有说明
​
% 
​
​
clc
clear all
​
symbol   = 'bo';  % 打点颜色符号(b. 蓝点; bo蓝圈)
symbol1  = 'wo';  % 打点颜色符号(w. 白点; wo白圈)
   
dt = 1; % 采样步距
v  = 1; % 速度
​
​
% 设置两点之间距离
width = 10;
​
% 做 8*8 矩阵 19 个点  字符:F  初始矩阵
array_f = [0 1 1 1 1 1 1 0;
           0 0 1 0 0 0 0 0;
           0 0 1 0 0 1 0 0;
           0 0 1 1 1 1 0 0;
           0 0 0 0 0 1 0 0;
           0 0 1 0 0 0 0 0;
           0 0 1 0 0 0 0 0;
           0 1 1 1 0 0 0 0];
       
% 做 8*8 矩阵 19 个点  字符:Z  目标矩阵
array_z = [0 1 1 1 1 1 1 0;
           0 1 0 0 0 1 0 0;
           0 0 0 0 1 0 0 0;
           0 0 0 1 0 0 0 0;
           0 0 0 1 0 0 0 0;
           0 0 1 0 0 0 0 0;
           0 0 0 0 0 1 0 0;
           1 1 1 1 1 1 0 0];
​
%场景的范围       
xmin = 0;xmax = width * 8 + 20;ymin = 0;ymax = width * 8 + 20; 
​
​
% 创建一个空的坐标图
axis([xmin xmax ymin ymax]); %设定坐标范围
figure(1);
hold on ; %保留绘图内容
​
​
​
% 初始化矩阵 
​
 %  该矩阵用于保存开始坐标位置 实际上是一个二维矩阵,矩阵的索引号就是 ID 号 第一位元素为 x 轴坐标,第二位元素为 y 轴坐标
 %   例如: id_sta_addr(7, 1) 表示 ID7 的无人机 X 轴坐标位置; 同理 id_sta_addr(7, 2)表示 ID7 的无人机 Y 轴坐标位置
id_sta_addr = zeros(19,2);  
​
%  该矩阵用于保存结束坐标位置
id_sto_addr = zeros(19,2);
​
%  该矩阵用于无人机在飞行过程中的临时坐标信息
id_cur_addr = zeros(19,2);
​
% 该矩阵用于保存所有无人机的最终要飞行的时间 是一个一维数组, 同上索引和就是ID号
% 例如 id_tm(1) 表示 ID1的无人机 飞行的时间
id_tm = zeros(19, 1);  
​
% 临时变量
index = 1;
​
% 给飞机实时编号,行扫描 安置无人机初始位置 实际上就是按比例显示F  这个函数不需要关心
% 他的工作就是 扫描 8*8 的矩阵,然后将矩阵中为 1 元素的位置按比例在图纸上用圆圈描绘出来
% 其中 两无人机的 位置宽带设置由 width 决定,如果 width = 10 ,则表示两无人机位置宽度为10个单位宽度
% 在该循环中 calc(i, j, width) 函数 是将 'F' 按比例放大并安置无人机到模型当中
% 其中 ID 的扫描顺序为: 第一行从左边第一列开始,到最后一列依次定义。
% 例如:array_f 中第一行第二列的 定义为 ID1;  array_f 中第一行第七列的 定义为 ID6; 以此类推
for i = 1: 8
  for j = 1: 8 
        % start 坐标
        if array_f(i, j) == 1
            % 做矩阵点位置应该实际场景
            [id_sta_addr(index, 1), id_sta_addr(index, 2)] = calc(i, j, width);
            % 安置飞机
            plot(id_sta_addr(index, 1), id_sta_addr(index, 2), 'bo');
            index = index + 1;            
        end
  end
end
    
% 临时变量  保存ID 变化的位置信息
temp_info = zeros(19, 2);  
​
​
% 算法部分  完成 my_function 函数即可
% temp_info 保存着各个ID的变化信息
temp_info = my_function(array_f, array_z);
​
% 将矩阵中各个 ID 的位置信息映射到 实际的位置上
% 其中 temp_info(id, 1) 表示的 id n 的 x 轴坐标; temp_info(id, 2)表示的 id n 的 y 轴坐标
for id=1:19
    [id_sto_addr(id, 1) , id_sto_addr(id, 2)] = calc(temp_info(id, 1), temp_info(id, 2), width);
end
​
​
pause(2);
​
​
​
% % 测试部分%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% id_sto_addr = id_sta_addr;
% 
% % calc(2, 2, width); 中(2,2)表示无人机终止位置坐标,width表示位宽
% %id_sto_addr(7, 1); 中(8,1)表示8 表示 ID, 1 表示 X坐标, 2 表示Y坐标
% % 表示 ID 7的点 移动到(2,2) 的位置
% [id_sto_addr(7, 1) , id_sto_addr( 7, 2)] = calc(2, 2, width);
% [id_sto_addr(8, 1) , id_sto_addr( 8, 2)] = calc(3, 5, width);
% [id_sto_addr(9, 1) , id_sto_addr( 9, 2)] = calc(2, 6, width);
% [id_sto_addr(10, 1), id_sto_addr(10, 2)] = calc(4, 4, width);
% [id_sto_addr(11, 1), id_sto_addr(11, 2)] = calc(5, 4, width);
% [id_sto_addr(12, 1), id_sto_addr(12, 2)] = calc(8, 5, width);
% [id_sto_addr(13, 1), id_sto_addr(13, 2)] = calc(7, 6, width);
% [id_sto_addr(14, 1), id_sto_addr(14, 2)] = calc(8, 6, width);
% [id_sto_addr(16, 1), id_sto_addr(16, 2)] = calc(8, 1, width);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
​
​
%计算 各个无人机运行时间
% 假设无人机 开始位置设置为(x1, y1),终止位置设置为(x2,y2) 则他们运行时间为:
%                   t =  sqrt((x1 - x2)^2 + (y1 - y2)^2) / v  (时间 = 路程 / 速度)
% 其中 sqrt 表示开根号
% 这里 使用一个循环则表示计算各个无人机 改变位置需要消耗的时间
 for i=1:19
  id_tm(i)=sqrt((id_sto_addr(i, 1)-id_sta_addr(i, 1))^2 + (id_sto_addr(i, 2)-id_sta_addr(i, 2))^2) / v; %计算这个 Step 的移动时间
 end
​
 % 前面使用的 for 循环已经 计算出所有飞机飞行或改变位置的消耗时间
 % 由于无人机的时间有长有短,所以要得到最后变化的队形,肯定是按照最长时间计算变化时间
 %这里就是获取最大的变化时间
max_tm = max(id_tm);
​
% 该部分有两重循环, 第一重循环是表示 时间 扫描表示的是时间更新 其中 dt 表示无人机飞行过程中的更新时间 默认dt = 1
% 如果 dt = 1则表示 1s 更新一次飞行状态
% 可以不用理会 这个  写算法用不到
 for t=0:dt:max_tm
     
    % 扫描19个点
    for index = 1:19
        % 单点移动
        [id_cur_addr(index, 1), id_cur_addr(index, 2)] = move(index,       ...
                                                              id_sta_addr, ...
                                                              id_sto_addr, ...
                                                              id_cur_addr, ...
                                                              t,           ...
                                                              id_tm,       ...
                                                              v);
​
    end
    
    % 停顿一段时间显示
    pause(0.1);

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]张思宇.多无人机协同航迹规划及其控制方法研究[D].北京理工大学,2016.

[2]卢燕梅,宗群,张秀云,鲁瀚辰,张睿隆.集群无人机队形重构及虚拟仿真验证[J].航空学报,2020,41(04):248-259.

🌈4 Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值