高级驾驶辅助系统(Advanced Driver Assistance System,ADAS)是一项重要的主动安全措施,在有效提高汽车安全性和舒适性的同时,也是向高阶汽车自动驾驶方向发展的基础。目前新的车型越来越多的都搭载了ADAS,如何确保ADAS的可靠性和安全性是需要关注的一个关键问题,因此对ADAS的测试是必不可少的部分,目前针对ADAS的测试主要包括实车测试以及硬件在环(Hardware-in-Loop,HIL)测试两种手段。
在传统的测试台架中,缺少对 ADAS 的仿真方案,大多数ADAS 功能测试只能在实车上进行, 但是实车测试存在测试周期长、安全隐患大、测试难度和测试成本高等缺点,同时,整车开发周期的加速,也对ADAS测试提出了更高的要求。
而HIL测试技术具有测试周期短、成本低、能够模拟极限危险工况等优势。因此,研发高效率的ADAS的HIL测试手段对ADAS研发具有重要意义。在整车 ADAS 功能的 HIL 测试中,关注的最主要是传感器仿真和虚拟车辆模型。
参考博主公司实际ADAS HIL测试方案,其实简单的ADAS HIL测试方案的工具链可主要分为三类:自动驾驶仿真软件 prescan/carmaker/carsim、simulink、CANoe,以上三者进行联合仿真的,可以开展1V单摄像头的暗箱测试,或者是1V1R的同时带雷达的仿真测试。
1)对于自动驾驶仿真软件,无论是用的是prescan/carmaker/carsim等,主要是用于搭建被控对象车辆模型,建立自动驾驶仿真场景模型等。
2)Simulink 需要首先做好和CANoe的配置,参考下图,讲将CANOE和Simulink的接口文件进行正常安装配置即可
3)Canoe中主要负责搭建CAN通信网络相关的仿真环境,将网络报文等发送给ADAS控制器与接收ADAS控制器发出来的控制信号等。
就刚才提到的摄像头暗箱仿真测试,摄像头仿真有两种方法:视频暗箱和视频注入。两种方式各有优缺点,在视频注入模块,直接将系统仿真的视频信号通过视频注入模块传输到摄像头,这种方法的优点在于视频流信号可以不失真的传入摄像头,不受周边环境影响;缺点是需要定制的视频注入模块,成本较高。另外一种方式是直接让摄像头识别显示屏上的显示的系统仿真的视频,这种方法的优点在于不需要专门的视频注入板卡,成本较低,但是需要根据显示屏的大小,精确的设定摄像头的摆放位置和角度,同时显示屏的频率有可能会造成图像识别的延迟,这些也都是需要关注的点。
参见上图,视频暗箱主要由暗箱、滑轨、显示器、透镜、摄像头及相关支架、底座组成。前面已经提到在暗箱测试中,摄像头和显示器等的摆放位置和角度等是很重要的,这里就涉及到相关标定工作,摄像头标定分两步走:分别是粗标和细标。粗标是指视频暗箱里的显示器、透镜、摄像头位置和高度的标定,保持摄像头、透镜和显示器的中心在一条水平线上;细标是指交通场景中车辆运行摄像头拍摄道路车道线的标定。在实际的ADAS HIL测试中,是以实时处理器运行仿真模型,然后通过I/O接口与被测ADAS控制器通信,通过视频暗箱中的摄像头采集视频信号来模拟实车行驶环境,使控制器误以为处于实车环境中,从而达到对ADAS控制器测试的目的。
德国Vector公司的汽车总线开发工具CANoe (CAN Open Environment), 是世界上公认的汽车总线开发、仿真、测试和诊断的工具。在当今的汽车工业领域,恐怕没有一款软件比CANoe更具有知名度和权威性,在国内的整车厂和零部件供应商范围内也都在广泛使用。
CANoe 用于CAN、Ethernet、Flex Ray、LIN 等总线网络的开发。CANoe 在总线网开发、测试和分析中广泛使用。CANoe软件主要由DBC 数据库编辑器(CANdb++ Editor) 、面板编辑器 (Panel Edit) 、主窗口、CAPL 程序生成器、CAPL 浏览器 (CAPL Browser)等部分组成 。DBC 数据库编辑器用来编辑报文和信号的信息,编辑完成的DBC数据库可以在 CANoe 中导入,自动生成网络节点并将其中的报文和信号导入整个网络中,面板编辑器的控件可以链接信号和环境变量用来显示和控制信号和环境变量,CAPL可以对程序信号和环境变量进行处理,实现控制面板和报文之间复杂的面交互动作,形成一个仿真测试平台。
CANoe还可以通过硬件设备和真实的CAN网络进行通信,可以通过真实的CAN网络进行监测、仿真和测试工作。CANoe在汽车CAN网络开发、仿真和测试中广泛使用。
下面就开始介绍CANoe的仿真实例,首先介绍下简单的开关和灯的仿真,之后拓展成为交通信号灯的仿真实例。由于是很早之前安装的CANoe,博主本次使用版本是CANoe 12.0。
《CANoe开发从入门到精通》这本教材不错,是苏州博世的杨金升老师编著,是国内第一本关于CANoe的图书。开篇小例子就是《canoe开发从入门到精通》书中的经典开关和灯的仿真实例了。CANoe仿真基本工程流程如下:
创建第一个仿真工程,
创建网络节点
添加CAN数据库
定义系统变量
创建面板
CAPL编程
运行测试与查看Trace
下面就开始讲解下主要的仿真流程,这里就正常创建一个CAN 500Baud 1ch的新建工程,然后新建两个ECU节点,名称分别改称Switch、Light。
然后数据库就选择CANtemplate即可,完成开关报文Msg1和信号bsSwitch的建立以及关联配置。
紧接着是定义系统变量,svSwitch和svSwitch均创建在同一个MyNamespace下。
然后是创建面板,建立开关和灯,并将系统变量关联绑定在一起,因为系统变量是panel和ecu联系的桥梁,panel必须与信号或系统变量绑定在一起,不然无法传递信息给到ecu。
CAPL编程:CAPL全称Communication Access Programming Language ,是Vector为CANoe开发环境设计的类C语言。CAPL要和CANOE中的一个节点绑定在一起。它的文件后缀是.can。CAPL语言的一大特点是有事件控制进行的,只有事件发生时,才会触发执行指定的程序。本例中主要是涉及的两类事件触发:系统变量sysvar和CAN报文message。
上面都完成后,就可以开始运行测试与查看Trace,可以通过鼠标左、右键来进行switch的开关控制。
上一个小节只是介绍了单个开关和灯的简单例子,如果大家思考下,基于上面的主要建模思想,去拓展到更贴近实际的应用实例场景,大家回想到什么呢?或许一千个读者就有一千个哈姆雷特,不过博主当时做这个拓展思考的时候,首先想到的就是流水灯,因为博主之前写过一篇嵌入式开发博文就是以流水灯做的示例。所以当时非常自然地想起来流水灯的改编拓展,感兴趣的小伙伴同样可以查看我前面的该片博文。
《汽车电子技术——ECU/MCU嵌入式软件开发》
乃至在思考贴进自动驾驶相关如V2X相关的功能:红绿灯预警、绿波通行等,那就很自然联想到交通信号灯。流水灯及交通信号灯也都是相似的,即按照某一特定的时间间隔,控制不同信号的灯做交替开关。
Ok idea已有,那是怎么实现呢?这里就涉及到信号的控制逻辑,博主嵌入式流水灯的控制主要是通过C编程控制实现,那么在CANoe里,就肯定是对应Vector CANoe的类C语言开发环境设计——CAPL。
前面已经说到CAPL语言的一大特点是有事件控制进行的,只有事件发生时,才会触发执行指定的程序。而涉及到时间逻辑的事件控制,我们就可以使用定时器(on timer)来实现。下面就是交通信号灯的主要控制逻辑图:
为了实现以上的程序逻辑,我们需要增加相应的信号量及系统变量等相应设置,以及CPAL控制程序的编程实现。本例中时间间隔设置:T1=2s,T2=2s,T3=1s。这与实际的交通信号灯的时间间隔不一样,在此仅作为仿真示例设置。以下为一些主要的仿真要点。
数据库中增加三种信号灯控制信号量:bsSwitch_green, bsSwitch_red, bsSwitch_yellow,完成开关报文Msg1关联配置。
最后就是关键的CAPL编程控制实现,实现交通信号灯开关控制的逻辑。
同样给出动画gif示意:
=文档信息=
本学习笔记由博主原创整理编辑,仅供非商用学习交流使用
由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :zhudj
文章出处:https://zhudj.blog.csdn.net/