基于MATLAB的无人机路径规划设计

目录
一、研究目标 3
(一)课题研究目的: 3
(二)课题研究目标: 3
二、研究开发方案 3
三、关键技术 4
四、研究开发计划 4
(一)随机栅格地图的建立 4
(二)学习复现A算法 5
(三)将建立栅格地图和A
算法结合起来 6
(四)学习如何用MATLAB制作动图 7
(五)将简单的A寻路制作成动图显示 8
(六)动态扫描与死角退回 9
(七)升级雷达扫描方式 10
五、程序实现 12
(一)代码1 12
(二)代码2 14
(三)代码3 17
(四)调用函数myAstar 18
(五)调用函数goahead 19
(六)调用函数Drawapath 20
(七)调用函数Drawamap 20
(八)调用函数makeaGIF 21
六、结果 22
七、参考文献 23
一、研究目标
(一)课题研究目的:
无人机路径规划,无人机由起点出发向终点飞行,事先不知道环境地图的分布;假设无人机装备了激光雷达,能够探测一定范围的障碍物信息;利用A
算法规划当前认为可行的路径,不断探测障碍物,并不断规划路径使无人机最终到达目标点。
(二)课题研究目标:
①实现最基本的地图加载、显示;
②实现路径规划与显示,在前面程序的基础上,实现A * 算法,在这个阶段可以假设环境地图都已知,规划全局的地图并显示;
③实现激光雷达的扫描,在上述程序基础上,模拟激光雷达扫描。模拟从当前位置发射多条射线,判断障碍物是否在射线上并将结果进行显示;
④动态路径规划,在上述的成果基础上,设计动态路径规划的算法并实现。
二、研究开发方案
本课题项目要求实现无人机的感知、路径规划,主要目的在于让我们理解无人机系统的感知与控制。而路径规划的前提是感知,如何设计感知方法,更好的模拟无人机雷达扫描策略是重点,所以我们的重心应该放在扫描策略的制定上,而之后的路径规划我们可以套用A算法并加以改进,因为原本的A算法是针对已知地图的一个“静态”的路径规划,而我们现在的无人机路径规划是一个逐步探索计算的过程,是具有“动态”属性的。
所以最关键的点在于如何设计雷达扫描机制的基础上改进A算法。
三、关键技术
1、栅格地图的构建;
2、雷达扫描方式的设计;
3、A
算法的改进。
四、研究开发计划
本项目首先使用MATLAB实现,确保项目的顺利完成,力求完美完成,在此基础之上利用剩余时间进行C++的学习,尽力使用C++做出一些成果。以下部分按照时间节点进行阐述。

function [map,explore,path,nowlocation,barrier]=myAstar(explore,true_neighbor,path,barrier,nowlocation)
    %自己写的A*算法,根据上述函数的提供进行自己A*的计算
    worth = []; worth1 = []; worth2 = []; worth3  = [];    %设置每步的综合评价值
    n=size(explore,1);                                     %获取现在已经探索的路径有多少
    for i=1:size(true_neighbor,1)                          %将此步中获得的探索值写入探索路径矩阵,用来画图
        explore(n+i,:)=true_neighbor(i,:);
    end

    for i=1:size(true_neighbor,1)                          %为当前可选择的路进行排序
        worth(i,:) = [i, true_neighbor(i,3)+true_neighbor(i,4) , true_neighbor(i,4)];
    end
    
    %此处是第二个代码的核心修改
    if size(worth,1)==0
        %将此步骤移除路径矩阵,并将此处认定为障碍物,返回上一步,重新规划;
        barrier(path(size(path,1),:))=0;                         %将死角路径标记为障碍物
        path(size(path,1),:)=[];                                 %将次步骤从路径集合中删去
        n=size(path,1);                                     
        nowlocation(1,1) = path(n,1);                            %退回到上一步路径
        nowlocation(1,2) = path(n,2);
        
    else
        worth1 = sortrows(worth,2);  %此处仍需再排一次。
        worth2(1,:)=worth1(1,:);
        for i=1:size(worth1)-1
            if worth1(i+1,2)~=worth1(i,2)
                break
            else
                worth2(i+1,:)=worth1(i+1,:);
            end
        end
        worth3=sortrows(worth2,3);
                
            
        %更新当前位置坐标
        nowlocation(1,1) = true_neighbor(worth3(1),1);
        nowlocation(1,2) = true_neighbor(worth3(1),2);
        barrier(nowlocation(1,1),nowlocation(1,2))=0.5;          %并将其进行标记,避免返回原来走过的路径

        n=size(path,1);                                          %获取现在已经走过的路径有多少,为后面的撞墙返回提供索引
        path(n+1,:)=[nowlocation(1,1),nowlocation(1,2)];

    end
    map = barrier;
    return
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shejizuopin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值