案例教学 - 硬件在环测试

通过案例教学帮助用户学习和理解测试硬件在环测试的配置和使用方法。

51Sim-One摄像头在环黑箱检测评价系统

使用说明

基本用途介绍

为满足车载摄像头选型,视觉算法优化等测试需求中,需要将摄像头置于在环测试当中,并对视觉算法或摄像头与算法结合体的工作效率与准确度进行定量分析的这类需求,我们研发了这套摄像头在环黑箱检测评价系统,该系统基于5151Sim-One所提供的强大仿真驾驶场景,旨在为各类车载摄像头,及对应的识别算法,提供包括硬件在环检测手段,量化评价手段,对比优化手段等等助力。

本产品的软硬件架构简明示意图如下所示:

黑箱内,待测摄像头的视场将被调整为刚好覆盖黑箱内安装的专业显示屏(显示屏有效长宽比根据摄像头横向,纵向视场角确定),同时,在专业显示屏内播放的51Sim-One摄像头节点画面的横向,纵向视场角也会设置为何待测摄像头一致,从而确保摄像头拍摄画面与仿真场景内理论仿真摄像头拍摄画面的一致性。

黑箱内显示屏实际受一台51Sim-One仿真服务器控制,主要负责运行51Sim-One仿真驾驶场景。该51Sim-One仿真服务器将会在测试时发送实时测试数据(包括每一帧画面的目标真值(GroundTruth))给测试计算机(模拟车载控制单元ECU),由测试计算机内的感知算法评价系统实时记录。

上图左侧即为51Sim-One实时仿真场景,而右侧则是模拟车载摄像头及视觉算法的工作画面(此处以开源算法YOLOV4为例)。

测试过程中,被测摄像头拍摄画面经由被测视觉感知算法取得的感知结果,也会被感知算法评价系统实时记录,在完成一次测试过程后,可通过算法评价系统对两份对应的记录结果(感知结果与仿真真值)进行对比评价,并可视化各个指标的评价结果。

感知结果与仿真真值的记录文件为json文件,具体的内容与格式将在本文后的附录部分给出详细介绍。

具体的使用过程又分为硬件准备与软件操作两个部分。

硬件准备阶段

Step 1

测试开始前,需要先将测试用摄像头与对应接线连接,并安装固定在三轴校准支架上。

Step 2

使用CameraHil上位机与我们准备的摄像头图像采集工具Camera_Calibrator来将测试摄像头的位置调整至对准专业屏幕的中心,同时确保摄像头光轴垂直于箱内屏幕。

在51Sim-One服务器上操作CameraHil三轴传动控制器控制相机位置,待准心图案与四角对准图案均重合后(如下图),即完成了相机位置的校准,可以开始下一步测试评价了。

软件使用流程

Step 1

打开测试评价软件,其界面如下所示,左侧为信息提示栏以及功能实现按钮,右侧的图表区域用于显示测试评价的统计结果:

Step 2

测试评价软件运行时会尝试连接windows系统下的51Sim-One案例,如连接未能建立、51Sim-One未运行、或案例未运行,则左侧信息栏中会提示“1Sim-One未连接”。

两台计算机通信正常且开启待测案例后,同一信息栏中的提示信息会变更为“1Sim-One已连接”。

此时,按下“识别算法”按钮,会进入由深度学习算法实现的交通识别模式。本软件还支持在交通识别模式下进行识别结果的记录与评价。

Step 3

在交通识别模式下,我们可以通过“开始评价”, “结束评价”按钮来控制进行一段案例的检测结果的记录,以及相同时间段内的目标真值(Groundtruth)的记录,记录结果会在同文件夹下的Json文件夹内。

Step 4

在点击“结束评价”后,即可通过“评价结果”按钮,将最近一次记录的识别结果与真值结果进行时间轴匹配并进行识别准确度以及漏检率的评价,并将评价结果在右侧的“基本数据”选项卡中的表格和图表内显示:

上述指标在整个测试过程中随时间变化的趋势也将被记录,并显示在“检测率趋势”选项卡的图表中:

附录

附1:视频注入评价软件与使用流程

视频注入版的评价软件界面与摄像头在环评价的界面基本一致:

下图所示为一小段示例视频的检测评价结果。

附2:Json文件记录格式

为方便接入其他识别算法,现将测试过程中生成的用于评价的识别结果文件格式内容进行公布说明。

每次点击“开始评价”与“结束评价”之间时间段内接收到的摄像头识别结果,会被记录在软件所在目录中的Json文件夹中,以当次点击“开始评价”按钮的时刻的时间戳,进行如“DetectionLog_begin2019-10-31-10-57-06.json”的命名,其内容会以“detections”为开头,每帧记录时间戳“timestamps”,当前帧的所有“bboxes”,每个“bboxes”又会记录每个识别到物体的类型, box坐标与置信度,如下所示:

同一时间段内来自51Sim-One服务器的仿真场景内的真值信息GroundTruth也会被记录于相同命名规则的json文件中(与前述记录识别结果的json对应的json即被命名为“GroundTruthLog_begin2019-10-31-10-57-06.json”),其中内容记录方式也是一致的,如下所示:

由于仿真场景的运行帧率与摄像头帧率和识别算法处理帧率会有差异,因此两份对应的json文件中记录的结果帧数也基本可以肯定是不相等的,评价软件会在评价过程中根据时间戳对识别结果和目标真值(Groundtruth)信息进行匹配,从而完成评价。

SimOne 动力学模块 NI 实时机部署操作指南

NI 动力学控制基本流程

手动控制信号首先由上位机接口程序捕获,按照动力学接口信号对接协议通过Tcp传输转发给运行在下位机上的 SimOne 动力学节点; 动力学节点经过解算将控制结果数据回传给上位机接口程序,最终作用于 SimOne 主车节点驱动仿真模型车行使;

开发环境

硬件

一台控制器 NI PXIe-8840 一张CAN板卡 NI PXI-8513 一台CAN收发器 ZLG USBCan-4E-U 一台PC机运行SimOne 一条CAN总线连接ZLG

软件
上位机:

运行 Windows 10 操作系统 NI指定GNU C/C++ compiler for x64 NI Linux RT(x86_64-nilrt-linux-gcc.exe) SimOne + VehicleDynamic_interface更名为VehicleDynamic Veristand2020 负责模型管理、部署、硬件配置,信号映射等功能

NI下位机:

运行 Linux RT 操作系统 独立动力学动态库 VeriStand Engine 负责下发模型的运行,配合CAN或DAQ板卡使用,实现信号收发

编译环境

  • SimOne 动力学模块工程目录结构

VehicleDynamic/
    ├── Build
    │ ├── build_debug.bat
    │ ├── build_release.bat
    │ ├── CMakeLists.txt
    │ ├── gen_vs_proj_ni_interface_tcp.bat
    │ ├── gen_vs_proj_tcp.bat
    │ ├── toolchain.cmake
    ├── ni_model_interface
    │ ├── CMakeLists.txt
    │ ├── cybertron
    │ ├── DataStruct.h
    │ ├── model.c
    │ ├── model.h
    │ ├── model_tcp.c
    │ ├── ni_modelframework.c
    │ ├── ni_modelframework.h
    │ ├── tcp_wrapper.cpp
    │ └── tcp_wrapper.h
    ├── Source
    │ ├── CMakeLists.txt
    │ ├── control
    │ ├── main
    │ ├── message
    │ ├── network
    │ ├── simone_interface
    │ ├── SimulationFactory.cpp
    │ ├── SimulationFactory.hpp
    │ ├── SimulatorBase.cpp
    │ ├── SimulatorBase.hpp
    │ ├── util
    │ ├── VehicleDynamic.cpp
    │ └── VehicleDynamic.hpp
  • 交叉编译 NI 动力学模块动态库
    1. 编辑 VehicleDynamicBuildtoolchain.cmake 指定交叉编译器

    1.1 指定NI SYSROOT D:WorkspaceNIoecore-i686-core2-64-toolchain-6.0sysrootscore2-64-nilrt-linux

    1.2 指定NI SDK D:/Workspace/NI/oecore-i686-core2-64-toolchain-6.0/sysroots/i686-nilrtsdk-mingw32

    1. 生成工程:执行脚本VehicleDynamicBuildgen_vs_proj_ni_interface_tcp.bat

    脚本中指定编译参数 -DWITH_SIMONE=1 -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DUSE_TCP=1

    1. 工程编译: 编辑 VehicleDynamicBuildbuild_ni_interfaceSimOneModelCMakeFilesSimOneModel.dirbuild.make

    3.1 静态库链接命令添加 “-WL, –whole-archive” 和 “-WL, –no-whole-archive” 编译选项

    3.2 VehicleDynamic/Build/build_ni_interface下执行make

    动态库生成路径:build_ni_interface/SimOneModel/libSimOneModel.so

  • 编译上位机 SimOne 动力学接口
    1. 生成工程:VehicleDynamicBuildgen_vs_proj_tcp.bat

    添加编译选项:-DWITH_SIMONE_INTERFACE=1 -DENABLE_TCP=1 -DRT_USE_TCP=1 VisualStudio工程编译VehicleDynamic_interface接口项目,生成路径:BuildbuildVehicleDynamicsimone_interface

    1. 将 生成的接口程序 VehicleDynamic_Interface.exe 更名为 VehicleDynamic.exe 并替换到 SimOne 安装包

NI 部署运行

  1. 创建VeriStand工程;

  2. ToolLauncher->SystemExplore 或 ProjectFiles->工程名.nivsprj->工程名.nivssdf 设置Controller: 网络、用户、目标机速率

  3. 添加Simulation Model

  4. 部署运行、状态监控(Project Files->工程名.nivsscr) (部署运行前需要将.dat地图文件scp到Linux RT /C/ni-rt/NIVeriStand/Models)