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


博主前面的博文已经简要介绍了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/

<think>嗯,用户想了解自动驾驶测试用例的设计和实现方法。首先,我需要回忆之前提供的相关引用内容。引用1到4提到了测试用例的不同方面,比如测试标准、设计方法、具体场景等。用户可能需要一个系统化的方法来设计测试用例,涵盖不同测试阶段和场景。 首先,我应该根据测试层次来分,比如SIL、HIL、VIL,这些在引用2中提到过。每个层次的测试重点不同,需要分别说明。然后测试用例的设计方法,像引用4提到的状态迁移法,还有场景库构建、正交试验法、边界值分析等,这些都是常用的测试设计技术。需要结合这些方法来组织内容。 接下来,测试场景的分类也很重要,用户可能需要知道如何覆盖不同的场景类型,比如交通信号、障碍物、天气条件等,这在引用1和3中有示例。同时,测试用例的实现步骤需要详细说明,从需求分析到结果分析,确保每个步骤都清晰。 还要注意用户提到的测试准备、车辆状态、执行标准等,这些在引用1中作为测试用例的详细组成部分,应该在实现步骤中体现出来。最后,生成相关问题,引导用户进一步思考,比如设计中的难点、如何保证覆盖率,以及仿真工具的选择,这些可以帮助用户深入理解。</think>### 自动驾驶测试用例设计与实现方法 #### 一、测试用例设计框架 根据自动驾驶功能特性,测试用例设计需覆盖以下维度: 1. **测试层次** - **SIL(软件在环)**:验证算法逻辑与决策能力[^2] - **HIL(硬件在环)**:评估传感器-控制器-执行器链路的实时性 - **VIL(车辆在环)**:测试整车级动态响应(如转向、制动) 2. **测试场景分类** | 场景类型 | 示例要素 | 数学建模示例 | |------------------|------------------------------|---------------------------| | 交通信号 | 红绿灯状态、倒计时 | $t_{remaining} = t_{total} - t_{current}$ | | 动态障碍物 | 行人速度、车辆切入角度 | $\theta = \arctan(\frac{v_y}{v_x})$ | | 天气干扰 | 雨雾密度、传感器噪声模型 | $SNR = 10\log_{10}(\frac{P_{signal}}{P_{noise}})$ | #### 二、测试用例设计方法 1. **状态迁移法**[^4] 定义系统状态集合$S=\{s_1,s_2,...,s_n\}$,构建状态转移图: ``` 正常行驶 --障碍物出现--> 紧急制动 紧急制动 --障碍物消失--> 恢复行驶 ``` *应用示例:AEB(自动紧急制动)测试场景设计* 2. **场景库构建法** 基于真实道路数据建立概率模型: $$P(scenario) = \prod_{i=1}^{n} P(feature_i|parent(feature_i))$$ 通过蒙特卡洛方法生成边界场景 3. **正交试验法** 对$k$个影响因素进行组合优化,减少测试用例数量: $$N = \sum_{i=1}^{m} (L_i - 1) + 1$$ 其中$L_i$为第$i$个因素的水平数 #### 三、测试用例实现步骤 1. **需求分析** - 解析功能规范(如ISO 26262中的ASIL等级) - 定义通过标准:横向误差$<\delta_{max}$,纵向响应时间$<t_{threshold}$ 2. **场景参数化** ```python class Scenario: def __init__(self, actors, weather, road_condition): self.ego_speed = 0 # 主车速度 self.obstacle_trajectory = [] # 障碍物运动轨迹 self.sensor_noise_model = Gaussian(0, σ²) # 传感器噪声模型 ``` 3. **测试执行** 在Carla等仿真平台中实现: ```python def run_test(scenario): world.load_map(scenario.map) set_weather(scenario.weather) while simulation_time < max_duration: record_data(ego.position, sensor_data) if check_collision(): return "Fail" return "Pass" ``` 4. **结果分析** 使用指标评估系统表现: $$Safety\ Score = \frac{\sum_{i=1}^{N} w_i \cdot f_i(x)}{\sum_{i=1}^{N} w_i}$$ 其中$f_i(x)$为单项测试结果,$w_i$为权重系数 #### 四、典型测试用例示例 | 测试ID | 测试场景 | 可变因素 | 通过标准 | |--------|------------------|---------------------------|------------------------------| | TC-001 | 前车急刹 | 初始距离(20-50m)、路面摩擦系数(0.3-0.7) | 碰撞避免且舒适度$jerk<4.5m/s^3$ [^3] | | TC-002 | 行人横穿 | 行人速度(1-2m/s)、光照条件(昼/夜) | 提前1.5s发出预警 | | TC-003 | 传感器失效 | 摄像头/雷达/LiDAR单点失效 | 系统降级后仍能保持车道[^1] |
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值