写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~


文章目录
  • 引言
  • 一、油门标定原理
  • 1.1 油门与速度、加速度的关系
  • 1.2 油门控制曲面模型的构建
  • 二、油门标定表的制作流程
  • 2.1 传统方法的局限性
  • 2.2 基于深度学习的标定方法
  • 2.3 数据采集与拟合
  • 三、Carsim 油门标定实操与优化
  • 3.1 准备工作与模型搭建
  • 3.2 标定油门与刹车
  • 3.3 数据采集与处理
  • 3.4 标定表的建立与拟合
  • 3.5 标定表在Simulink中的使用
  • 3.6 速度与加速度控制
  • 3.7 速度与加速度的匹配性分析
  • 四、刹车标定
  • 4.1 刹车标定表的制作方法
  • 4.2 刹车标定数据的采集与拟合
  • 4.3 刹车标定表的测试与优化
  • 五、总结
  • 参考资料

引言

  各位小伙伴们大家好,本篇博客是自动驾驶控制算法第十节,内容整理自 B站知名up主 忠厚老实的老王 的视频,作为博主的学习笔记,分享给大家共同学习。

  在讲第十节之前,希望大家已经把第九节的一切准备工作都准备好了,包括 Carsim 道路设置、输入输出设置、变速器设置、电机设置。具体参见:

  【自动驾驶】控制算法(九)深度解析车辆纵向控制 | 从算法基础到 Carsim 仿真实践

  本篇博客讲解讲油门刹车标定表的制作,是纵向控制的核心内容,也是一块比较麻烦的内容。


一、油门标定原理

1.1 油门与速度、加速度的关系

  油门标定表的制作可以用下图来简单解释一下:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_02
以及加速度
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_03
出来,因此找到油门和
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_02
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_03
之间的对应关系,即油门标定表,是本篇博客的目的,准确的说法是做实验采不同的油门得到不同油门下的
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_06

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_07
时,和时间的关系是直线,这样进行仿真就可以得到车速
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_02
和时间
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_09
的关系,以及车辆加速度
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_03
和时间
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_09
的关系。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_12

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_13
可以合并,假设在油门等于
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_07
时,
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_15
时,得到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_16
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_17
时,得到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_18
,如此下去,这样就可以在
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_06
二维坐标里得到一系列点,将点连成线,就会得到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_06
曲线,一般
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_06
曲线长这样:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_22

  速度越高,加速度就越差,这也是因为第九节所讲的,因为

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_23
,当速度很大时,力矩必然不会很大。无论是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_07
的油门,还是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_25
的油门,或是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
的油门,得到的
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_27

1.2 油门控制曲面模型的构建

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_27
曲线,把这一系列
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_06
曲线合并在一起,就可以得到三维曲面:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_30

  选不同油门,就会得到不同曲线,把曲线全部拟合在一块,就会变成曲面:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_31

  这样就得到了油门和

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_32
之间的函数关系,但函数关系并不是显式的,而是拟合的曲面。通过做大量实验,得到了大量
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_33
的三维点,然后通过三维的点进行拟合,得到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_34


二、油门标定表的制作流程

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_34
被称为 模型。这一术语源自深度学习领域,因为其原理与深度学习极其相似:给定输入变量
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_02
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_03
,模型就能拟合出油门的输出。这种方式是数据驱动的,基于统计意义下的拟合,与深度学习的理念如出一辙。目前许多标定表的制作已经采用了深度学习方法,而非传统手段。

2.1 传统方法的局限性

  接下来,谈谈传统方法的一些缺点。首先,实验要求路面必须平坦且较长,且车辆需进行直线行驶,方向盘不得有动作。而在实际驾驶中,方向盘难免会有轻微的抖动,这使得实验条件过于严苛。此外,传统方法无法解决车辆质量变化的问题。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_38
负载、
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_39

2.2 基于深度学习的标定方法

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_02
、加速度
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_03
以及车辆质量
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_42

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_43

  由于对深度学习的了解尚不深入,目前还无法详细讲解基于深度学习的标定方法。待未来深入学习后,再进行相关讲解。本篇博客仍将采用传统方法进行标定,因为这种方式更易于上手。

2.3 数据采集与拟合

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_02
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_03
从从小到大排列,第三个元素就是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_46
,比如
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_47

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_48

  刹车和油门一样,就是不同的刹车会导致不同的

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_49

  至此,理论部分就讲完了,接下来到实践部分看一下该怎么标定油门和刹车,把第九节所讲的模型准备好。


三、Carsim 油门标定实操与优化

3.1 准备工作与模型搭建

  来到 Carsim 模型,由于要标定刹车,所以在模型输入中不仅要把油门弄上去,还要把刹车的制动压力弄上去,作为输入。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_50

  点击 Send to Simulink,先标油门,再标刹车,所以刹车先给

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_52
和重力加速度
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_53
。所以要换算成
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_54
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_55
,车速换算增益为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_56
,加速度换算增益为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_57
,一些准备就绪,开始标定。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_58

  首先把油门输入改为变量 thr ,用 to workspace 模块把 Carsim 输出的

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_59
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_60
导到工作空间里。变量的名字就起 vxax,当跑模型时,会将模型输出存到 vxax 变量里,然后点保存。

3.2 标定油门与刹车

  一切准备就绪后就可以写标定算法了。

thr = 1;%  thr 和 Simulink 模型里的 thr 名字一定要一致
sim('calibration');%调用 Simulink 函数,括号里是模型名字
  • 1.
  • 2.

  这两行代码是通过 Matlab 调用 Simulink 最简单的语法,实现两者之间的联动。

  开始运行就会把 thr = 1 传到 Simulink 模型里,跑完一遍后会把 vxax 传进来。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_61
秒采样本太密,改成
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_62
秒采样本。一般用
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_62

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_64

3.3 数据采集与处理

  上面两行代码实际上只是演示,把这两行代码注释掉,再清除一下工作区,然后开始写代码:

thr=0;%初始化油门
for i=1:11
    %该程序非常耗时,因为要不停地去调用 Simlink 模型去算,如果需要更多更密集的数据,请先测试
    sim('calibration');%首先运行叫 Simlink 模型
    v_temp(:,i)=vx.data;%把 VX 以及 AX 以油门都记录下来,保存到变量里
    a_temp(:,i)=ax.data;
    thr_temp(:,i)=ones(length(vx.data),1)*thr;%ones 就是元素都是一的矩阵。
    %长度是和 v x data 一样的列向量。然后元素都是1
    thr=thr+0.1;%每一次循环结束之后,油门都会增加0.1
end
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

  运行代码测试一下,此程序要耗一点时间,如果电脑性能不行的话,要做好心理准备,而且在跑之前一定要先清除工作区。

  运行完之后,看一下速度、加速度以及油门:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_65

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_66
列,第一列对应油门为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,第二列对应油门为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_62
,第三列对应油门
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_69

3.4 标定表的建立与拟合

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_13
、油门都是矩阵形式存储的,把他们合并变成一列向量:

%合并
%一定要转成行向量再合并,否则会导致合并失败
v=v_temp(:,1)';%先把 v、a 和油门的第一列拉出来。注意第一列是列向量,所以必须先转成横向
a=a_temp(:,1)';
tr=thr_temp(:,1)';
for i=2:length(a_temp(1,:))%写循环,合并起来
    v=[v,v_temp(:,i)'];%把v_temp的第二列先转置变成第二行,然后拼到 v 里,如此循环
    a=[a,a_temp(:,i)'];
    tr=[tr,thr_temp(:,i)'];
    %这样就会把v_temp、a_temp 以及 thr_temp直接变成很长的行向量。
end
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

  运行一下,发现确实变成了很长的行向量:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_71

  然后进行拟合:

%拟合
F=scatteredInterpolant(v',a',tr');%转成列向量
%Matlab 自带的三维散点拟合函数

%建立标定表
vu=0:0.1:50;%认为 v 的最大速度不能超过50,也就是 180 公里每小时。
au=0:0.1:5;
table=zeros(length(vu),length(au));%先建立表,行是 v 的长度列是 a 的长度,
for i=1:length(vu)
    for j=1:length(au)
        table(i,j)=F(vu(i),au(j));
    end
end
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

  运行程序。看一下合并后的表,是一系列油门这样的组合:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_72

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
的。当然这也是可理解的,因为拟合自然会拟合出极端情况,比如速度是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_74
,并且加速度是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_75
,此时油门肯定超过
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
了。不过没关系,有这张表后再加限制,当油门超过
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
时,强行让油门变成
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26

3.5 标定表在Simulink中的使用

  做好表后回到 Simulink,首先搜索 lookup table,选择 2-D Lookup table 二维查表模块:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_79

  参数按照下图填写:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_80

  这样就设置完了,看一下标定表长什么样:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_81

  大致看一下,其实拟合效果一般,在启动阶段波动比较剧烈,其实不应该把启动阶段的数据给拟合进去,因为启动阶段很不稳定,要把平稳运行阶段的数据进行拟合,要做一些数据处理,把那些比较奇怪的数据把给去掉。

3.6 速度与加速度控制

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_82

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_83

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_85

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_87
,再跑一遍,可以看到结果:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_88

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_89
,但到后面就变得很奇怪了,这应该是已经超出了电机的加速能力。到后面油门肯定超过
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
了,所以就变成这么奇怪的样子,事实上油门最多也就是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_93

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
了。可以看到超过
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
后,在仿真中没有做限制,为什么就是在超过一之后,加速度曲线变得非常奇怪,这是因为标定表插值的拟合就是以
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
的油门为基本数据进行拟合的,没有拟合过超过
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
这样的数据,所以当油门超过
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_26
,但也不能小于
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
。为了避免代数环,再加上延迟模块:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_102

  再来跑一下

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_103

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_87

  加速度控制看完了,看一下速度控制:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_105

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106
,但加速度不能随便设,一般根据期望速度和实际速度相减,把相减的信号输到加速度信号里,不能直接把车的加速度拉过来。下面看一下速度变化:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_107

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106

3.7 速度与加速度的匹配性分析

如果直接把车辆当前加速度拉过来,作为标定表查表的加速度,行不行?

  控制结果会非常差。因为速度和加速度不匹配。

  速度与加速度相匹配的概念可以这样理解:在车辆行驶过程中,速度与加速度需要协调一致,以实现预定的行驶目标。下面举个具体的例子来说明这一点:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106
公里/小时,希望车辆能够以这个速度稳定行驶。那么,什么是与之匹配的加速度呢?由于初始速度为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,因此必须有一个较大的加速度来使车辆从静止状态开始加速。在加速过程中,加速度应逐渐减小,最理想的情况是当车辆速度达到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106
公里/小时时,加速度恰好降至
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,即车辆不再加速,而是保持匀速行驶。这意味着,在速度未达到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
。如果车辆的实际加速度与规划的速度不匹配,就会出现问题。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_115
公里/小时,那么车辆应该保持匀速运动,即加速度为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_116
。因此,他们可能会直接在控制表中设定速度为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_115
,加速度为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_116

  但这样做的话,结果往往是非常不理想的,因为车辆可能根本达不到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_115
公里/小时的速度。原因在于这种设定没有考虑到速度与加速度的匹配问题。初始速度为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_116
,要想达到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_115
公里/小时的速度,必须有加速度作用。但如果加速度立即设为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_116
,车辆就无法加速,这就产生了矛盾。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106
公里/小时,而加速度设定为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_124
公里/小时,这是不合理的。如果车辆要以
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106
公里/小时的匀速行驶,加速度应该为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
。设定加速度为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_124

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
。需要考虑车辆从
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
加速到
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_106
公里/小时的客观过程。因此,匹配的加速度应该是在速度差距较大时较大,随着速度接近目标值而逐渐减小,直到速度达到目标值时变为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51

  因此,在上述例子中,可以使用目标速度与当前速度的差值作为加速度的输入信号,这样就能实现速度与加速度的匹配,从而显著提高控制效果。


四、刹车标定

4.1 刹车标定表的制作方法

  油门标定完成后,下面介绍刹车标定表的制作方法,其实刹车标定表和油门标定表非常类似,不过右几点东西需要改一下。

  首先在模型里先把 2-D Lookup table 二维查表模块删掉,油门设为

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,给刹车创建新的变量 bake

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_133

  在 Carsim 的 Procedures 设置里,将初速度改成

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_134

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_135

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,不可能一边踩油门一边踩刹车,这样车肯定就烧坏了。所以当踩刹车时,油门肯定是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,但如果初速度也是
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,这样制动可以覆盖所有的速度。设置好后,点 Send to Simulink 即可。

  把代码写一下,油门标定代码和刹车标定代码几乎一模一样。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_140
变成
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_141
,每
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_141
就是标意思,这样循环就是从
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_143
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_144
了,而不是从
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_143
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_carsim_146

4.2 刹车标定数据的采集与拟合

  下面看一下刹车标定代码,和油门标定代码类似:

brake=0.1;%初始化刹车
for i=1:80%输入实际上是制动压力,一般来说1就代表1MPa,最多不会超过 8MPa
    %该程序非常耗时,如果需要更多更密集的数据,请先测试
    sim('calibration');
    v_temp(:,i)=vx.data;
    a_temp(:,i)=ax.data;
    brake_temp(:,i)=ones(length(vx.data),1)*brake;
    brake=brake+0.1;%每 0.1 增加一次刹车
end

%合并,一定要转成行向量再合并,否则会导致合并失败
vbr=v_temp(:,1)';%记得要起个新的名字,免得和油门的油门变量搞混。
abr=a_temp(:,1)';
br=brake_temp(:,1)';
for i=2:length(a_temp(1,:))
    vbr=[vbr,v_temp(:,i)'];
    abr=[abr,a_temp(:,i)'];
    br=[br,brake_temp(:,i)'];
end
% 
%拟合
F=scatteredInterpolant(vbr',abr',br');%转成列向量
vubr=0:0.05:50;
aubr=-8:0.05:0;%注意从-8开始,写成单调递增形式,模型 f 给算出来之后,当在做表时,必须保证 v 和 a 都单调递增。
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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

为什么刹车不能超过

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_147

  因为现在的车都有 ABS 防抱死系统,就是刹车不允许踩得特别深,会发生很多危险,即不允许车轮抱死,所以刹车一般到 8 就已经到极限了,再大的话防抱死系统就开始工作了。

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_13

  跑完后看一下表:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_149

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_74
。横着的是加速度从
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_152
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51

  接下来的操作就很简单了,找二维查找表,把得到的标定表输进去。下面看一下标定表的数值分布:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_matlab_154

4.3 刹车标定表的测试与优化

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_155

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_156

  把速度连上去,看一下结果:

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_157

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_人工智能_155
的加速度进行制动,直到停车之后加速度变为
【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_自动驾驶_160

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作_纵向控制_51
,用实际速度和目标速度相减,作为加速度信号,这样也可以进行制动。


五、总结

  在完成了 Carsim 模型中的油门和刹车标定后,能够更精确地控制车辆的加速和减速过程。通过采集不同油门和刹车条件下的速度和加速度数据,并使用这些数据建立标定表,我们能够在Simulink模型中实现更精确的速度和加速度控制。油门标定表的建立使得我们能够根据期望的速度和加速度,通过查表的方式得到相应的油门开度,从而实现速度控制。

  通过油门和刹车标定,能够实现更精确的车辆控制,提高行驶的安全性和舒适性。同时,还要注意速度和加速度之间的匹配,以确保控制效果达到预期。

  本篇博客就讲到模型和代码,谢谢大家的收看,下期再见。


参考资料

   【基础】自动驾驶控制算法第十讲 油门刹车标定表的制作


后记:

🌟 感谢您耐心阅读这篇关于 Carsim 油门刹车标定表的制作 的技术博客。 📚
🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢
🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀
🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡
🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀