资讯详情

如何利用Simulink来设计一个AEB的算法,并通过SCANeR仿真来测试?

工作太忙,断断续续写这篇文章花了两个月。

累。

所以看名字就知道我是怎么做的:这是SCANeR和Simulink一个联合仿真的例子。

所以如果你想理解这篇文章,我默认你会Matlab/simulink和SCANeR(ANSYS版本)这两个软件。

图片

此外,本案还希望借助AEB实现功能演示和构建环模型(MIL)测试的开发过程。

先看目录:

  1. NCAP-AEB场景

  2. 实现模式和逻辑框架

  3. SCANeR中设计一个AEB场景

  4. Simulink模型模型搭建

  5. 效果演示

  6. 完善场景

  7. 算法测试

在NCAP选车对人AEB场景-CPFA。

标准描述:"在远端场景下,行人6.5km/h垂直于车辆行驶方向的速度。VUT分别以20km/h,30km/h,40km/h,50km/h和60km/h速度测试。碰撞位置为25%和50%,对应下图中的M点和L点。

图片来源:CNCAP2021法规

为了方便场景模型的构建,我们将描述一个场景:

行人横穿速度为6.5km/h,车辆速度为30km/h,碰撞点位置设计为50%。也即CPFA50。

对场景结束条件的描述:

单次试验结束条件

当发生以下条件之一时,试验结束:

a)VUT= 0km/h;

b)VUT和PTA接触;接触;

c)PTA离开VUT行驶路径;

哦,不懂以上专业术语的也建议翻法律法规。

选择具体场景后,我准备测试这个场景。

像往常一样,先画好框架再往下干。

模块名:【DRIVER30;另一个模块用于实现AEB模块名:功能:【AEB_ACT】。

注:所谓模块,是的SCANeR你可以理解专业术语

【DRIVER30车辆始终保持在30km/h直线行驶的原理是车辆低于30km/h如果高于30,则加速km/h时,刹车。

【AEB_ACT】主要功能是让车辆判断前方行人的距离,触发AEB并制动功能。

假设这两个模块已经开发出来,如何证明我的算法生效?

当打开【DRIVER30】,不打开【AEB_ACT】车辆撞到行人时,可以看到。

当打开【DRIVER30】,也打开【AEB_ACT】当车辆撞到行人时,可以看到刹车停止。

这样,AEB设计效果。也能直观理解【AEB_ACT】就是给车辆加一个AEB的功能。

同时需要注意的是,如果两个模块都有控制车辆制动的行为,肯定会打架,所以两个模块中只有一个可以用来控制驾驶行为。

因此,作为一种解决方案,可以使用【AEB_ACT】发送制动信号SCANeR的export channel里,【DRIVER决定保持30km/在此速度之前,先读入此信号,根据此信号判断是否继续保持30km/h的速度。

工作流逻辑如下图所示。

好了,原理讲清楚了,就开始建模实操了。

按照CNCAP我们利用法律法规的要求SCANeR简单地创建一条直路,把主车放在路上,把目标行人放在主车前面。

然后是对车和人的行为控制。

主车的驾驶由SIMULINK控制(驾驶模式:MODELHANDLER,Mix/ACQUISITION)。行人动作原因SCANeR自控方向可设置为横穿马路,速度为6.5km/h固定方法。

两者的相对位置需要保证当主车是30km/h在行驶过程中,只有50%的重叠位置撞上了横穿的行人,需要多尝试几次才能调试好位置。

在这个场景案例中,我设置了一个Trigger,当车辆经过Trigger触发行人开始行走。

车前怎么知道有人?毫米波雷达可以做车的眼睛。

然后是毫米波雷达的建模,相关参数设置如下:

(mm波雷达默认情况下不会选择探测行人,因为探测行人性能差。这里一定要主动勾选上行人):

为了让我在模拟测试中实时看到更多信息,我在VISUAL两个参数的显示设置在界面中。

  • 当前主车速度

  • 碰撞距离:Distance to Collision

其中,主车目前的速度可以直接使用MICE脚本里的【getspeed】函数获得。【DistanceToCollision】可以在【AEB_ACT】的Simulink输出该值SCANeR的ExportChannel,再由MICE读取并显示脚本通道的值。

这时,这个模型应该能跑起来,简单看看效果。

注:

1.因为还没有启用SIMULINK所以不要先管模型【Distance to Collision】这个值是否正确;

2.如果此时尝试将主车改为主车TRAFFIC模式/不识别行人/保持常速30km/h,你应该能看到车辆碰巧撞到行人;

SCANeR中的模型搭好了,再来搭建Simulink里的模型。

该模型的主要功能是根据传感器检测到的前行人的碰撞距离等信息计算所需制动的力值,并输出碰撞距离和力值SCANeR的Export Channel中。

该模型的整体框架如下:

测试该模型的运行效果,看看是否会有数据输出SCANeR的Export Channel里。

如此,【AEB_ACT】该模块的使命已经完成。我们将该模型编译成exe文件(这是我们以后要添加的)SCANeR里的模块【AEB_ACT】)。并将该exe文件保存到vs2019下。

E:\AVSimulation\SCANeRstudio_2021\APIs\bin\x64\vs2019

该模块的主要功能是保持车辆保持30km/h速度直线前进,遇到行人时紧急制动。该模块的模型框架如下:

此时,简单测试这个模型,启动后,SCANeR当场景运行时,应该可以看到主车会逐渐加速到30km/h,然后保持在这个速度左右波动。

哦,开心。

不要太快乐。以上功能只能实现车辆始终保持在30km/h在速度下行驶。我们还需要按照。【AEB_ACT】输出给SCANeR的ExportChannel判断内值是否触发AEB为此,对上述模型进行了简单的改造。

最终,我们将该模型编译为exe文件(这就是我们后续要加到SCANeR里的模块【DRIVER30】)。并将该exe文件保存到vs2019下。

E:\AVSimulation\SCANeRstudio_2021\APIs\bin\x64\vs2019

5、效果演示

我们将SIMULINK的两个编译后的模块添加进SCANeR。如下所示:

这两个特殊模块添加成功后,首先仅启动【DRIVER30】模块,运行场景。可以看到车辆正好撞到行人。车辆没有减速行为。如下图所示。

在此基础上再启动【AEB_ACT】模块,运行场景。可以看到车辆在撞到行人前减速停下来。如下所示。

如此证明,我们简单地利用【AEB_ACT】模块给车辆添加了AEB功能。

正常来讲,当算法开发出来后,后面会将程序烧到控制器里,再进行SIL测试,然后是HIL测试,然后是VIL测试,走完整个V字形的测试流程才能打完收功的。

本文只专注于MIL测试这一环节,就不深究其它了。

6、完善场景

MIL到这里就完了嘛?No!

一个完善的场景必然包含结束条件。

我们按照NCAP中的结束条件,给SCANeR场景添加几个结束条件,当条件触发时,可以自动结束当前运行的场景。

MICE脚本如下所示:

场景结束条件1:车辆没有撞到行人,错过行人,驾驶到前方,遇到Trigger,结束仿真;

场景结束条件2:车辆地速度减速到0km/h;

场景结束条件3:车辆与行人发生碰撞;

设置好结束条件后,有一个非常大的好处就是,可以脱离SCANeR软件的操作界面,开始“快乐地”在Simulink界面看数据,测试AEB算法了。(直指本质,仿真的目的就是为了测试并完善算法。)

先来搭建一个好用一点的测试环境,我们希望测试过程在Simulink里操作就可以了,不再希望打开SCANeR点来点去,软件之间切换来切换去,太麻烦了。所以我们需要首先在Simulink里设置好SCANeR场景的运行方法和Simulink的结束方法。SCANeR场景运行的结束方法在上一节已经定义在了SCANeR的MICE脚本中。Simulink的仿真的结束可以直接定主在simulink模型里,如下所示(当检测到SCANeR场景运行结束,也停止Simulink仿真)。

接下来是默认启动模块的设置:在SCANeR中设置好默认该打开的模块(需要在Configuration中勾选上相关模块),其中:

DRIVER30,控制着主车的运动(加减速);

TRAFFIC,控制着行人的运动;

MODELHANDLER,处理主车的驾驶数据;

VISUAL,显示渲染后的画面;

SCENARIO,运行脚本;

SENSORS,运行传感器;

CONTROLPAD,查看通道里的值(Sensor输出值和Simulink里输出的值);

设置自动运行SCANeR场景

这个需要用到Laucher模块,在改模块中定义好要打开的配置,以及该配置下的场景文件名称。如下所示。

整体模型

改造完成的【AEB_ACT】的Simulink模型如下所示。

就这样,我们搭建好了一个测试环境,以后测试AEB算法,可以关闭掉SCANeR,在Simulink里点一下【run】就可以快乐地开始测试算法了。

再来测试一下,关闭SCANeR,回到Simulink界面,打开【AEB_ACT】模块的模型,点击运行,整个模型开始运行起来,虽然看不到SCANeR中的场景,但从VISUAL输出的图像及其上显示的数据来看,一切正常。然后,车辆碰到行人,场景自动结束,Simulink随之停止运行,如下所示。

7.2、算法测试

针对我们这个AEB的算法,由哪些参数可以测试及优化呢?

AEB这个算法的功能,我觉得最重要的就是输出刹车力值和TTC参数控制的刹车时刻。

在以上这个例子中,力值的计算,非常简单,给的是一个恒定的常值,刹车时刻也给的是常值,这些力值究竟合不合理根本没经过深思,所以,还是有很多东西可以去测试然后优化的。

1、刹车力值大小的测试;

2、刹车时刻的测试;

3、其他;

7.2.1、刹车时刻的测试

在上面的例子中,刹车时刻定为TTC=3s的时候,车真的停止后,其实距离行人还较远,我们可以试试将刹车时刻进行更改,来简单进行一个对比。

这里简单的从Simulink中输出了DistanceToCollision-Time曲线图,如下图所示。

当TTC=3s的时候,最终主车距离行人还有14.98m。

当TTC=2s的时候,最终主车距离行人还有6.95m。

当TTC=1s的时候,最终主车距离行人还有1.36m。

7.2.2、刹车力值的测试

刹车力的大小对最终车人间距也是有影响的。

在此前的模型中,默认触发AEB功能时,采用的制动力为100N,接下测试下制动力的大小对最终的车人间距的影响。

当制动力=100N的时候,最终主车距离行人还有14.98m。

当制动力=50N的时候,最终主车距离行人还有9.65m。

当制动力=10N的时候,最终主车距离行人还有1.46m。

我们可以发现,当我们设置的刹车时刻和刹车力不同时,会影响车辆的最终距离行人距离。所以,要找到一个最优值并不是一个简单的事,影响因素可能包括:

1、车辆当前车速

2、车辆和地面间的摩擦力

3、车辆的AEB功能是否会触发

4、车辆距离行人的距离,需要的减速度大小

5、制动舒适性

应该需要一个非常全面的考虑,来设计具体的制动力。

7.2.3、算法的优化

此处简单来优化一下刹车的力值。

从上述刹车力值的测试来看,需要根据当前的主车和行人的状态,来设计一个合理的力值,保证车辆在撞到行人前刚好停下来。

假设我们已经知道了车辆的刹车时刻为TTC=3s的时候,开始制动,要在车辆刚好撞到行人前停下来,肯定能根据当前的相对速度和距离,计算出来一个减速度值。

我们将这个减速度值作为输入,刹车力值作为输出,可以通过测试得到一个一维的曲线关系,如下所示。

如果将刹车时刻也考虑进来作为输入,那么会是一个二维的Map,如下图所示:

下图中Row考虑的是TTC刹车时刻,Column考虑的是减速度值,两者一起纳入考虑,最终决定一个需要的刹车力值。

(该表尚未标定,需要进行很多次测试,才能填出此表。)

最后,本案例仅用来演示简单功能的AEB实现,了解从算法设计到仿真测试的完整流程。关于更详细的算法设计,此处不再展开。

本文完。

原创申明:本文原文发在vx公众号【车路慢慢】,图片多来自软件截图,是自己学习过程中的一点学习笔记,若有侵权,请联系删除。

标签: aeb喷轨气温传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台