赞
踩
目录
一、研究目标 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。