【无人机】基于A星算法解决无人机二维路径规划问题含matlab代码

简介: 【无人机】基于A星算法解决无人机二维路径规划问题含matlab代码

 1 内容介绍

无人机路径规划一直是一个比较热门的话题,A星算法以及其扩展性算法被广范地应用于求解无人机的最优路径.该文在研究无人机路径规划算法中,详细阐述了传统A星算法的基本原理,并通过栅格法分割了机器人路径规划区域,利用MATLAB仿真平台生成了无人机二维路径仿真地图对其进行仿真实验,并对结果进行分析和研究,为今后进一步的研究提供经验.

image.gif编辑

image.gif编辑

image.gif编辑

2 仿真代码

%%%%%%%****Astar算法

clc;

clear all;

close all

MAX_X=30;

MAX_Y=10;

MAX_VAL=20;

MAP=2*(ones(MAX_X,MAX_Y));

%初始化地图

j=0;

x_val = 1;

y_val = 1;

axis([1 MAX_X 1 MAX_Y])

% set(gca,'XTick',0:1:30);

hold on;

%%%%%%%%%%%%%%%%%%%%%%%二维地图生成完毕%%%%%%%%%%%%%

xStart=2;%起始地点

yStart=3;

MAP(xStart,yStart)=1;

plot(xStart+0.5,yStart+0.5,'go');

text(xStart+1,yStart+.5,'起始点')

%设置障碍

for xval=1:30;

   for yval=8:10;  

   

   MAP(xval,yval)=-1;%

   rectangle('Position',[xval,yval,1,1],'facecolor',[0.1,0.2,0.3])

   end

end

for xval=1:30;

   for yval=1:2;  

   

   MAP(xval,yval)=-1;%

   rectangle('Position',[xval,yval,1,1],'facecolor',[0.1,0.2,0.3])

   end

end

%设置障碍的长度、高度

for xval=8:18;

   for yval=3:5;  

   

   MAP(xval,yval)=-1;%

   rectangle('Position',[xval,yval,1,1],'facecolor',[0.1,0.2,0.3])

   end

end

%设定目的坐标

xTarget=29;%

yTarget=3;

plot(xTarget+0.5,yTarget+0.5,'ro');

text(xTarget+1,yTarget+.5,'结束点')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%开始执行A*算法计算最优化路径%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

OPEN=[];

CLOSED=[];

%载入地图数据

k=1;

for i=1:MAX_X

   for j=1:MAX_Y

       if(MAP(i,j) == -1)

           CLOSED(k,1)=i;

           CLOSED(k,2)=j;

           k=k+1;

       end

   end

end

CLOSED_COUNT=size(CLOSED,1);

%设置出发位置

xNode=xStart;

yNode=yStart;

OPEN_COUNT=1;

path_cost=0;

goal_distance=distance(xNode,yNode,xTarget,yTarget);

OPEN(OPEN_COUNT,:)=insert_open(xNode,yNode,xNode,yNode,path_cost,goal_distance,goal_distance);

OPEN(OPEN_COUNT,1)=0;

CLOSED_COUNT=CLOSED_COUNT+1;

CLOSED(CLOSED_COUNT,1)=xNode;

CLOSED(CLOSED_COUNT,2)=yNode;

NoPath=1;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 算法开始计算

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

while((xNode ~= xTarget || yNode ~= yTarget) && NoPath == 1)

exp_array=expand_array(xNode,yNode,path_cost,xTarget,yTarget,CLOSED,MAX_X,MAX_Y);

exp_count=size(exp_array,1);

%更新数据

for i=1:exp_count

   flag=0;

   for j=1:OPEN_COUNT

       if(exp_array(i,1) == OPEN(j,2) && exp_array(i,2) == OPEN(j,3) )

           OPEN(j,8)=min(OPEN(j,8),exp_array(i,5));

           if OPEN(j,8)== exp_array(i,5)

               

               OPEN(j,4)=xNode;

               OPEN(j,5)=yNode;

               OPEN(j,6)=exp_array(i,3);

               OPEN(j,7)=exp_array(i,4);

           end;

           flag=1;

       end;

   end;

   if flag == 0

       OPEN_COUNT = OPEN_COUNT+1;

       OPEN(OPEN_COUNT,:)=insert_open(exp_array(i,1),exp_array(i,2),xNode,yNode,exp_array(i,3),exp_array(i,4),exp_array(i,5));

    end;%

end;

 index_min_node = min_fn(OPEN,OPEN_COUNT,xTarget,yTarget);

 if (index_min_node ~= -1)    

 

  xNode=OPEN(index_min_node,2);

  yNode=OPEN(index_min_node,3);

  path_cost=OPEN(index_min_node,6);%更新路径代价值

 

 CLOSED_COUNT=CLOSED_COUNT+1;

 CLOSED(CLOSED_COUNT,1)=xNode;

 CLOSED(CLOSED_COUNT,2)=yNode;

 OPEN(index_min_node,1)=0;

 else

     

     NoPath=0;

 end;

end;

%%%%%%输出最优化路径坐标

i=size(CLOSED,1);

Optimal_path=[];

xval=CLOSED(i,1);

yval=CLOSED(i,2);

i=1;

Optimal_path(i,1)=xval;

Optimal_path(i,2)=yval;

i=i+1;

if ( (xval == xTarget) && (yval == yTarget))

   inode=0;

 

  parent_x=OPEN(node_index(OPEN,xval,yval),4);

  parent_y=OPEN(node_index(OPEN,xval,yval),5);

 

  while( parent_x ~= xStart || parent_y ~= yStart)

          Optimal_path(i,1) = parent_x;

          Optimal_path(i,2) = parent_y;

         

          inode=node_index(OPEN,parent_x,parent_y);

          parent_x=OPEN(inode,4);

          parent_y=OPEN(inode,5);

          i=i+1;

   end;

   

   

else

   

   path_cost=1000000;%不存在最优化路径

end

 

j=size(Optimal_path,1);

Optimal_path(j,1)=xStart;

Optimal_path(j,2)=yStart;

 

x=Optimal_path(:,1)+0.5;

y=Optimal_path(:,2)+0.5;

for i=2:length(y)-1;

    if y(i)>yTarget+0.5;

           y(i)=y(i)+0.5;

    end

end

xi=Optimal_path(end,1)+0.5:0.1:Optimal_path(1,1)+0.5;  

yi=spline(x,y,xi);

plot(xi,yi,'r','LineWidth',1);

3 运行结果

image.gif编辑

4 参考文献

[1]董箭, 初宏晟, 卢杬樟,等. 基于A星算法的无人机路径规划优化模型研究[J]. 海洋测绘, 2021, 41(3):5.

[2]周宇杭, 王文明, 李泽彬,等. 基于A星算法的移动机器人路径规划应用研究[J]. 电脑知识与技术:学术版, 2020, 16(13):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

相关文章
|
1月前
|
算法
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
45 0
|
30天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
33 0
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
39 1
|
3天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
7天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
14 0
|
10天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
282 9
|
16天前
|
存储 人工智能 机器人
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】

热门文章

最新文章