车辆编队纵向跟随控制律设计与仿真

1.车辆纵向运动系统建模

1.1整车及轮胎动力学建模

本次仿真建立的模型分析基于以下的简化情形,即:

1忽略车轮及悬架形变作用,假设车身没有垂向运动;

2.假设车身俯仰角和侧倾角均为零;

3.忽略转向梯形对左、右车轮转角影响,假设左、右车轮转动角度相同。

在此基础上,可以分别作出对车身和轮胎的受力分析图,并列出车身与轮胎的动力学方程,受力分析如下图所示。

1:轮胎的地面受力

其中Td为轮胎上的驱动力矩,Tb为制动力矩,Fx为轮胎所受纵向力,Iw为车轮转动惯量,r为车轮半径。

图2:整车受力分析

据此可知轮胎的动力学方程为:

     (1)

 

或写成

     (2)

 

而车身的动力学方程为:

 

考虑到车辆常处于爬坡状况,平地可视为特殊的爬坡状态,下面对车辆在一定坡度的道路上进行整车受力分析。

 

图3:坡道上车辆的受力分析

根据牛顿第二定律可知

      (6)

 

其中FxfFxr是左右轮的驱动力,大小为Td/reffRxfRxr是滚动阻力,Fxa是等效的纵向空气阻力。考虑

     (7),

 

将方程(7)带入(6)后方程简化为:

    (8)

 

又有车辆的纵向加速度可以写为

    (9),

 

联立(8)、(9)两个式子可得轮胎的驱动力矩为:

    (10)

 

由传动轴及发动机的力矩平衡方程:

    (11)(12)

 

可以算出传动轴驱动转矩Tt和发动机净扭矩Tnet 为:

 

 

空气阻力与相对运动速度的平方成正比,忽略风速,有:

   

 

其中Je为    (17)

 

将(15)、(16)、(17)联立最后得到车辆加速度与发动机扭矩的关系为:

    (18)

 

不考虑地面俯仰,即坡度为0,可得:

    (19)

 

    (20)

 

将(20)带入(17)中最终简化后得到动力学方程为:

    (21)

 

2.车辆纵向滑模控制结构

2.1车辆纵向跟随队列结构

 

图4 车辆综向跟随队列结构

定义间距误差ϵ是与前一车辆的实际间距与期望的车辆间距之间的差异即:

,i=1,2…    (22)

 

显然我们的最终控制目的为令误差趋于0。

2.2滑模系统设计

滑动模态为人为设定一经过平衡点的相轨迹,通过适当设计,系统状态点沿着此相轨迹渐近稳定到达平衡点,形象地称为滑向平衡点的一种运动,滑动模态的“滑动”二字即来源于此。

滑模系统设计的大体流程为

  1. 选择切换函数,或者说确定切换面
  2. 求取控制律
  3. 系统的稳定性分析

我们逐一对每个步骤进行设计。

2.2.1 切换函数的选取

ei1=ϵiei2=ei1的导数,结合公式,可以整理出误差方程为:

    (23)

 

设计切换函数为        

Si=q1ei1+q2ei2       q1>0,q2>0    24

下面对其进行可达性的验证,即当 Si趋近于0时,可以解得ϵi也趋近于0,即可达性验证通过。

2.2.2求取控制率

一般求取控制率有两种方法

1.采用到达条件,求得控制律的一个不等式,需要在满足此不等式的条件下选择合适的控制律。

2.采用趋近律方法,可直接求取等式型控制律

常见的趋近率有:

 

我们在这里采取指数趋近率做为本次仿真的控制率。即:

    (25)

 

对误差方程求导并于指数控制率进行联立,可得等效控制输入为:

    (26)

 

引入反馈控制:       (27),

 

得总控制率为:。    (28)

 

下面需要对所建立的模型进行可达性的分析,这里使用Lyapunov函数法,取函数为    (29)

 

对Vi求导并将总控制率带入可得

 

由此可知当Si大于0时,Si导数小于0,有减小的趋势,而当Si小于0时,Si的导数有增大的趋势,即Si始终有趋向0的趋势。即滑动模态渐进可达。

3.模型建立与仿真实现

a0为领头车辆的加速度

    (30)

 

3.1指数控制率下的仿真结果

分别设置5辆车的质量、空气阻力相关的系数、常数项系数;设置期望间距;设置五辆车的初始位移、速度、加速度;设置指数趋近律前面的系数λ;设置切换函数前的系数,具体结果如下

  

   

 当将车间初始距离加大可以发现切换函数和车间距误差依旧可以稳态渐进趋近于0,但所需的初始控制输入也变得十分大,难以实现,故实际纵车队初始间距不会过大,同时初速度也不宜过大。

 

3.2采用准滑模控制

除控制律外其他基本参数与指数控制率的保持一致。

 

准滑模控制也能很好的满足可达性和稳定性,但与指数控制率的相比,控制输入稳定所需时间明显更长,说明使用准滑模控制的效果在此场景不如指数控制律。

 

3.3采用等速趋近率控制

除控制律外其他基本参数与指数控制率的保持一致。

      

 

 

可以明显观察到,使用等速趋近率控制的话,抖振现象十分明显,切换函数和控制输入都无法稳定渐进趋近于0,而是以非常剧烈的强度在0附近波动,效果不如上述两个控制律。

4.仿真程序

4.1指数控制

q1=2; q2=1;

lan=0.5;

l1=12;l2=12;l3=12;l4=12;l5=12;

 

m1=1000;  c1=0.5; f1=200;

m2=1000;  c2=0.5; f2=200;

m3=1000;  c3=0.5; f3=200;

m4=1000;  c4=0.5; f4=200;

m5=1000;  c5=0.5; f5=200;

 

 

t=[0:0.1:30];

for n=1:40

a0(n)=0;

end

for n=41:70

a0(n)=-0.25*(t(n)-4);

end

for n=71:100

a0(n)=-0.75;

end

for n=101:160

a0(n)=0.25*(t(n)-10)-0.75;

end

for n=161:190

a0(n)=0.75;

end

for n=191:220

a0(n)=0.25*(19-t(n))+0.75;

end

for n=221:301

a0(n)=0;

end

 

    x0(1)=120;x1(1)=110;x2(1)=99.5;x3(1)=78.5;x4(1)=47;x5(1)=26;

   v0(1)=30;v1(1)=28;v2(1)=26;v3(1)=23;v4(1)=20;v5(1)=18;

    a1(1)=0;a2(1)=0;a3(1)=0;a4(1)=0;a(5)=0;

   

e11(1)=x1(1)-x0(1)+l1;

  e21(1)=x2(1)-x1(1)+l2;

  e31(1)=x3(1)-x2(1)+l3;

  e41(1)=x4(1)-x3(1)+l4;

  e51(1)=x5(1)-x4(1)+l5;

  e12=v1(1)-v0(1);

  e22=v2(1)-v1(1);

  e32=v3(1)-v2(1);

  e42=v4(1)-v3(1);

  e52=v5(1)-v3(1);

 s1(1)=q1* e11(1)+q2* e12;

 s2(1)=q1* e21(1)+q2* e22;

 s3(1)=q1* e31(1)+q2* e32;

 s4(1)=q1* e41(1)+q2* e42;

 s5(1)=q1* e51(1)+q2* e52;

 

    for n=2:301

        v0(n)=v0(n-1)+0.1*(a0(n)+a0(n-1))*0.5;

        x0(n)=x0(n-1)+0.1*(v0(n)+v0(n-1))*0.5;

       

        e11(n)=x1(n-1)-x0(n-1)+l1;

        e12=v1(n-1)-v0(n-1);

       

        s1(n)=q1* e11(n)+q2* e12;

      

       u1equ=c1*(e12+v0(n))^2-m1*q1*e12/q2+m1*a0(n)+f1;

       u1n=-m1*lan*s1(n)/q2;

       u1(n)=u1equ+ u1n;

 

        a1(n)=(-c1*v1(n-1)*v1(n-1)+u1(n)-f1)/m1;

        v1(n)=v1(n-1)+0.1*(a1(n)+a1(n-1))*0.5;

        x1(n)=x1(n-1)+0.1*(v1(n)+v1(n-1))*0.5;

       

          e21(n)=x2(n-1)-x1(n-1)+l2;

        e22=v2(n-1)-v1(n-1);

       

        s2(n)=q1* e21(n)+q2* e22;

      

       u2equ=c2*(e22+v1(n))^2-m2*q1*e22/q2+m2*a1(n)+f2;

       u2n=-m2*lan*s2(n)/q2;

       u2(n)=u2equ+ u2n;

 

        a2(n)=(-c2*v2(n-1)*v2(n-1)+u2(n)-f2)/m2;

        v2(n)=v2(n-1)+0.1*(a2(n)+a2(n-1))*0.5;

        x2(n)=x2(n-1)+0.1*(v2(n)+v2(n-1))*0.5;

 

  e31(n)=x3(n-1)-x2(n-1)+l3;

        e32=v3(n-1)-v2(n-1);

       

        s3(n)=q1* e31(n)+q2* e32;

      

       u3equ=c3*(e32+v2(n))^2-m3*q1*e32/q2+m3*a2(n)+f3;

       u3n=-m3*lan*s3(n)/q2;

       u3(n)=u3equ+u3n;

 

        a3(n)=(-c3*v3(n-1)*v3(n-1)+u3(n)-f3)/m3;

        v3(n)=v3(n-1)+0.1*(a3(n)+a3(n-1))*0.5;

        x3(n)=x3(n-1)+0.1*(v3(n)+v3(n-1))*0.5;

 

  e41(n)=x4(n-1)-x3(n-1)+l4;

        e42=v4(n-1)-v3(n-1);

       

        s4(n)=q1* e41(n)+q2* e42;

      

       u4equ=c4*(e42+v3(n))^2-m4*q1*e42/q2+m4*a3(n)+f4;

       u4n=-m4*lan*s4(n)/q2;

       u4(n)=u4equ+u4n;

 

        a4(n)=(-c4*v4(n-1)*v4(n-1)+u4(n)-f4)/m4;

        v4(n)=v4(n-1)+0.1*(a4(n)+a4(n-1))*0.5;

        x4(n)=x4(n-1)+0.1*(v4(n)+v4(n-1))*0.5;

       

       e51(n)=x5(n-1)-x4(n-1)+l5;

        e52=v5(n-1)-v4(n-1);

       

        s5(n)=q1* e51(n)+q2* e52;

      

       u5equ=c5*(e52+v4(n))^2-m5*q1*e52/q2+m5*a4(n)+f5;

       u5n=-m5*lan*s5(n)/q2;

       u5(n)=u5equ+u5n;

 

        a5(n)=(-c5*v5(n-1)*v5(n-1)+u5(n)-f5)/m5;

        v5(n)=v5(n-1)+0.1*(a5(n)+a5(n-1))*0.5;

        x5(n)=x5(n-1)+0.1*(v5(n)+v5(n-1))*0.5;

 

    

  

 end

 

 

  subplot(2,2,4);   plot(t,e11,t,e21,t,e31,t,e41,t,e42,t,e52);  xlabel('Time (s)');  ylabel('车间距误差 (m)');

 

 subplot(2,2,1);   plot(t,s1,t,s2,t,s3,t,s4,t,s5);  xlabel('Time (s)');  ylabel('切换函数');

 subplot(2,2,2);   plot(t,u1,t,u2,t,u3,t,u4,t,u5);  xlabel('Time (s)');  ylabel('控制输入 (N)');

 

4.2准滑模控制

q1=2; q2=1;

lan=0.5;

l1=12;l2=12;l3=12;l4=12;l5=12;

 

m1=1000;  c1=0.5; f1=200;

m2=1000;  c2=0.5; f2=200;

m3=1000;  c3=0.5; f3=200;

m4=1000;  c4=0.5; f4=200;

m5=1000;  c5=0.5; f5=200;

 

 

t=[0:0.1:30];

for n=1:40

a0(n)=0;

end

for n=41:70

a0(n)=-0.25*(t(n)-4);

end

for n=71:100

a0(n)=-0.75;

end

for n=101:160

a0(n)=0.25*(t(n)-10)-0.75;

end

for n=161:190

a0(n)=0.75;

end

for n=191:220

a0(n)=0.25*(19-t(n))+0.75;

end

for n=221:301

a0(n)=0;

end

 

   x0(1)=120;x1(1)=110;x2(1)=99.5;x3(1)=78.5;x4(1)=47;x5(1)=26;

   v0(1)=30;v1(1)=28;v2(1)=26;v3(1)=23;v4(1)=20;v5(1)=18;

    a1(1)=0;a2(1)=0;a3(1)=0;a4(1)=0;a(5)=0;

   

   e11(1)=x1(1)-x0(1)+l1;

  e21(1)=x2(1)-x1(1)+l2;

  e31(1)=x3(1)-x2(1)+l3;

  e41(1)=x4(1)-x3(1)+l4;

  e51(1)=x5(1)-x4(1)+l5;

  e12=v1(1)-v0(1);

  e22=v2(1)-v1(1);

  e32=v3(1)-v2(1);

  e42=v4(1)-v3(1);

  e52=v5(1)-v3(1);

 s1(1)=q1* e11(1)+q2* e12;

 s2(1)=q1* e21(1)+q2* e22;

 s3(1)=q1* e31(1)+q2* e32;

 s4(1)=q1* e41(1)+q2* e42;

 s5(1)=q1* e51(1)+q2* e52;

 

  for n=2:301

        v0(n)=v0(n-1)+0.1*(a0(n)+a0(n-1))*0.5;

        x0(n)=x0(n-1)+0.1*(v0(n)+v0(n-1))*0.5;

       

        e11(n)=x1(n-1)-x0(n-1)+l1;

        e12=v1(n-1)-v0(n-1);

       

        s1(n)=q1* e11(n)+q2* e12;

      

       u1equ=c1*(e12+v0(n))^2-m1*q1*e12/q2+m1*a0(n)+f1;

       u1n=-m1*ep*sat(s1(n))/q2;

       u1(n)=u1equ+ u1n;

 

        a1(n)=(-c1*v1(n-1)*v1(n-1)+u1(n)-f1)/m1;

        v1(n)=v1(n-1)+0.1*(a1(n)+a1(n-1))*0.5;

        x1(n)=x1(n-1)+0.1*(v1(n)+v1(n-1))*0.5;

       

        e21(n)=x2(n-1)-x1(n-1)+l2;

        e22=v2(n-1)-v1(n-1);

       

        s2(n)=q1* e21(n)+q2* e22;

      

       u2equ=c2*(e22+v1(n))^2-m2*q1*e22/q2+m2*a1(n)+f2;

       u2n=-m2*ep*sat(s2(n))/q2;

 

       u2(n)=u2equ+ u2n;

 

        a2(n)=(-c2*v2(n-1)*v2(n-1)+u2(n)-f2)/m2;

        v2(n)=v2(n-1)+0.1*(a2(n)+a2(n-1))*0.5;

        x2(n)=x2(n-1)+0.1*(v2(n)+v2(n-1))*0.5;

 

  e31(n)=x3(n-1)-x2(n-1)+l3;

        e32=v3(n-1)-v2(n-1);

       

        s3(n)=q1* e31(n)+q2* e32;

      

       u3equ=c3*(e32+v2(n))^2-m3*q1*e32/q2+m3*a2(n)+f3;

      u3n=-m3*ep*sat(s3(n))/q2;

       u3(n)=u3equ+u3n;

 

        a3(n)=(-c3*v3(n-1)*v3(n-1)+u3(n)-f3)/m3;

        v3(n)=v3(n-1)+0.1*(a3(n)+a3(n-1))*0.5;

        x3(n)=x3(n-1)+0.1*(v3(n)+v3(n-1))*0.5;

 

  e41(n)=x4(n-1)-x3(n-1)+l4;

        e42=v4(n-1)-v3(n-1);

       

        s4(n)=q1* e41(n)+q2* e42;

      

       u4equ=c4*(e42+v3(n))^2-m4*q1*e42/q2+m4*a3(n)+f4;

       u4n=-m4*ep*sat(s4(n))/q2;

       u4(n)=u4equ+u4n;

 

        a4(n)=(-c4*v4(n-1)*v4(n-1)+u4(n)-f4)/m4;

        v4(n)=v4(n-1)+0.1*(a4(n)+a4(n-1))*0.5;

        x4(n)=x4(n-1)+0.1*(v4(n)+v4(n-1))*0.5;

       

             e51(n)=x5(n-1)-x4(n-1)+l5;

        e52=v5(n-1)-v4(n-1);

       

        s5(n)=q1* e51(n)+q2* e52;

      

       u5equ=c5*(e52+v4(n))^2-m5*q1*e52/q2+m5*a4(n)+f5;

       u5n=-m5*lan*s5(n)/q2;

       u5(n)=u5equ+u5n;

 

        a5(n)=(-c5*v5(n-1)*v5(n-1)+u5(n)-f5)/m5;

        v5(n)=v5(n-1)+0.1*(a5(n)+a5(n-1))*0.5;

        x5(n)=x5(n-1)+0.1*(v5(n)+v5(n-1))*0.5;

 

     

  

  end

 

 

  subplot(2,2,4);   plot(t,e11,t,e21,t,e31,t,e41,t,e51);  xlabel('Time (s)');  ylabel('车间据误差 (m)');

 

 subplot(2,2,1);   plot(t,s1,t,s2,t,s3,t,s4,t,s5);  xlabel('Time (s)');  ylabel('切换函数');

 subplot(2,2,2);   plot(t,u1,t,u2,t,u3,t,u4,t,u5);  xlabel('Time (s)');  ylabel('控制输入 (N)');

4.3等速趋近率控制

q1=2; q2=1;

lan=0.5;

l1=12;l2=12;l3=12;l4=12;l5=12;

 

m1=1000;  c1=0.5; f1=200;

m2=1000;  c2=0.5; f2=200;

m3=1000;  c3=0.5; f3=200;

m4=1000;  c4=0.5; f4=200;

m5=1000;  c5=0.5; f5=200;

t=[0:0.1:30];

for n=1:40

a0(n)=0;

end

for n=41:70

a0(n)=-0.25*(t(n)-4);

end

for n=71:100

a0(n)=-0.75;

end

for n=101:160

a0(n)=0.25*(t(n)-10)-0.75;

end

for n=161:190

a0(n)=0.75;

end

for n=191:220

a0(n)=0.25*(19-t(n))+0.75;

end

for n=221:301

a0(n)=0;

end

 

    x0(1)=120;x1(1)=110;x2(1)=99.5;x3(1)=78.5;x4(1)=47;x5(1)=26;

   v0(1)=30;v1(1)=28;v2(1)=26;v3(1)=23;v4(1)=20;v5(1)=18;

a1(1)=0;a2(1)=0;a3(1)=0;a4(1)=0;a(5)=0;

e11(1)=x1(1)-x0(1)+l1;

  e21(1)=x2(1)-x1(1)+l2;

  e31(1)=x3(1)-x2(1)+l3;

  e41(1)=x4(1)-x3(1)+l4;

  e51(1)=x5(1)-x4(1)+l5;

  e12=v1(1)-v0(1);

  e22=v2(1)-v1(1);

  e32=v3(1)-v2(1);

  e42=v4(1)-v3(1);

  e52=v5(1)-v3(1);

 s1(1)=q1* e11(1)+q2* e12;

 s2(1)=q1* e21(1)+q2* e22;

 s3(1)=q1* e31(1)+q2* e32;

 s4(1)=q1* e41(1)+q2* e42;

 s5(1)=q1* e51(1)+q2* e52;

 

  for n=2:301

        v0(n)=v0(n-1)+0.1*(a0(n)+a0(n-1))*0.5;

        x0(n)=x0(n-1)+0.1*(v0(n)+v0(n-1))*0.5;

       

        e11(n)=x1(n-1)-x0(n-1)+l1;

        e12=v1(n-1)-v0(n-1);

       

        s1(n)=q1* e11(n)+q2* e12;

      

       u1equ=c1*(e12+v0(n))^2-m1*q1*e12/q2+m1*a0(n)+f1;

       u1n=-m1*ep*sign(s1(n))/q2;

       u1(n)=u1equ+ u1n;

 

        a1(n)=(-c1*v1(n-1)*v1(n-1)+u1(n)-f1)/m1;

        v1(n)=v1(n-1)+0.1*(a1(n)+a1(n-1))*0.5;

        x1(n)=x1(n-1)+0.1*(v1(n)+v1(n-1))*0.5;

       

        e21(n)=x2(n-1)-x1(n-1)+l2;

        e22=v2(n-1)-v1(n-1);

       

        s2(n)=q1* e21(n)+q2* e22;

      

       u2equ=c2*(e22+v1(n))^2-m2*q1*e22/q2+m2*a1(n)+f2;

       u2n=-m2*ep*sign(s2(n))/q2;

 

       u2(n)=u2equ+ u2n;

 

        a2(n)=(-c2*v2(n-1)*v2(n-1)+u2(n)-f2)/m2;

        v2(n)=v2(n-1)+0.1*(a2(n)+a2(n-1))*0.5;

        x2(n)=x2(n-1)+0.1*(v2(n)+v2(n-1))*0.5;

 

  e31(n)=x3(n-1)-x2(n-1)+l3;

        e32=v3(n-1)-v2(n-1);

       

        s3(n)=q1* e31(n)+q2* e32;

      

       u3equ=c3*(e32+v2(n))^2-m3*q1*e32/q2+m3*a2(n)+f3;

      u3n=-m3*ep*sign(s3(n))/q2;

       u3(n)=u3equ+u3n;

 

        a3(n)=(-c3*v3(n-1)*v3(n-1)+u3(n)-f3)/m3;

        v3(n)=v3(n-1)+0.1*(a3(n)+a3(n-1))*0.5;

        x3(n)=x3(n-1)+0.1*(v3(n)+v3(n-1))*0.5;

 

  e41(n)=x4(n-1)-x3(n-1)+l4;

        e42=v4(n-1)-v3(n-1);

       

        s4(n)=q1* e41(n)+q2* e42;

      

       u4equ=c4*(e42+v3(n))^2-m4*q1*e42/q2+m4*a3(n)+f4;

       u4n=-m4*ep*sign(s4(n))/q2;

       u4(n)=u4equ+u4n;

 

        a4(n)=(-c4*v4(n-1)*v4(n-1)+u4(n)-f4)/m4;

        v4(n)=v4(n-1)+0.1*(a4(n)+a4(n-1))*0.5;

        x4(n)=x4(n-1)+0.1*(v4(n)+v4(n-1))*0.5;

        e51(n)=x5(n-1)-x4(n-1)+l5;

        e52=v5(n-1)-v4(n-1);

       

        s5(n)=q1* e51(n)+q2* e52;

      

       u5equ=c5*(e52+v4(n))^2-m5*q1*e52/q2+m5*a4(n)+f5;

       u5n=-m5*lan*s5(n)/q2;

       u5(n)=u5equ+u5n;

 

        a5(n)=(-c5*v5(n-1)*v5(n-1)+u5(n)-f5)/m5;

        v5(n)=v5(n-1)+0.1*(a5(n)+a5(n-1))*0.5;

        x5(n)=x5(n-1)+0.1*(v5(n)+v5(n-1))*0.5;

end

  subplot(2,2,4);   plot(t,e11,t,e21,t,e31,t,e41,t,e51);  xlabel('Time (s)');  ylabel('车间据误差 (m)');

 subplot(2,2,1);   plot(t,s1,t,s2,t,s3,t,s4,t,s5);  xlabel('Time (s)');  ylabel('切换函数');

 subplot(2,2,2);   plot(t,u1,t,u2,t,u3,t,u4,t,u5);  xlabel('Time (s)');  ylabel('控制输入 (N)');

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值