欢迎光临散文网 会员登陆 & 注册

A星(A*、A Star)路径规划的代码 从matalb移植到北太天元

2023-06-10 12:23 作者:卢朓  | 我要投稿

% 北太天元上实现A星算法,找到两点之间的最短路径,两点之间可能有障碍物,

% 两间之间的道路只能是水平或者竖直,每一步的距离一定要是dL(这里是整数1)

% 脚步不能落在障碍物上

clear all;

clf

close all


load_plugin("time")


%hold on;


%设置探索区域的边界

Estart_x = 0; Estart_y = 0;

Weight = 40; High = 40;

dL = 1;  % 每一步走的最小距离


%% 生成所有的网格点

xL = 0:dL:Weight;

yL = 0:dL:High;

[XL , YL] = meshgrid(xL,yL);  %

C = zeros(size(XL));   %标记点是否可以到达

%--------------------%

%边界标记为100

C(1,:) = 100;  C(:,1) = 100; 

C(end,:) = 100; C(:,end) = 100;


hold on

%%障碍物标记为80

%--------------------%

barrier_1 = 5:30; %障碍物的横坐标是从20到30

a1(1:length(barrier_1)) = 20; % 障碍物的纵坐标

C(barrier_1,20)=80; %

plot(barrier_1,a1,'k-*');

axis([Estart_x-5 Weight 0 High]);

axis equal; 

%--------------------%


global startx

global starty

global endx;

global endy;

startx = 1 ;

starty = 2;

endx = 30;

endy = 35;


tic;

%% A星算法计算最短距离

[dis,road] = Axing_fun(startx,starty,endx,endy,Estart_x,Estart_y,Weight,High,C);


disp("A星算法计算的时间是");

toc

fprintf('得到的最短距离是%d\n',dis);


line(road(:,1),road(:,2))

text(road(1,1),road(1,2),'起点')

text(road(end,1),road(end,2),'终点')

hold off


%x 是一个cell,每一个元素是一个1x1的double

function A = cell2mat(x)

   [m,n] = size(x);

   A = zeros(m,n);

   for k=1:m

         for l=1:n

            A(k,l) = x{k,l};

         end

   end

end


function A = sortrows(B, k)

      [m,n] = size(B);

      if( m <= 1 || k<0 || k >n)

         A = B;

         return

      end

    col_k = cell2mat(B(:,k));   


      [~, ind] = sort(col_k);

      A = B(ind,:);

end   




A星(A*、A Star)路径规划的代码 从matalb移植到北太天元的评论 (共 条)

分享到微博请遵守国家法律