前言

本文讲下与UDS相关的Configuration模块和传感器Alignment模块。

Configuration模块即配置模块。什么叫Configuration?即在软件构建过程中,那些能够控制软件构建过程的数据(一般以参数形式存在)

Alignment模块即校准模块,一般指传感器外参校准;有时也把Alignment叫做EOL/Online/Auto Calibration,即下线标定、线上标定和自动标定;甚至还存在其他称呼,以下为大家梳理下概念,做个总结:

  1. 下线标定(EOL,End of Line Calibration) = 工厂标定(Factory Calibration);主要指在汽车产线生产最后阶段(机能线)对整车上各个零部件功能模块进行离线的外部几何参数标定(校准)活动。如雷达、摄像头等,都需要对pan、tilt、roll三个外参角度进行标定,消除误差。

2. 在线标定(Online Calibration) = 服务站标定(Service Calibration)。在雷达或摄像头模块更换过后,需要重新进行外参校准,消除误差。但是你总不能把车再开回工厂进行标定,所以还有个在线的标定功能,经常在4S店用,开启功能,在路上跑几圈,标定成功,这也叫服务站标定。

 

既然谈到了Calibration标定,那么标定又是什么呢? 即开发过程中,软件构建完成后,需要匹配的数据;注意只是数据,那些可执行、可编译的代码一定不是标定数据。例如,标定参数(Parameters,车辆怠速的引擎转速、发动机特性图)、车辆特性参数(自适应值,例如节流阀限位器)、配置参数(例如国家代码、左舵右舵等)。

这么比较下来,你会发现,标定(Calibration)是一个相对General(一般化)的说法。Configuration Parameter 也属于 Calibration Parameter中的一部分。实际项目中,尽量避免什么都用“标定”来形容,否则其他人容易误会!因为算法和功能的标定也叫标定,传感器外参的校准也可以叫标定、一些车辆或者系统的其他配置参数的修改,也特么能叫标定,听的人一脸懵逼!

Calibration这个词在本文中,还用在ACC/AEB/LKA等feature的功能算法标定中,为了更好的区分,本文中对传感器的标定都统一为Alignment(校准),免得跟功能标定混淆。

 

Configuration配置

ECU的Configuration模块一般包括两种配置类型。

一种是车辆配置。该Config是通过整车VCAN网络,不停发送配置参数;而Config模块也需要不停的检查当前的配置参数,看是否需要在NVM中更新。

一种是直接配置。这类配置参数通常做成DID,并通过UDS诊断服务直接向NVM中进行读写。

a. 常见配置参数大致有:

  1. 引擎配置:按排量,例如1.6L、2.0L、2.0T、HEV、PHEV、BEV等;
  2. 车型信息:例如福特的B479、B515;泛亚的SGM358/256/226;长城的CHB121、CHB071、CHB131、CHB071eAD等等;
  3. FCW的HUD功能配置:无、有、进阶FCW-HUD功能;
  4. AHBC功能配置: 关闭、打开、切到GFHB功能;
  5. LKS功能配置:关闭、LDW、LDW/LKA;
  6. LKS开关配置:直接(硬)开关、网络(软)开关;
  7. DMS功能配置:关闭、打开;
  8. TSR功能配置:关闭、仅基于视觉感知、融合感知;
  9. AEB功能配置:关闭、视觉雷达融合目标、Vision Only目标;
  10. ACC功能配置:关闭、视觉雷达融合目标;
  11. 左右舵配置:未定义、左舵、右舵,未使用;
  12. 车辆销售市场区域:未定义、欧洲、北美、亚太中国、亚太其他、非洲、澳大利亚;
  13. 挡风玻璃加热控制:通过硬开关、通过网络软开关;
  14. LKS执行器类型配置:触觉电机、EPS、AFS(主动前轮转向)
  15. 头灯类型配置:未定义、卤素大灯、激光大灯、LED大灯,未使用;
  16. 车速单位选择:未定义、kph、mph、未使用;

以上是一些常用的配置参数。这些配置参数以一定存储策略(Strategy)进行存储、修改。

一般Configuration在软件实现上很简单,因为它根本就不算一个模块,只不过是某对儿.h和.c文件构成的一个数据列表。甚至与其他一些标定参数一起,混在某个总的Data Dictionary中,没有专门区分。但我写这一系列文章主要是面向项目实战的。实战中,在系统层面,Configuration可以单独拎出来强调、描述,有很大实战意义。

 

b. Configuration的校验

配置参数的校验有很多种,一种是对一些关键参数进行检查,如果一些关键参数配置无效或者在defined timeout time计数期间仍旧没有配置完成,对应的Feature和功能就会无法打开,禁止运行;

另一种校验是对产品的硬件版本号、软件版本号、feature功能版本号进行检查,若实际HW/SW/Feature的版本号不符合DID中记录的应该具备的版本号,那么就校验出错,提醒开发人员检查。

 

 

Alignment传感器校验

这里的传感器并不是指纯粹的传感器,一般是集成了传感器模块的ECU总成模块。

记得在第一篇文章《ADAS/AD开发01 - 行业背景、概念&名词介绍、展望》中介绍过这个概念,一般Sensor指传感器,ECU指控制器(包含运算、电源、存储等一系列功能的一个较大的PCB主板,里面有 各种芯片、Flash、SDRAM、EEPROM、电容、接插件等等,也叫车载电脑)。ECU可以单独封装,也可以与传感器或执行器封装在一起,组成一个模块。在ADAS/AD相关的模块中,一般不与执行器封装在一起,都是与传感器封装。比如,封装了前视镜头模组(Sensor)+包含视觉处理算法的ECU的一个模块,就被称为智能前视摄像头模块。经常有人图方便,省去模块二字,直接说智能前视摄像头,有些外行人就会一脸懵逼,以为只是个镜头传感器。雷达模块同理。

但是,域控制器就属于比较正统的ECU,就是一个单纯的域控制器模块,外围的视觉、雷达点云信息传进去后,只做运算,输出控制量给控制执行器的ECU,然后执行器的ECU(EPS、ESP、VCU或ECM)直接控制执行器执行转向、加速、减速命令。(是不是有点像前端开发的视图控制器ViewController与视图View的关系?)

 

a. EOL Alignment

以智能前视摄像头(IFC)为例。

EOL校验这个topic有几个要点,讲清了就OK了。标定算法和具体细节就不赘述。强调干这项工作时的画面感。不强调技术本身。

  1. EOL Alignment的算法及标定步骤;
  2. EOL标定目标板和目标板信息。要知道这个目标板中画的形状(Layout)和各种几何尺寸;
  3. 目标板和车辆组成的标定台架信息。如目标板高低,距离车多远、摄像头在车上的位置,如高度、距中心轴的偏置、距离车头距离等。
  4. 存储以上标定目标板和台架几何信息的DID(基于UDS诊断服务),将DID信息填充后利用诊断仪或其他设备写入IFC中;
  5. 使用对应的UDS服务,调用EOL标定的RID(Routing Control功能),进行标定;
  6. 标定成功后,重启车辆(相当于重启了IFC),一般ECU的重启timing都是数据存储timing,自动保存标定外参和标定成功的状态值。

图1 EyeQ3 常用标定目标板

 

b. Online Alignment

服务站标定一般用于给4S店员工使用,一般都用诊断仪就能完成。太简单了,就不讲了。描绘下那种工作画面好了:

换上新的IFC模块后,诊断仪插上OBD口,向IFC发送诊断命令,设置服务站标定,当标定开始后,开车上车道线清晰、路况较好的路段,开几分钟,正常开车,不需要做其他的。等标定成功后,系统提示成功,车辆停到路边,熄火,再重启,没有报错的话,搞定!

 

Alignment算法原理:

校准原理一般都比较简单:

  1. 通过图像边缘检测,检测出目标板上的特定形状,计算出形状的收敛点(比如圆形和圆心的关系);或者直接识别出点(比如那种黑白相间的马赛克形状);
  2. 根据点与点的位置,拉一条直线,作为水平线的参考;你也知道这条线的长度以及在目标板上的位置,以及这条线距离地面的高度等;
  3. 这条线的中点一般在目标板中间,左右对称;
  4. 根据这个水平线中点和这条水平线,作为参照,对比摄像头视图图像的镜头光轴中心点距离中点的距离,生成一个带对角线的矩形。计算高度差、偏置差和翻滚角度差(Roll),再根据高度差和偏置差与摄像头与目标板水平线中点的水平距离,算出Pan和Tilt角;
  5. 若三个角度都没超出角度阈值,认为误差满足要求,记录下三个角度。
12-07 03:04