自动驾驶仿真(七)—— 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

相关文章

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

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

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在