📄 vehic_guide.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vehicle guidance for obstacle avoidance example%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kevin Passino% Version: 1/25/01%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear % Initialize memoryxmin=[0; 0]; % Set edges of region want to search inxmax=[30;30];Nsteps=500; % Maximum number of steps to produce% Next set the parameters of the vehicle:lambda=0.1; % Step size to take in chosen direction at each moveNs=16; % Number of points on circular pattern to senser=1; % Sensing radiusxs=0*ones(2,Ns); % InitializeJo(:,1)=0*ones(Ns,1);Jg(:,1)=0*ones(Ns,1);J(:,1)=0*ones(Ns,1);theta(:,1)=0*ones(Ns,1);for m=2:Ns % Compute the angles to be used around the circle theta(m,1)=theta(m-1,1)+(pi/180)*(360/Ns); end% Goal position of vehiclexgoal=[25; 25];% Initial vehicle positionx=[5; 5];% Weighting parameters for planning (sets priority for being aggresive% in the direction of the goal vs. avoiding obstaclesw1=1;w2=1.0000e-04;% Allocate memory x(:,2:Nsteps)=0*ones(2,Nsteps-1);% The obstacles:figure(1)clf% Plot initial and final positionsplot(5,5,'s',25,25,'x')axis([0 30 0 30])hold onxlabel('x');ylabel('y');title('Obstacles (o), initial vehicle (square) and goal (x) positions');hold on% Plot obstacle positions (sets obstaclefunction)plot(20,15,'o',8,10,'o',10,10,'o',12,10,'o',24,20,'o',18,20,'o')hold off%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot the functions:xx=0:31/100:30; % For our function the range of values we are consideringyy=xx;% Compute the obstacle and goal functionsfor jj=1:length(xx) for ii=1:length(yy) zz(ii,jj)=obstaclefunction([xx(jj);yy(ii)],w1); endendfor jj=1:length(xx) for ii=1:length(yy) zzz(ii,jj)=goalfunction([xx(jj);yy(ii)],xgoal,w2); endendfigure(2)clfsurf(xx,yy,zz);%colormap(jet)% Use next line for generating plots to put in black and white documents.colormap(white);xlabel('x');ylabel('y');zlabel('w_1J_o');title('Function w_1J_o showing (scaled) obstacle function values');figure(3)clfcontour(xx,yy,zz,25)colormap(jet)% Use next line for generating plots to put in black and white documents.%colormap(white);xlabel('x');ylabel('y');title('Contour map of w_1J_o and initial (square) and goal (x) positions');hold on% Plot initial and final positionsplot(5,5,'s',25,25,'x')hold offfigure(4)clfsurf(xx,yy,zzz);view(82,26);%colormap(jet)% Use next line for generating plots to put in black and white documents.colormap(white);xlabel('x');ylabel('y');zlabel('w_2J_g');title('Goal function (scaled)');%rotate3dfigure(5)clfcontour(xx,yy,zzz,25)colormap(jet)% Use next line for generating plots to put in black and white documents.%colormap(gray);xlabel('x');ylabel('y');title('Contour function of w_2J_g and initial (square) and goal (x) positions');hold on% Plot initial and final positionsplot(5,5,'s',25,25,'x')hold offfigure(6)clfcontour(xx,yy,zz+zzz,50)colormap(jet)% Use next line for generating plots to put in black and white documents.%colormap(gray);xlabel('x');ylabel('y');title('J=w_1J_o + w_2J_g and initial (square) and goal (x) positions');hold on% Plot initial and final positionsplot(5,5,'s',25,25,'x')hold off%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start the simulation loop for k=1:Nsteps % Use projection to keep in boundaries (like hitting a wall and staying at it) x(:,k)=min(x(:,k),xmax); x(:,k)=max(x(:,k),xmin); % Sense points on circular pattern for m=1:Ns xs(:,m)=[x(1,k)+r*cos(theta(m,1)); x(2,k)+r*sin(theta(m,1))]; % Point on circular pattern Jo(m,1)=obstaclefunction(xs(:,m),w1); % Compute the obstace function (what is % sensed at each sensed point Jg(m,1)=goalfunction(xs(:,m),xgoal,w2); % Compute how well each point % moves toward the goal J(m,1)=Jo(m,1)+Jg(m,1); % Compute function for opt. in planning end % Next pick the best direction [val,bestone]=min(J); % Then, update the vehicle position (pick best direction and move step of lambda that way) x(:,k+1)=[x(1,k)+lambda*cos(theta(bestone,1)); x(2,k)+lambda*sin(theta(bestone,1))]; % But the vehicle is in a real environment so when it tries to move to that point it % only gets to near that point. To simulate this we perterb the final position. Deltalambda=0.1*lambda*(2*rand-1); % Set the length perturbation to be up to 10% of the step size Deltatheta=2*pi*(2*rand-1); % Set to be 360deg variation from chosen direction x(:,k+1)=[x(1,k+1)+Deltalambda*cos(theta(bestone,1)+Deltatheta); ... x(2,k+1)+Deltalambda*sin(theta(bestone,1)+Deltatheta)]; end % End main loop...%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Next, provide some plots of the results of the simulation.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%t=0:Nsteps; % For use in plottingfigure(7) clfplot(t,x(1,:),'k-',t,x(2,:),'k--')ylabel('x, y')xlabel('Iteration, k')title('Vehicle trajectory (x solid, y dashed)')figure(8) clfcontour(xx,yy,zz,25)colormap(jet)% Use next line for generating plots to put in black and white documents.%colormap(gray);xlabel('x');ylabel('y');title('Vehicle path to avoid obstacles and reach goal');hold onplot(x(1,:),x(2,:),'r-')plot(5,5,'s',25,25,'x')hold off%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -