📄 synnpath1.asv
字号:
function main()
%算法来源于Real-time Path Planning in Dynamic Environments-a Comparison of Three
%Neural
N=50; %栅格数
V=100; %神经元外部输入
SPX=0.1; %出发点坐标
SPY=0.2;
TPX=0.9; %目标点坐标
TPY=0.9;
axis([0 1 0 1])
axis on
hold on
HandleStart=line([SPX SPX],[SPY SPY]); %设置开始点
HandleTarget=line([TPX TPX],[TPY TPY]); %设置目标点
set(HandleStart,'marker','pentagram','color',[0 0 0])
set(HandleTarget,'marker','*','color','r')
%Set the position of the Obstacle
X=[0.15 0.2];
Y=[0.8 0.8];
area(X,Y,0.3,'FaceColor',[0 0 0])
X=[0.4 0.6];
Y=[0.7 0.7];
area(X,Y,0.65,'FaceColor',[0 0 0])
X=[0.55 0.6];
Y=[0.65 0.65];
area(X,Y,0.4,'FaceColor',[0 0 0])
X=[0.8 0.9];
Y=[0.8 0.8];
area(X,Y,0.2,'FaceColor',[0 0 0])
%初始化移动障碍物
tY=36; %移动障碍物的y坐标
l=2; %从HM数组的第二个元素开始保存组成移动障碍物的物体的句柄
HM=0;
for t=20:30
HandleMO=line([t/N t/N],[tY/N tY/N]);
HM=[HM HandleMO];
set(HM(l),'marker','o','markersize',2,'linewidth',7,'color',[0 0 0])
l=l+1;
end
i=SPX*N; %将出发点坐标转换为坐标值
j=SPY*N;
WS=zeros(N,N); %初始化工作空间
II=zeros(N,N); %初始化外部输入空间
for t=1:100 %使从目标点出发向周围扩散的神经元势值到达出发点
II=CacuII(WS,N,V,TPX,TPY,0); %计算外部输入空间
WS=CacuWS(WS,N,II); %计算工作空间
if(WS(1,1)>0) break
end
end
%从目标点开始规划
l=18;
tt=1;%控制移动障碍物区域的外部输入
for t=1:200
if((mod(t,2)==0)&(t<=20)) %移动障碍物移动
for m=2:12 set(HM(m),'xdata',(l+m)/N,'ydata',tY/50); end
l=l-1;
tt=tt+1;
end
II=CacuII(WS,N,V,TPX,TPY,tt); %重新计算神经元外部输入空间
WS=CacuWS(WS,N,II); %重新计算神经元活性值空间
%爬山法搜索周围势值最大的神经元作为下一个神经元);
MaxMin=[WS(i-1,j) WS(i-1,j+1) WS(i,j+1) WS(i+1,j+1) WS(i+1,j) WS(i+1,j-1) WS(i,j-1) WS(i-1,j-1)];
Max=WS(i-1,j);
m=1;
for n=2:8
if(Max<MaxMin(n)) Max=MaxMin(n); m=n;
end
end
if(m==1) i=i-1; %当前神经元移动到下一个位置
elseif(m==2) i=i-1;j=j+1;
elseif(m==3) j=j+1;
elseif(m==4) i=i+1;j=j+1;
elseif(m==5) i=i+1;
elseif(m==6) i=i+1;j=j-1;
elseif(m==7) j=j-1;
else i=i-1;j=j-1;
end
pause(0.05)
HandleRobot=line([i/N,i/N],[j/N j/N]); %绘制下一个神经元
set(HandleRobot,'marker','o','color','g')
if(WS(i,j)==1) break
end
end
%计算神经元外部输入空间的函数
function II=CacuII(WS,N,V,TPX,TPY,tt)
for i=1:N
for j=1:N
if ((i>7)&(i<11)&(j>14)&(j<41)) II(i,j)=-V; %第1个障碍物区域的外部输入
elseif((i>19)&(i<31)&(j>32)&(j<36)) II(i,j)=-V;%第2个障碍物区域的外部输入
elseif((i>27)&(i<31)&(j>19)&(j<38)) II(i,j)=-V;%第3个障碍物区域的外部输入
elseif((i>39)&(i<46)&(j>9)&(j<41)) II(i,j)=-V;%第4个障碍物区域的外部输入
elseif ((i==1)|(i==N)|(j==1)|(j==N)) II(i,j)=-V;%边界的外部输入
elseif ((i==(TPX*N))&(j==(TPY*N))) II(i,j)=V; %目标点的外部输入
end
if((tt<=10)&(i>(20-tt))&(i<20)&(j>32)&(j<36)) II(i,j)=-V; end
end
end
%计算工作环境状态的函数
function WS=CacuWS(WS,N,II)
Tij1=exp(-10);%神经网络权重
Tij2=exp(-100);
a=0.5; %g函数斜率
for i=2:N-1
for j=2:N-1
u=Tij1*(WS(i-1,j)+WS(i,j+1)+WS(i+1,j)+WS(i,j-1))+Tij2*(WS(i-1,j+1)+WS(i+1,j+1)+WS(i+1,j-1)+WS(i-1,j-1));
u=u+II(i,j);
if (u<=0) WS(i,j)=0;
elseif (u>=1) WS(i,j)=1;
else WS(i,j)=a*u;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -