%% 基于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
海神之光
- 粉丝: 5w+
- 资源: 7128
最新资源
- 基于matlab的视频镜头检测、视频关键帧提取源代码+实验报告PPT
- 中国法研杯法律智能源码+设计文档.zip
- 智能循迹避障小车-基于树莓派图像识别(含源码+项目说明+硬件设计).zip
- 中文短文本实体链指技术-CCKS2019比赛技术创新奖解决方案(基于Python,含源码+项目说明).zip
- 智慧医疗在线挂号小程序(前后端分离,支持疫苗预约等模块,含源码+项目说明).zip
- 智能门禁系统-基于STM32的多模态身份验证(含人脸识别+蓝牙APP+RFID+密码锁,最新开发).zip
- 智能教室管理系统-基于龙芯2K1000处理器(含源码+项目说明+硬件设计).zip
- 智能售货系统-基于Qt的饮料售卖机(含源码+项目说明+硬件设计).zip
- 知识图谱医疗诊断问答系统python源码+项目说明(2024毕设).zip
- 指标体系管理系统-基于Java实现(含源码+项目说明+课设报告).zip
- Java 代码辅助开发工具
- 智慧路灯管理系统-基于MQTT协议+物联网云平台(含源码+项目说明+部署指南).zip
- 掌静脉识别系统-手势识别与特征提取(含源码+项目说明+GUI界面设计).zip
- 智慧养老系统-基于情感分析(实训项目,含源码+项目说明+设计文档).zip
- 证券交易系统开发(含源码+项目说明+设计文档).zip
- 征信系统-基于Hyperledger Fabric技术打造可靠信用评价体系(含源码及设计文档).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈