自动驾驶仿真(七)—— ADAS HIL仿真测试及基于CANoe的交通信号灯仿真

2024-02-16 01:30

本文主要是介绍自动驾驶仿真(七)—— ADAS HIL仿真测试及基于CANoe的交通信号灯仿真,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自动驾驶仿真七——ADAS HIL仿真测试及基于CANoe的交通信号灯仿真

  • 1. ADAS HIL仿真测试
    • 1.1 HIL仿真测试工具链
    • 1.2 摄像头暗箱仿真测试
  • 2. CANoe软件仿真
    • 2.1 简单的开关和灯仿真实例
    • 2.2 交通信号灯仿真实例
  • 3. 参考学习的书目教材

博主前面的博文已经简要介绍了Carsim、Prescan 与 Simulink 在 “V”型开发中MIL、SIL的应用,对于同样重要的HIL硬件在环仿真测试,就在本篇博文来讲讲,这次主要介绍ADAS HIL仿真测试的相关知识,以及基于CANoe实现交通灯仿真的实例。

1. ADAS HIL仿真测试

高级驾驶辅助系统(Advanced Driver Assistance System,ADAS)是一项重要的主动安全措施,在有效提高汽车安全性和舒适性的同时,也是向高阶汽车自动驾驶方向发展的基础。目前新的车型越来越多的都搭载了ADAS,如何确保ADAS的可靠性和安全性是需要关注的一个关键问题,因此对ADAS的测试是必不可少的部分,目前针对ADAS的测试主要包括实车测试以及硬件在环(Hardware-in-Loop,HIL)测试两种手段。
在传统的测试台架中,缺少对 ADAS 的仿真方案,大多数ADAS 功能测试只能在实车上进行, 但是实车测试存在测试周期长、安全隐患大、测试难度和测试成本高等缺点,同时,整车开发周期的加速,也对ADAS测试提出了更高的要求。
而HIL测试技术具有测试周期短、成本低、能够模拟极限危险工况等优势。因此,研发高效率的ADAS的HIL测试手段对ADAS研发具有重要意义。在整车 ADAS 功能的 HIL 测试中,关注的最主要是传感器仿真和虚拟车辆模型。

1.1 HIL仿真测试工具链

参考博主公司实际ADAS HIL测试方案,其实简单的ADAS HIL测试方案的工具链可主要分为三类:自动驾驶仿真软件 prescan/carmaker/carsim、simulink、CANoe,以上三者进行联合仿真的,可以开展1V单摄像头的暗箱测试,或者是1V1R的同时带雷达的仿真测试。
1)对于自动驾驶仿真软件,无论是用的是prescan/carmaker/carsim等,主要是用于搭建被控对象车辆模型,建立自动驾驶仿真场景模型等。
2)Simulink 需要首先做好和CANoe的配置,参考下图,讲将CANOE和Simulink的接口文件进行正常安装配置即可<Vector_AddOn_Matlab_Interface_V612.exe>,安装完成后,便可在Simulink中查看到Vector CANoe的功能模块。在Simulink中会搭建车辆信号,与ADAS控制器信号的接口进行交互。
在这里插入图片描述

3)Canoe中主要负责搭建CAN通信网络相关的仿真环境,将网络报文等发送给ADAS控制器与接收ADAS控制器发出来的控制信号等。

1.2 摄像头暗箱仿真测试

就刚才提到的摄像头暗箱仿真测试,摄像头仿真有两种方法:视频暗箱和视频注入。两种方式各有优缺点,在视频注入模块,直接将系统仿真的视频信号通过视频注入模块传输到摄像头,这种方法的优点在于视频流信号可以不失真的传入摄像头,不受周边环境影响;缺点是需要定制的视频注入模块,成本较高。另外一种方式是直接让摄像头识别显示屏上的显示的系统仿真的视频,这种方法的优点在于不需要专门的视频注入板卡,成本较低,但是需要根据显示屏的大小,精确的设定摄像头的摆放位置和角度,同时显示屏的频率有可能会造成图像识别的延迟,这些也都是需要关注的点。
在这里插入图片描述

参见上图,视频暗箱主要由暗箱、滑轨、显示器、透镜、摄像头及相关支架、底座组成。前面已经提到在暗箱测试中,摄像头和显示器等的摆放位置和角度等是很重要的,这里就涉及到相关标定工作,摄像头标定分两步走:分别是粗标和细标。粗标是指视频暗箱里的显示器、透镜、摄像头位置和高度的标定,保持摄像头、透镜和显示器的中心在一条水平线上;细标是指交通场景中车辆运行摄像头拍摄道路车道线的标定。在实际的ADAS HIL测试中,是以实时处理器运行仿真模型,然后通过I/O接口与被测ADAS控制器通信,通过视频暗箱中的摄像头采集视频信号来模拟实车行驶环境,使控制器误以为处于实车环境中,从而达到对ADAS控制器测试的目的。

2. CANoe软件仿真

德国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。

2.1 简单的开关和灯仿真实例

《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的开关控制。
在这里插入图片描述

以下为动画gif示意:
在这里插入图片描述

2.2 交通信号灯仿真实例

上一个小节只是介绍了单个开关和灯的简单例子,如果大家思考下,基于上面的主要建模思想,去拓展到更贴近实际的应用实例场景,大家回想到什么呢?或许一千个读者就有一千个哈姆雷特,不过博主当时做这个拓展思考的时候,首先想到的就是流水灯,因为博主之前写过一篇嵌入式开发博文就是以流水灯做的示例。所以当时非常自然地想起来流水灯的改编拓展,感兴趣的小伙伴同样可以查看我前面的该片博文。
《汽车电子技术——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编程控制实现,实现交通信号灯开关控制的逻辑。
在这里插入图片描述

然后就是可以运行测试与查看Trace仿真情况。
在这里插入图片描述

同样给出动画gif示意:

在这里插入图片描述

3. 参考学习的书目教材

  1. 《CANoe开发从入门到精通》 杨金升 编著
  2. 《基于ADAS_HIL系统的典型测试场景提取和场景库搭建》孟醒 2020年硕士论文
  3. 《高级驾驶辅助系统硬件在环测试平台研究》郑刚
  4. 《驾驶辅助系统硬件在环仿真技术发展现状》曾杰
  5. 《基于dSPACE的高级驾驶辅助系统测试技术研究》张琪 2018年硕士论文

=文档信息=
本学习笔记由博主原创整理编辑,仅供非商用学习交流使用
由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :zhudj
文章出处:https://zhudj.blog.csdn.net/

这篇关于自动驾驶仿真(七)—— ADAS HIL仿真测试及基于CANoe的交通信号灯仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713112

相关文章

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne