郭健忠,官雨,谢斌,闵锐,袁嘉泽
(1.武汉科技大学汽车与交通工程学院,湖北武汉 430065;2.武汉保华显示科技有限公司,湖北 武汉 430082)
汽车仪表已经成为智能座舱的信息交互中心,不仅是人车交互的重要接口,也是重要的行车安全配置,驾驶员通过从汽车仪表上获取车辆的实时运行状态及相关信息,来确保车辆的行车安全性;因此,汽车仪表能够实时并准确地显示车辆的各种行车参数是极为重要的[1-2]。得益于汽车行业的快速发展,汽车仪表正快速从数字组合式仪表向全液晶虚拟仪表、智能座舱方向发展[3]。随着新能源车的不断推广,汽车辅助驾驶系统配备摄像头和毫米波雷达已经逐渐普及,目前辅助驾驶系统主要满足L2 级别自动驾驶,其中包括并线辅助、跟车辅助等功能,其中部分功能需要驾驶员将部分驾驶操作交由辅助系统完成,这会导致驾驶员对行车安全产生顾虑,仪表场景重构能够在仪表上显示本车四周的车辆和车距信息、车道信息及操作报警信息[4-5],为了便于驾驶员可视化控制辅助驾驶系统和减少安全顾虑,通过实现仪表内场景重构技术将辅助驾驶系统可视化是迫切需要的。
三维场景重构的研究主要涉及信号采集端,通过摄像头、雷达等设备采集数据,将数据处理整合,实现对周围道路环境的实时建图,而使用建图数据在仪表显示端实现场景重构,目前研究还处于刚起步的阶段。
目前大部分汽车仪表没有场景重构技术,小部分实现了二维场景重构技术,只有极少数以特斯拉为首的新能源汽车品牌的虚拟仪表加入了三维场景重构技术。
实现场景重构技术的开发方法主要有裸机、Qt两种;其中裸机开发方式可以通过图片堆叠的方式实现二维场景重构技术,Qt 开发方式不仅可以通过贴图实现二维效果,还可以通过Qt Creator 导入3D模式实现三维效果。
随着汽车智能座舱的不断发展,二维场景重构虽然能够显示大部分信息,但还存在车道信息显示不全面和平面图片显示效果不流畅的问题,因此需要通过三维场景重构方式来完善仪表上的辅助驾驶系统信息及效果。由于需要在仪表上实现三维场景重构技术,显示素材需要从二维图片转变为三维模型;传统的贴图式仪表开发方式已无法满足功能要求,对于当下较为流行的Qt 开发方式,由于Qt 是适用于各个行业的GUI 应用程序框架[6],所以Qt的库非常庞大,无法满足汽车行业仪表轻量化的要求[7]。
KANZI Studio 是中科创达旗下Rightware 公司专为汽车人机界面(HMI)所建立的软件开发平台[8-9],使用KANZI 设计仪表的汽车品牌有玛莎拉蒂、梅赛德斯、奥迪等大型汽车品牌,同时包含蔚来等新能源品牌。KANZI Studio 对OpenGL 进行封装,实现了2D和3D 的无缝合成[10],无需编写代码即可进行可视化编辑,可以实时预览和设计高级动画效果;具有完善的图形渲染引擎,可对3D 模型进行编辑渲染[11];同时支持Shader 代码编程,通过顶点着色器和片段着色器控制3D 模型;得益于KANZI 的开发框架,场景重构可以分层开发并支持移植到其他项目中,极大地减少开发维护和移植难度。
通过广泛的调研,针对汽车仪表上的三维场景重构技术实现,KANZI Studio 开发工具具有显著的优势。
场景重构前期需要建立数学坐标系模型,通过数学参数明确坐标系内元素的关系;同时需要明确硬件平台上相关显示参数的数据意义及来源;最后需要引入Shader 编程概念来渲染3D 模型。
三维场景重构,从动态视觉上可以区分为四周车辆和车道线两个部分;行车场景示意图如图1所示。
图1 行车场景示意图
由于车辆主要向前行驶,该方向上速度较快,辅助驾驶系统主要控制车辆高速行驶下的安全性,汽车仪表上场景可视区域有限,因此在场景重构上,不考虑本车后方的行车场景;为简化场景,避免场景中元素过多对驾驶员产生视觉干扰,因此,该文场景重构主要考虑本车车道和相邻两车道,对于车辆显示,也最多只显示前车、前前车、左车和右车四个目标物的车辆信息,其中车辆类别包含汽车、货车、摩托车、自行车四种主要道路车辆,以上是简化后与驾驶场景密切相关的元素。
虽然是三维场景,由于摄像头和毫米波雷达仅能对水平方向物体进行检测,对于角度较大的坡道,与目标物存在垂直方向的距离,暂且无法准确识别,故暂不考虑三维场景下坡道角度的影响。三维场景相较于二维场景,垂直方向增加了车辆模型的高度显示;因此,对于车道上车辆之间的距离关系和车道线位置关系,可以通过俯视视角简化成二维坐标系模型,如图2 所示。
图2 二维坐标系场景模型
以本车后轴中心作为坐标系原点,对于目标物车辆的识别,通过目标物后轴中心与本车后轴中心的X向距离与Y向距离可以确定目标物车辆的坐标,然后根据摄像头识别到的车辆信息确定目标物的车辆显示类别和车辆转角,通过四个参数即可确定一个目标物的显示信息。
车道线从数学角度描述,就是一条圆滑的抛物线,由于车道线不需要太高精度,所以三次函数表达式可以体现车道线的位置和弯曲程度,公式如式(1)所示:
通过a、b、c、d四个系数即可表达一条车道线的全部轨迹,但是在实际道路上,车道线并不是如函数表达式一样无限延长的,在某些道路条件差或摄像头视野受限的条件下,车道线实际显示为一条线段或不显示,因此,加入X_start和X_end 两个参数,可以描绘出车道线的起始位置和结束位置;加上车道线类别参数一共七个参数即可表达出一条车道线的显示信息。
车道线信息和目标物车辆信息是由本车摄像头和毫米波雷达采集后,经过辅助驾驶系统ECU 处理后,将图像信息转化成数学数据,再将数据通过CAN总线发送到仪表端[12],仪表端对收到的CAN 报文进行解析即可提取出车道线和目标物信息数据用于显示,由于CAN 报文只能发送正整数数据,而曲线的系数精度需要小数,目标物、车道线相对本车中心原点靠左或靠右,需要使用正负数表示,所以需要在数据协议上明确定义,将CAN 报文上的数据提取出来后需要进行缩放和偏移操作才能得到实际显示用的数学数据。
KANZI 支持OpenGL 开放图形库,在OpenGL ES2.0 版本之后,支持可编程管线,而Shader 着色器能够替代固定渲染管线的可编程程序来实现图像渲染;着色器主要分为Vertex Shader 顶点着色器和Fragment Shader 片段着色器,顶点着色器主要负责模型顶点数据的数学运算,片段着色器主要负责模型面片着色参数计算;抛弃传统固定式渲染管线的限制,通过Shader 着色器的可编程性,能够实现3D模型相关参数的计算,并能够通过编辑Shader 实现不同的3D 显示效果[13]。目前Shader 语言主要为GLSL[14];得益于KANZI支持OpenGL的特性,在KANZI Studio 上可以直接修改Shader 代码,KANZI底层便会调用OpenGL 的接口进行流水线渲染管线操作,实现对3D 模型形状和颜色的更改。
三维场景重构的实现,需要通过KANZI Studio的节点对显示元素进行分层级设计,使用Shader代码控制3D模型的变化上色,添加动画美化场景效果。
KANZI Studio 支持节点模块化设计,实现三维场景重构流程如图3 所示。
图3 场景重构实现流程图
1)需要在KANZI Studio 中创建一个场景用来容纳场景中的元素,需要创建一个平面Viewport 2D 视图节点,用来显示场景,然后在视图节点中创建Scene 场景节点,用来显示3D 模型。
2)需要将3D 模型导入到工程之中,KANZI Studio支持COLLADA(.dae)、Filmbox(.fbx)和(.obj)三种3D 文件格式;由于3D 模型是由数以万计的三角形面片组合而成,所以在制作或选择3D 模型时,需要考虑硬件条件,查看GPU 最多支持同时计算的总面数,防止面数过大导致性能下降产生显示效果卡顿。
3)KANZI Studio 支持模块化设计,可以通过节点单独控制每一个显示元素,并且支持通过节点更改元素显示层级和优先级,该文显示层级如图4所示。
图4 元素层级设计图
场景下使用Plane 节点创建一个充满四个顶点的平面网格,在网格下创建空3D 节点用来分类存放元素,然后在空3D 节点下创建Model 节点用来将3D模型添加到工程之中;如图使用五个空节点将显示元素分为车道线和四个目标物,Road_Line 节点下存放了四个Road 节点用来显示四条车道线;Target 节点包含控制坐标和颜色的两层空节点、目标物车辆模型和车辆阴影模型,因为实际场景物体均存在阴影,添加车辆阴影模型能够提高场景的真实感。由于目标物处于车道线的上方,则将目标物节点放置于车道线节点下方。其余包含本车在内的静态图片依次通过节点排列在下方。
4)3D 模型本身是由无数面片组成的物体,不具有特殊显示效果,给3D 模型贴上纹理,模型才能显示正常的物体属性,还需要加入光照,照亮场景,模型才能正确地显示出来;KANZI Studio 支持平行光、点光源和聚光灯三种光源。
5)添加属性控制,前四步属于静态设计,为了实现动态效果,需要将信号数据导入KANZI Studio,通过数据绑定或状态机控制实现车辆模型的改变、运动及变色,同时将数据传入Shader 代码控制车道线。
6)编辑Shader 渲染代码,根据信号数据,实现车道线3D 模型的变化、着色。
7)通过调整节点、调整光照、加入车道线动画和引入抗锯齿来优化场景重构的显示效果。
通过以上七步即可使用KANZI Studio 实现三维场景重构技术,具体细节需要根据对应项目功能需求规范做细节调整。
在KANZI Studio 中,可以自定义材质和材质类型,可以选择3D 模型使用哪一种材质和其对应的材质类型,每一种材质类型都有一个顶点着色器和片段着色器,控制使用该类别材质的模型变形、着色。顶点着色器有输入和输出两个部分,主要把输入的顶点数据,根据Shader 代码进行矩阵变换位置,再将位置信息传送给片段着色器,片段着色器则根据代码处理由光栅化阶段生成的每一个片元,最后计算出每个像素的颜色用作显示。车道线变形流程如图5所示。
图5 车道线变形实现流程图
创建对应的材质和材质类型;导入车道线控制参数如a、b、c、d等数据到顶点着色器代码中;传入代码计算所需要的车道线各个顶点的三维数据信息;编写车道线变形计算函数,通过控制参数组成的一元三次方程计算出新的顶点数据信息;最后传出新的顶点数据信息。
通过顶点着色器,已经可以将一条未截断的车道线画出,但车道线还存在长短、实线或虚线情况,所以需要引入剩余的X_start、X_end 和车道线类型三个信号数据用于模型上色,车道线着色流程如图6所示。
图6 车道线着色实现流程图
需要传入各个顶点数据;导入上述提到的三个车道线控制参数和车道线颜色信息;通过编写片段着色器代码实现着色逻辑,其中,根据起始点和结束点对范围以外的部分不予上色,对范围内的部分根据车道线类别实现间隔上色或全上色;最后传出计算后的车道线各个片段的颜色信息用作着色。
通过上述两种着色器可以得到包含每个顶点的坐标信息和顶点对应片段的颜色信息两组信息,然后通过KANZI 调用OpenGL接口实现周期性循环渲染。
在人们的视觉感官中,存在着物体近大远小的视觉效果,而在KANZI Studio 中,为了体现这一效果,无需对目标车辆进行缩放,只需要添加摄像机,设置3D 场景的显示角度,将视角从俯视转变成前视,即可实现近大远小的视觉效果。
对于物体光照,需要考虑3D 模型的反射系数,如果光照太强,则会在3D 模型表面产生强烈反射导致无法显示模型本体颜色;还需避免点光源造成的各个模型光照方向不一样产生的失真感;该文采用低强度的平行光能够避免上述提及的两个问题。
在行车过程中,如果车道线不能移动,观感是较差的,通过添加动画控制offset 属性周期性变化,并将此属性传入片段着色器中,通过offset 实时改变分段上色的部分,即可实现视觉上的车道线移动。
对于车道线首尾两端过渡生硬的问题,可以在片段着色器中渐进改变车道线首尾两端各点颜色信息中的透明度参数实现边缘的透明圆滑过渡。
由于车道线模型顶点数量有限,当远处车道线弯曲程度较大时,由于屏幕像素点有限,会出现车道线断开不连续的情况,KANZI Studio 支持对节点的渲染通道设置,通过改变渲染采样倍率和采样等级可以实现车道线边缘模糊化,解决车道线断开的问题,设置渲染通道需要考虑硬件支持情况及显示性能。
通过上述四种优化方式,能够增加三维场景重构效果的美观度和视觉真实感。
搭建测试台架,将包含车道线、目标物识别等信息的DBC 文件导入TSMaster 软件中,通过电脑模拟CAN 总线不断循环发送实车数据[15],实际测试台架如图7 所示。
图7 台架测试实物图
通过图片可以看出,KANZI Studio 软件电脑端设计效果与实际台架显示效果一致,能够满足三维场景重构功能开发需求。
经过24 h 循环报文发送测试,分别处于CAN 总线高负载和低负载情况下测试,仪表未出现死机、黑屏等异常现象。KANZI 插件支持在屏幕上显示实时帧率,经测试,在仪表显示三维场景重构效果情况下,KANZI 程序显示帧率能够稳定在30 帧,满足流畅运行的帧率条件。
相较于传统汽车HMI 界面开发方式,通过表1可以看出,KANZI 程序帧率能够稳定在30 帧,并且在24 h 高、低负载运行情况下均未出现黑屏、死机的情况;该程序在运行流畅性和长时间高负载下的稳定性上有明显优势。
表1 场景重构运行效果对比
传统汽车HMI 界面开发由于程序耦合关联性大[16],所以需要一个人独立开发,导致开发周期和开发难度较大;而KANZI Studio 支持分模块开发,通过合并工程可以将三维场景重构技术完全移植到另一个工程中,极大地增加了项目功能的复用性和可移植性;极大地减少了开发周期和难度;对于二次开发和维护,KANZI Studio 支持实时可视化修改,具有显著的便捷性优势。表2 为主流开发方式对比。
表2 场景重构主流开发方式对比
由于汽车实际行驶工况较为复杂,可变因素较多,虚拟仪表显示系统的运行环境与台架测试环境差别巨大,存在长时间运行、硬件环境温度高或路面条件差等情况,因此该文基于虚拟仪表显示系统的三维场景重构技术需要进行实车验证,测试此技术的稳定性及准确性。
台架测试稳定后,将程序烧录到实车硬件上,实车测试使用的是上海某汽车企业的测试用车,在城市铺装道路上进行测试,测试效果如图8 所示。
图8 实车测试效果图
图中,仪表中部三维场景重构能够正确显示车辆前方、左侧及右侧目标车辆的位置信息、类别信息,并且能够正确显示车道线类别信息和弯曲情况,肉眼观察显示效果无延迟。具体实车测试如表3所示。
表3 场景重构显示测试
经过500 km 不断电连续测试,测试过程中,未见三维场景重构效果产生显示错误或显示延迟问题;并且在虚拟仪表高负荷长时间运行的情况下,未出现仪表死机、黑屏等严重现象。
因此,经过实车验证,此三维场景重构技术能够满足行车过程中显示的准确性及稳定性,符合显示功能要求。
该文使用KANZI Studio 开发工具,提出了一种虚拟仪表三维场景重构技术的开发方法,创新和特色如下:
1)在汽车仪表端实现了三维场景重构技术,将三维场景重构研究引入到显示端,为汽车智能座舱的相关研究奠定了基础。
2)该方法能将开发周期缩短为传统方法的50%,降低开发难度和减少开发周期,能够在满足功能要求的条件下实现稳定30 帧流畅运行。
3)该方法二次开发周期短,可移植性强,为后续三维场景重构技术的优化和再开发提供了原型与经验。