车辆标定之将油门标定表和刹车标定表结合到一个总表中

前言

在这篇文章中我们详细介绍了车辆的标定车辆的纵向控制之标定_路在脚下,梦在心里的博客-CSDN博客,但是这篇文章中的油门标定表和刹车标定表是分开的。为了实现控制的光滑性,我们这里将两个标定表记录到一个总表中,以实现控制更佳的控制效果。


一、Carsim设置(和上面链接的设置基本相同)

        1、车辆初始情况和道路的设置

         2、CarSim输入和输出的设置

                2.1、输入

                 2.2、输出


二、MATLAB模块设计(主要不同的地方)

        1.整体模块

注:这里主要的变化就是添加了一个切换模块,进行刹车和油门的切换,这里就不分别对每一个模块进行介绍了,可以参考之前的标定文章。这里ax和vx的采样时间设计为0.1。

        2.切换模块

代码如下:

function [power,brake] = fcn(x)
    %正数代表油门,负数代表刹车
    %不允许同时踩油门和刹车
    if x>0
        power=x;
        brake=0;
    else
        power=0;
        brake=-x;
    end
end

        3、油门标定(将速度设置为0)

%启动时检查carsim的初速度是否为0
x=0;    %初始化信号
for i=1:21
    %该程序非常耗时,如果需要更多更密集的数据,请先测试
    sim('biaoding');  //这里根据自己的simulation文件名选
    v_temp(:,i)=vx.data;
    a_temp(:,i)=ax.data;
    thr_temp(:,i)=ones(length(vx.data),1)*x;
    %油门是递增
    x=x+0.05;   
end

%合并,一定要转成行向量再合并,否则会导致合并失败
v=v_temp(:,1)';
a=a_temp(:,1)';
tr=thr_temp(:,1)';
for i=2:length(v_temp(1,:))
    v=[v,v_temp(:,i)'];
    a=[a,a_temp(:,i)'];
    tr=[tr,thr_temp(:,i)'];   
end

%为什么油门和刹车不可以写到一个文件中?因为油门和刹车的初速度要求不一样,油门要求初速度为0,刹车要求初速度很大(180)


        4、刹车标定(将速度设置为180)

%启动前检查车的初速度是否为180
x=0;   %初始化刹车
%%%刹车的初速度一定要比较高
for i=1:81
    sim('biaoding');
    v_temp1(:,i)=vx.data;
    a_temp1(:,i)=ax.data;
    brake_temp1(:,i)=ones(length(vx.data),1)*x;
    %%%这里是为了消除奇异性,因为无论brake=1还是brake=2,最后都会导致车的速度v,加速度a为0,这将导致多值性
    for j=1:length(v_temp1(:,i))
        if v_temp1(j,i)<0.001
            brake_temp1(j,i)=0;
        end
    end
    %刹车是递减
    x=x-0.1;        
end
a_temp1(1,:)=a_temp1(2,:);  %将上面for循环运行的结果的第二行赋值给第一行,为了避免大的跳跃

%合并,一定要转成行向量再合并,否则会导致合并失败
vbr=v_temp1(:,1)';
abr=a_temp1(:,1)';
br=brake_temp1(:,1)';
for i=2:length(v_temp1(1,:))
  vbr=[vbr,v_temp1(:,i)'];
  abr=[abr,a_temp1(:,i)'];
  br=[br,brake_temp1(:,i)'];      
end

        5、合并

%将油门标定表和刹车标定表组合在一起
v2=[v,vbr];
a2=[a,abr];
br2=[tr,br];

F=scatteredInterpolant(v2',a2',br2');    %转成列向量
vubr=0:0.05:50;
aubr=-8:0.05:5;
tablebr=zeros(length(vubr),length(aubr));
for i=1:length(vubr)
    for j=1:length(aubr)
        tablebr(i,j)=F(vubr(i),aubr(j));
    end
end

总结

将油门和制动标定表放到一块的原因:考虑控制的连续性,比如,如果是两个表很难做一个过渡,我们规划速度是10m/s,现在速度是50m/s,开始减速(踩刹车),当减速接近10m/s时,如果调整的不好的话,可能会出现刹车踩过头,然后继续踩油门,可能会出现振荡,如果放在一块避免这种情况的出现。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值