%初始化leader 状态;
leader.w=0.6;
leader.v=0.75;
leader.theta=0;%leader 的航向角;
% leader.beta=pi/6;%两个车的中心线与其中之一的连线,相当于方位角
leader.x=4.0;leader.y=9.0;
%初始化follower1的速度位姿
follower1.x=3;follower1.y=8;follower1.theta=0;follower1_ideal.beta=pi/6;
follower1.v=1.0;follower1.beta(1)=pi/6;
follower1.w=0.6
%初始化follower2 的位姿
follower2.x=3;follower2.y=10;follower2.theta=0;follower2_ideal.beta=pi/6;
follower2.beta(1)=pi/6;
follower2.v=1.0;
%初始化队形参数即增益系数和理想距离和角度
l21=1.4;c21=1.4;c31=1.4;gama21=pi/3;gama31=pi/3;%编队队形
b=0.1315;d=0.15;r=0.095;%车身参数
K11=1;K12=0.6;K13=0.5;%增益系数
df=0.85;%队形的最大宽度
J=20;
for i=1:ts:J
Step=Step+1;
leader_ideal.w=0.0;
leader_ideal.v=1;
leader_ideal.theta=0;%leader 的航向角;
% leader.beta=pi/6;%两个车的中心线与其中之一的连线,相当于方位角
leader_ideal.x=leader.x+ts*leader.v*cos( leader.theta);%采样周期内一步一步的计算,
leader_ideal.y=leader.y+ts*leader.v*sin( leader.theta);
follower1_ideal.theta =leader.theta;
follower1_ideal.y = leader.y-c21*sin(gama21+follower1_ideal.theta);
follower1_ideal.x =leader.x-c21*cos(gama21+follower1_ideal.theta);
follower1_ideal.v=leader.v;
follower1_ideal.w= leader.w;
follower2_ideal.y = leader.y+c31*sin(gama31+follower2_ideal.theta);
follower2_ideal.x =leader.x-c31*cos(gama31+follower2_ideal.theta);
follower2_ideal.v=leader.v;
follower2_ideal.w= leader.w;
%计算follower1d的误差
e1(1) =cos(follower1.theta(step))*(follower1_ideal.x(step)-follower1.x(step))+sin(follower1.theta(step))*( follower1_ideal.y(step)-follower1.y(step));
e1(2)=-sin(follower1.theta(step))*(follower1_ideal.x(step)-follower1.x(step))+cos(follower1.theta(step))*(follower1_ideal.y(step)-follower1.y(step));
e1(3)= follower1_ideal.theta(step) -follower1.theta(step);
follower1_xe=e1(1);
follower1_ye=e1(2);
follower1_thetae=e1(3);
follower1.v=follower1_ideal.v*cos(follower1_thetae)+K11*follower1_xe;
follower1.w=follower1_ideal.w+K12*follower1_ideal.v*follower1_ye+K13*follower1_ideal.v*sin(follower1_thetae); follower1.theta=follower1.theta+ts*follower1.w;
follower1.x=follower1.x+ts*follower1.v*cos( follower1.theta);
follower1.y=follower1.y+ts*follower1.v*sin( follower1.theta);
plot( follower1.x, follower1.y, 'y.');hold on;
e2(1) =cos(follower2.theta(step))*(follower2_ideal.x(step)-follower2.x(step))+sin(follower2.theta(step))*( follower2_ideal.y(step)-follower2.y(step));
e2(2)=-sin(follower2.theta(step))*(follower2_ideal.x(step)-follower2.x(step))+cos(follower2.theta(step))*(follower2_ideal.y(step)-follower2.y(step));
e2(3)= follower2_ideal.theta(step) -follower2.theta(step);
follower2_xe=e2(1);
follower2_ye=e2(2);
follower2_thetae=e2(3);
follower2.v=follower2_ideal.v*cos(follower2_thetae)+K11*follower2_xe;
follower2.w=follower2_ideal.w+K12*follower2_ideal.v*follower1_ye+K13*follower2_ideal.v*sin(follower2_thetae);
%计算follower2当前的位姿
follower2.theta=follower2.theta+ts*follower2.w;
follower2.x=follower2.x+ts*follower2.v*cos( follower2.theta);
follower2.y=follower2.y+ts*follower2.v*sin( follower2.theta);
plot( follower2.x, follower2.y, 'c.');hold on;
end
%%
figure(1);
%plot(follower1_xe,follower1_ye,':r');
% hold on;
plot( leader.x, leader.y, 'r.',follower1.x, follower1.y, 'y.',follower2.x, follower2.y,'c.');
hold on
GraphicHandle= plot( leader.x, leader.y, 'b.',follower1.x, follower1.y, 'r.', follower2.x,follower2.y,'c.');
set( GraphicHandle,'MarkerSize',4);
xlabel('x[m]')
ylabel('y[m]')
title ('trajectory of the robots ')
legend('leader','follower1','follower2')
figure(2);
GraphicHandle= plot( leader.v,'ko');
hold on;
ylabel(' leader.v[m/s]')
xlabel('t[s]')
h=title ('velocity of the leader ')
set(h,'Fontsize',15);
figure(3);
GraphicHandle= plot( leader_xe,'ko');
hold on;
ylabel('leader_xe[m]')
xlabel('ts[s]')
h=title ('error of the leader ')
set(h,'Fontsize',15);
end