【无人机】基于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电子书和数学建模资料

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值