• 【无人机】基于Matlab模拟无人机群跟踪固定目标


    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

    🍎个人主页:Matlab科研工作室

    🍊个人信条:格物致知。

    更多Matlab仿真内容点击👇

    智能优化算法  神经网络预测 雷达通信  无线传感器

    信号处理 图像处理 路径规划 元胞自动机 无人机

    ⛄ 内容介绍

    最初,一架无人机盘旋飞行,试图找到一朵云,一旦找到它,它就会调用更多的无人机绕着云飞行,并跟踪对应于污染物浓度 1.0 的云的边界。目标是让无人机在云层周围均匀分布。每架无人机可以飞行 30 分钟,之后需要返回基地 (0,0) 充电。

    ​思路:为了在云周围均匀分布,无人机计算云的凸包(基于采样点)并根据其他无人机的位置加速/减速。如果云的周长变得太大,就会调用新的无人机绕云飞行。​ 避免碰撞​规则:为了实现这一点,将每架无人机建模为一个电子,每架无人机对所有其他无人机(足够接近)施加排斥力。

    ⛄ 部分代码

    function sim_start

        % load cloud data

        % choose a scenario

        % load 'cloud1.mat'

        close all;

        load 'cloud1.mat'

        % time and time step

        t = 0;

        dt = 1;

        last_launch = 1; %time when the last UAV was launched

        % open new figure window

        figure

        hold on % so each plot doesn't wipte the predecessor

        

        %create initial UAVs

        id_count = 1; %id for the next spawned UAV

        num_uavs = 1; %number of active UAVs

        uav(num_uavs,1) = UAVsim; 

        ang = rand*2*pi;

        uav(1) = UAVsim(0,0,ang,1);%x,y,ang,id

        

        

        old_msg = zeros(num_uavs,5); %keeps the messages that have to be processed for next iterration

        spawn_new_uav = false; %if this becomes true, launch a new uav

        

        for kk=1:3600

            new_msg = zeros(num_uavs,5); %create an empty matrix for the new messages

            t = t + dt;

            

            spawn_new_uav = false;

            i=1;

            while i<=num_uavs

                [x,y,p,id,new_uav] = uav(floor(i)).step(dt,t,cloud,old_msg);

                new_msg(i,1:5) = [x,y,p,id,new_uav]; %get the message from the current UAV

                if (new_uav)

                    spawn_new_uav = true;

                end

                if uav(i).state == 5

                    %if UAV ran out of battery

                    uav(i)=[];%remove the current UAV

                    i=i-1;

                    num_uavs = num_uavs-1;

                end

                i=i+1;

            end

            if num_uavs<1

                %sanity check

                return;

            end

            

            %plot the UAVs and the cloud

            cla

            title(sprintf('t=%.1f secs pos=(%.1f, %.1f)  Concentration=%.2f',t, uav(1).get_real_x,uav(1).get_real_y,uav(1).p))

            

            for i=1:num_uavs

                text(uav(i).get_real_x()-14, uav(i).get_real_y()-5,sprintf('%d',uav(i).id));

                if uav(i).t_alive>15

                    %I assumed that during take off, the UAV does not need to

                    %do collision avoidance (until it reaches the required

                    %height) so I do not plot a circle around it for the first

                    %15 seconds.

                    % this is useful in the case the cloud spreads over the

                    % base (0,0);

                    plot_circle(uav(i).get_real_x(),uav(i).get_real_y(),25);

                end

            end

            cloudplot(cloud,t);

            old_msg = new_msg;

            if spawn_new_uav && (kk-last_launch>25)

                last_launch = kk+1;

                num_uavs = num_uavs+1;

                id_count = id_count+1;

                ang = rand*2*pi;

                uav = [uav;UAVsim(0,0,ang,id_count)];

            end

        end

    end

    function plot_circle(x,y,r)

        %plots a circle at (x,y) corrdinates with radius r;

        %quality of the plotted circle is not very good but it is decent enough;

        ang = 0:0.5:2*pi;

        xp = r*cos(ang);

        yp = r*sin(ang);

        plot(x+xp,y+yp);

    end

    ⛄ 运行结果

    ⛄ 参考文献

    [1]李文超, 袁冬莉. 基于机动目标模型的无人机视场跟踪仿真研究[J]. 计算机测量与控制, 2011, 19(2):4.

    [2]蔡中轩. 无人机群体分布式导引关键技术研究与系统实现[D]. 国防科技大学, 2017.​

    ❤️ 关注我领取海量matlab电子书和数学建模资料

    ❤️部分理论引用网络文献,若有侵权联系博主删除

  • 相关阅读:
    信创云:打造自主可控云基础设施 | 厂商征集
    微信小程序使用echarts实现条形统计图功能
    Java 复习笔记 - 常见算法:排序算法
    第13章 类继承
    Mysql
    SpringMVC入门案例
    多叉树组合运算(未完待续)
    基于Python+djangoWeb的校园信息化统计平台
    javaScript进阶webAPI web前端api进阶DOM、BOM学习笔记day01
    Java实现常见排序算法
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/127115344