智能小车MATLAB仿真

现在关于matlab仿真的想法是分几个部分写程序:

目标路径部分、对象建模部分、控制器部分以及参杂在其中的绘图部分。

其中目标路径可以有不同的形式,点、直线、圆、S曲线等;

对象建模从简单的开始,从经典的二轮小车模型开始,在分别对舵机、电机建模,最后统一起来整体建模;

控制器先采用PID算法,再考虑模糊算法。

小车对象为一个多输入多输出的系统。

下午成果:

采用了P控制,对二轮小车的经典模型进行了控制仿真。

当去掉P时,小车路径仅为一点;若P作用越强,小车路径与目标路径偏差越大。去掉偏差,必须加入I作用。

程序如下:

clear all
close all
clc

ts=0.001;
for k=1:1:2000
xd(k)=cos((k-1)*pi*ts);
yd(k)=sin((k-1)*pi*ts);
thd(k)=ts*pi*(k-1)+pi/2;
end

u1(1)=0;u2(1)=0;
e1tmp=0;e2tmp=0;e3tmp=0;
y0=[0;0;pi/2]; 

for k=1:1:2000     
if k==1
    q=y0;
end        
xp(k)=q(1);
yp(k)=q(2);
thp(k)=q(3);

%current error of time k
qd=[xd(k);yd(k);thd(k)];
ce1(k)=qd(1)-q(1);
ce2(k)=qd(2)-q(2);
ce3(k)=qd(3)-q(3);
E=[ce1(k);ce2(k);ce3(k)];
B=ts*[cos(q(3)) 0
      sin(q(3)) 0
      0         1];

Kp=[100 100 100
    100 100 100];
Kd=[0 0 0
    0 0 0];
Ki=[10 10 10
    10 10 10];

if k==1
    Etmp=[e1tmp;e2tmp;e3tmp];       
    Ei=0;
end
Ep=E;Ed=(E-Etmp)/ts;Ei=Ei+E*ts;    
U=Kp*Ep+Kd*Ed+Ki*Ei;
u1(k)=U(1);u2(k)=U(2);
u=[u1(k);u2(k)];

q=q+B*u;

%error of previous time k+1 
e1(k)=cos(k*ts*pi)-q(1);
e2(k)=sin(k*ts*pi)-q(2);
e3(k)=ts*k*pi+pi/2-q(3);


Etmp=E;

end

figure(1);
hold on;
plot(xd,yd,'r',xp,yp,'b');
xlabel('xd xp');ylabel('yd yp');

figure(2)
hold on;
plot(xp,yp,'b');
xlabel('xp');ylabel('yp');

simualation result