HIL-Sim台架CHS使用手册

本文档主要介绍HIL-Sim台架CHS(Caronsim HIL-Sim)的使用方法和SDK二次开发。台架硬件配置见:https://caronsim.com/hil_sim

CH2板卡

caronsim_hil_2_0_0

CH2板卡基础用法配置如下:

  1. SW9拨码配置为0/1/0/1的sd卡启动模式(注意拨码数字"1234"一侧为0,而"ON KE"一侧为1)
  2. SW10拨码配置为0/1/0/1,配置MAX9295加串器的IIC默认地址为80,以及GMSL2为6Gbs模式
  3. sd卡用读卡器在PC上格式化为fat32,然后在根目录下放入BOOT.BIN(固件镜像),最后把sd卡插入CH2板卡的sd卡插槽
  4. 注意风扇正确插入FAN插槽,RST开关拨ON(即靠近FAN插槽一侧)。在服务器关机状态下,把CH2板卡插到PCIe的x16插槽,此时板卡完全由PCIe插槽供电不需要外接电源
  5. 上图中有三组12路视频编号,这里推荐用“罗森版HFM四腔母头转XX”系列的mini-fakra线材来连接CH2板卡和你的域控,比较常见的情况如下:

1 2 3 4 5

CH2板卡进阶使用方法:

SW9全部为ON/ON/ON/ON状态为JTAG模式,OFF/ON/OFF/ON为sd卡启动模式,原理图如下: image-IpEI.png

SW10为OFF/ON/OFF/ON状态为I2C地址80+6Gbs模式,OFF/ON/ON/OFF状态为I2C地址80+3Gbs模式,其他模式配置见如下原理图: image-PuXt.png

两个12pin的简牛口引出了GMSL2加串器的frame-sync/frame-trigger接口以及IIC接口,方便获取对应信号,如下图: image-DmWl.png

刷写固件:把BOOT.BIN放到hil_sim_sdk/tools目录下,运行./flash.sh BOOT.BIN可以刷写CH2板卡固件,刷写完后CH2板卡会自行断电下线(你会听到咔的一声),然后你需要reboot重启服务器。

安装依赖

SDK默认运行环境为ubuntu22.04,如果是其他Linux操作系统,我们可以进行适配工作。

在ubuntu22.04系统中下载SDK后unzip hil_sim_sdk-vx.y.z.zip解压,cd进入hil_sim_sdk目录,用root运行host_install.sh脚本。host_install.sh脚本做了三件事:

  1. 更换lowlatency的ubuntu内核,并且优化系统性能
  2. 安装必要的系统依赖和pip依赖
  3. 安装Nvidia显卡驱动和CH2板卡驱动
  4. CAN卡驱动(PEAK的pcan驱动和FINTEK的f81601a驱动),如果你没有用这两种CAN卡可直接忽略

安装过程中请按照脚本提示对系统进行重启,最终输出"host_install ok!"代表脚本运行成功。

如果服务器插了CH2板卡,如果ls /dev/xdma*可以看到相关设备则代表CH2板卡驱动安装成功。

如果服务器插了Nvidia显卡,运行nvtop可以看到GPU信息代表显卡驱动安装成功。

如果服务器插了PEAK或者FINTEK的CAN卡,运行ip link show可以看到can0/can1/can2/can3这样的socketcan设备,则代表can卡驱动安装成功。

部署SDK

在config.sh中可以对SDK参数进行配置,每次修改完config.sh之后,必须运行一次./host_deploy.sh重启服务。

可以看到SDK包含了video.service(必选)、can.service(可选)和timesync.service(可选)这三个服务:

  • video.service:常驻后台服务,video.service通过共享内存接受来自decode_video_app解码后的raw图像,然后再走PCIe传到CH2板卡中
  • can.service:常驻后台服务,负责管理socketcan接口
  • timesync.service:常驻后台服务,负责管理域控和服务器的时间同步,自带基于clockdiff和ptp两种时间同步方法

在config.sh中,配置core核心参数部分:

  • HOST_USER:操作系统非root普通用户名
  • ENABLE_SERVICES:这里必选video,can和timesync服务可以不选
  • HIL_TS_SRC:回灌数据的时候可能需要给注入udp数据(比如lidar点云)打上时间戳,这就需要把域控制器和HIL-Sim台架服务器时间进行同步,然后通过hil_api.h的hil_ts_get()接口获取当前HIL_TS_SRC指定的同步时间源
    • CLOCK_REALTIME:HIL_TS_SRC就是当前系统时间,即运行date命令输出的这个时间
    • clockdiff:需要在config.sh中的timesync.service服务中配置DUT_HOST_SYNC=clockdiff,通过chronyd测量HOST服务器和DUT域控的系统时间差clockdiff,来间接获取DUT的系统时间
    • /dev/ptp0:HOST网卡时间,也就是运行sudo phc_ctl /dev/ptp0 get输出的这个时间。一般用法是基于ptp协议把DUT域控时间同步到HOST网卡上,在config.sh的timesync.serivce中配置DUT_HOST_SYNC=ptp可以自动把域控时间同步到HOST的LAN口网卡上
  • REPLAY_OR_SIM: 这里Sim模式为1
  • BIND_CPU: 在大负载的情况下,用lscpu.txt配置文件对关键进程绑定到固定CPU核心上,优化性能

在config.sh中,配置carla参数部分:

  • MASTER_TICK_US:配置carla的master节点仿真步长,根据经验5ms(200Hz)已经可以满足车辆动力学需求了,更小的值对服务器配置要求更高
  • NODE_SLAVES:以json字符串方式配置carla的slave节点,NODE_NAME为slave节点名,SLAVE_TICK_US为slave节点仿真步长(FSYNC代表仿真步长和fsync-trigger步长一致)

在config.sh中,配置video.service参数部分:

  • VIDEO_PERIOD:camera每帧时间周期,单位us
  • VIDEO_FSYNC_USE:VIDEO_FSYNC_USE=0的时候,不使用域控DUT的fsync-trigger信号,而是每隔VIDEO_PERIOD时间构造一次假的fsync-trigger信号;VIDEO_FSYNC_USE=1的时候,图像会等待域控的frame-sync/frame-trigger信号到达后才注入
  • VIDEO_FSYNC_IDX:从域控的哪一路camera获取frame-sync/frame-trigger信号
  • 12路视频每两路一组总共分成六组:0到1为一组、2到3为一组、4到5为一组、6到7为一组、8到9为一组、10到11为一组,每组的分辨率和图像格式必须相同
  • VIDEO_*_SIZE_H:头嵌入行数+图像本体行数+尾嵌入行数
  • VIDEO_*_SIZE_W:图像宽度
  • VIDEO_*_NAME:相机名字,方便在decode_video_app针对不同的相机进行不同处理
  • VIDEO_*_PATH:回放视频h264/h265文件

在config.sh中,can.service参数部分配置CHR台架自带PEAK和FINTEK的CAN卡(你可以在ENABLE_SERVICES环境变量中删除这个服务):

  • CAN_DRIVER:PEAK对应pcan,FINTEK对应f81601a
  • CAN_*:配置socketcan名称和是否为canfd

在config.sh中,timesync.service参数部分配置CHR台架自带的clockdiff和ptp的两种同步机制(你可以在ENABLE_SERVICES环境变量中删除这个服务):

  • HOST_*:这部分配置是为了让DUT域控能通过HOST的WAN口上外网
  • DUT_HOST_SYNC:选择clockdiff会在DUT域控的dut.service服务中启动chronyd服务器端,timesync.service会运行chronyd客户端去测量和DUT域控系统时间的差clockdiff,然后保存到/dev/shm/HOST_clockdiff_DUT共享内存中,从而间接获取DUT系统时间;选择ptp会在DUT域控的dut.service运行ptp4l服务端,HOST主机通过ptp4l把时间到本地网卡HOST_LAN中
  • timesync这个服务假设DUT域控是aarch64的linux操作系统,所以不支持QNX系统。修改完config.sh中timesync相关参数后,需要运行./dut_deploy.sh,该脚本会把dut_deploy目录下的dut.service服务部署的DUT域控中,域控开机自启动服务运行dut.sh

sim.sh使用

test_case使用

车辆动力学

camera内外参

can

源码二次开发

hil_api.h二次开发