车辆纵向控制

1、电机模型搭建(参考B站老王)

目前智能车辆大都采用电动车,汽车电动化也是大势所趋,因此这里采用电车模型来进行车辆的纵向控制。电机参数为:最大扭矩为380N\cdot m,最大功率为180kw,转速w如下:

转速的单位为:转/每分钟。

 

上面两图就是建立的电机模型。

2、油门刹车标定表的制作

这里我们把油门标定表和刹车标定表,做到一张表里面,这样当控制车辆到达一个目标速度时,就会根据表中数据自动插值,使控制具有连续性。当分成两张表时,当目标速度是10km/h时,可能出现在目标速度附近来回跳动,控制连续性不好。

标定表制作如下:

当标定油门时,这里速度为0,标定刹车时速度为180。

输入、输出为:

                             

注意一点,设置的道路长一点,否则程序运行可能报错。

3、simulink模型搭建

代码分别为:

function [thr,brake] = fcn(x)
    if x>= 0
        thr = x;
        brake = 0;
    else
        brake = -x;
        thr = 0;
    end
  
end



function torque = fcn(thr,rpm)
    Tmax = 380*thr;
    if rpm <= 4523
       torque = Tmax;
    else
        torque = Tmax *4523/rpm; 
    end
end

标定代码为:

clc;clear;
x = 0;
for i = 1:101
    sim('longitudinal_control');
    vx_tmp(:,i) = ans.vx.data;
    ax_tmp(:,i) = ans.ax.data;
    thr_tmp(:,i) = ones(length(ans.vx.data),1)*x;
    x = x + 0.02;
end
ax_tmp(1,:) = ax_tmp(2,:);
%拟合
vv = vx_tmp(:,1)';
aa = ax_tmp(:,1)';
thr_thr = thr_tmp(:,1)';
for i = 2 :length(vx_tmp(1,:))
   vv =[vv,vx_tmp(:,i)'];
   aa = [aa,ax_tmp(:,i)'];
   thr_thr = [thr_thr,thr_tmp(:,i)'];
end

%% 刹车
x= 0;
for i = 1:81
    sim('longitudinal_control');
    vvx_tmp(:,i) = ans.vx.data;
    aax_tmp(:,i) = ans.ax.data;
    brake_tmp(:,i) = ones(length(ans.vx.data),1)*x;
    for j = 1:length(vvx_tmp(:,i))
       if vvx_tmp(j,i) <= 0.01
       brake_tmp(j,i) = 0;
       end
    end
    x = x - 0.1;
end
%%
%将v_tmp 、a_tmp 、brake_tmp合并
aax_tmp(1,:) = aax_tmp(2,:);
vvv = vvx_tmp(:,1)';
aaa = aax_tmp(:,1)';
brake_bra = brake_tmp(:,1)';
for i = 2 :length(vvx_tmp(2,:))
   vvv =[vvv,vvx_tmp(:,i)'];
   aaa = [aaa,aax_tmp(:,i)'];
   brake_bra = [brake_bra,brake_tmp(:,i)'];
end
%%
%% 拟合
v1 = [vv,vvv];
a1 = [aa,aaa];
thr_bra = [thr_thr,brake_bra];

F = scatteredInterpolant(v1',a1',thr_bra');
vu = 0:0.05:50;
au = -8:0.05:5;
tabler = zeros(length(vu),length(au));
for i = 1:length(vu)
    for j = 1:length(au)
        tabler(i,j) = F(vu(i),au(j));
    end
end

 这里记得油门刹车分开标定,最后完成一张总表

如图:

 里面填写对应的数据

4、双PID的纵向控制

这里输出增了位移输出;

参考加速度、速度、位移代码和图像如下:

function [s,v,a] = fcn(t)
if t<10
    s=0.1*t^3/3;
    v=0.1*t^2;
    a=0.2*t;
else
    a=2-0.1*(t-10);
    v=2*t-0.05*(t-10)^2-10;
    s=t^2-0.05*(t-10)^3/3-10*t+100/3;
end

模型搭建如下:

位移PID和速度PID的参数为:

                                

5、仿真结果

位移跟踪结果:

位移基本满足要求

速度跟踪 

速度 7-15之间波动明显,这里可以试着调节PID这三个参数,其中kp可以加快收敛,且对于画龙时,调节kp小点,可以明显改善。ki可以消除稳态误差,但是可能引起超调,对于这个超调,通过微分还不容易消除,只能通过降低比例项,但是会使系统响应变慢,所以一般ki,最后调节,先p,后d,最后i。kd的作用是抑制超调,比如上图有超调,就可以增加kd,但是kd会放大高频噪声。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值