%% 基于a星算法的机器人动态避障处理
clc
clear all
close all
%% 清空变量
Xminglobal=0;
Xmaxglobal=200;
Yminglobal=0;
Ymaxglobal=200;
%% 障碍物
statobs1=[20 30 10 20];
rectangle('Position',statobs1,'FaceColor',[0.4 0.6 0.7]);
hold on
axis([0 200 0 200])
statobs2=[50 10 10 20];
rectangle('Position',statobs2,'FaceColor',[0.4 0.6 0.7]);
hold on
axis([0 200 0 200])
statobs3=[70 40 10 20];
rectangle('Position',statobs3,'FaceColor',[0.1 0.3 0.7]);
hold on
axis([0 200 0 200])
statobs4=[60 80 10 10];
rectangle('Position',statobs4,'FaceColor',[0.1 0.3 0.7]);
hold on
axis([0 200 0 200])
statobs5=[160 180 10 20];
rectangle('Position',statobs5,'FaceColor',[1 0 0]);
hold on
axis([0 200 0 200])
statobs6=[100 130 10 20];
rectangle('Position',statobs6,'FaceColor',[1 0 0]);
hold on
axis([0 200 0 200])
statobs7=[100 70 10 10];
rectangle('Position',statobs7,'FaceColor',[1 0 0]);
hold on
axis([0 200 0 200])
statobs8=[140 120 10 10];
rectangle('Position',statobs8,'FaceColor',[0.1 0.3 0.7]);
hold on
axis([0 200 0 200])
START_X=10;
START_Y=90;
GOAL_X=180;
GOAL_Y=30;
k=plot(START_X,START_Y,'bx','MarkerSize',10);
set(k,'XData',START_X,'YData',START_Y);
u=plot(GOAL_X,GOAL_Y,'bx','MarkerSize',10);
set(u,'XData',GOAL_X,'YData',GOAL_Y);
grid_len=10;
MAP_IDX=1;
for i=0:grid_len:Xmaxglobal
for j=0:grid_len:Ymaxglobal
MAP(MAP_IDX, 1)=i;
MAP(MAP_IDX, 2)=j;
MAP(MAP_IDX, 3)=2;
MAP_IDX=MAP_IDX+1;
end
end
MAP_IDX=MAP_IDX-1;
OPEN=[];
CLOSED=[];
CLOSED_IDX=1;
OPEN_IDX=1;
OBS_COORD_LIST=[];
OBS_IDX=1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs1(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs1(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs1(1)+statobs1(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs1(2)+statobs1(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs1(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs1(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs1(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs1(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs1(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs1(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs1(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs1(2)+20;% 20,40
OBS_IDX=OBS_IDX+1;
%obstacle 2
OBS_COORD_LIST(OBS_IDX, 1)=statobs2(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs2(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs2(1)+statobs2(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs2(2)+statobs2(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs2(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs2(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs2(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs2(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs2(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs2(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs2(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs2(2)+20;% 20,40
OBS_IDX=OBS_IDX+1;
%obstacle 3
OBS_COORD_LIST(OBS_IDX, 1)=statobs3(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs3(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs3(1)+statobs3(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs3(2)+statobs3(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs3(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs3(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs3(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs3(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs3(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs3(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs3(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs3(2)+20;% 20,40
OBS_IDX=OBS_IDX+1;
%obstacle 4
OBS_COORD_LIST(OBS_IDX, 1)=statobs4(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs4(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs4(1)+statobs4(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs4(2)+statobs4(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs4(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs4(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs4(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs4(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs4(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs4(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs4(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs4(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
%obstacle 5
OBS_COORD_LIST(OBS_IDX, 1)=statobs5(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs5(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs5(1)+statobs5(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs5(2)+statobs5(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs5(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs5(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs5(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs5(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs5(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs5(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs5(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs5(2)+20;% 20,40
OBS_IDX=OBS_IDX+1;
%obstacle 6
OBS_COORD_LIST(OBS_IDX, 1)=statobs6(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs6(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs6(1)+statobs6(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs6(2)+statobs6(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs6(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs6(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs6(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs6(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs6(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs6(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs6(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs6(2)+20;% 20,40
OBS_IDX=OBS_IDX+1;
%obstacle 7
OBS_COORD_LIST(OBS_IDX, 1)=statobs7(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs7(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs7(1)+statobs7(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs7(2)+statobs7(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs7(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs7(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs7(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs7(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs7(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs7(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs7(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs7(2)+10;% 20,40
%obstacle 8
OBS_COORD_LIST(OBS_IDX, 1)=statobs8(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs8(2);% 20,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs8(1)+statobs8(3);OBS_COORD_LIST(OBS_IDX, 2)=statobs8(2)+statobs8(4);% 30,50
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs8(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs8(2);% 30,30
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs8(1)+10;OBS_COORD_LIST(OBS_IDX, 2)=statobs8(2)+10;% 30,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs8(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs8(2)+10;% 20,40
OBS_IDX=OBS_IDX+1;
OBS_COORD_LIST(OBS_IDX, 1)=statobs8(1);OBS_COORD_LIST(OBS_IDX, 2)=statobs8(2)+10;% 20,40
Optimal_path=a_star(OPEN, CLOSED, OPEN_IDX, CLOSED_IDX, OBS_COORD_LIST, OBS_IDX, MAP, MAP_IDX, START_X, START_Y, GOAL_X, GOAL_Y, Xminglobal, Xmaxglobal, Yminglobal, Ymaxglobal);
Optimal_path=flipud(Optimal_path);
path=[];
%state lattice primitive decision
curr_heading=0;
TurnRadius = 2;
PathStep = -1;
t1=0;
t2=5;
v1=4;
v2=4;
Optimal_path(1,3)=0;
Optimal_path(1,4)=0;
manu='x';
%dynamic obs path
obsx0=130;
obsy0=120;
obsvx0= 0;
obsvy0=-90/60;
dt=0.1;
DYN_IDX=1;
for tobs=0:dt:70
obsx0=obsx0 + obsvx0*dt;
obsy0=obsy0 + obsvy0*dt;
%disp(obsy0);
dyn_obs_path(DYN_IDX,1)= obsx0;
dyn_obs_path(DYN_IDX,2)= obsy0;
dyn_obs_path(DYN_IDX,3)= tobs;
DYN_IDX=DYN_IDX+1;
end
for OPT_IDX=1:size(Optimal_path,1)-1
Optimal_path(OPT_IDX,4)=t1;
disp(OPT_IDX);
disp('!!!!!!!!!!!!!!!');
if OPT_IDX<size(Optimal_path,1)-1
[manu, next_manu]=find_direction(Optimal_path(OPT_IDX,1),Optimal_path(OPT_IDX,2),Optimal_path(OPT_IDX+1,1),Optimal_path(OPT_IDX+1,2),Optimal_path(OPT_IDX+2,1),Optimal_path(OPT_IDX+2,2));
d
没有合适的资源?快使用搜索试试~ 我知道了~
【路径规划】基于matlab A_star算法机器人动态避障【含Matlab源码 2571期】.zip
共22个文件
m:19个
png:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 168 浏览量
2024-09-14
19:45:13
上传
评论
收藏 63KB ZIP 举报
温馨提示
CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 智能优化算法避障路径规划系列程序定制或科研合作方向: 4.4.1 遗传算法GA/蚁群算法ACO避障路径规划 4.4.2 粒子群算法PSO避障路径规划 4.4.3 灰狼算法GWO/狼群算法WPA避障路径规划 4.4.4 鲸鱼算法WOA/麻雀算法SSA避障路径规划 4.4.5 萤火虫算法FA/差分算法DE避障路径规划
资源推荐
资源详情
资源评论
收起资源包目录
【路径规划】基于matlab A_star算法机器人动态避障【含Matlab源码 2571期】.zip (22个子文件)
【路径规划】基于matlab A_star算法机器人动态避障【含Matlab源码 2571期】
dubins_curve.m 7KB
find_direction.m 3KB
check_stop_avoidance.m 661B
运行结果1.png 15KB
main_plot_trail.m 1KB
dubins_core.m 6KB
expand_array.m 2KB
min_fn.m 1KB
insert_open.m 596B
dyn_coll_detection.m 645B
main_Dubinstime.m 715B
find_heading.m 2KB
distance.m 76B
main_astar.m 17KB
运行结果2.png 15KB
check_for_dyn_obs.m 217B
a_star.m 4KB
find_map_idx.m 237B
运行结果3.png 15KB
node_index.m 296B
non_holo_path.m 1KB
main_penzhuang.m 12KB
共 22 条
- 1
资源评论
海神之光
- 粉丝: 5w+
- 资源: 6110
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功