陈立龙,宋建文,王 颖,曹学海,于 敏
(1三明学院 艺术与设计学院,福建 三明 365004;2克拉斯诺达尔 国立文化学院,克拉斯诺达尔边疆区 克拉斯诺达尔 350072;3吉林动画学院动画 艺术学院,吉林 长春 130012;4中国美术学院 互动艺术与技术研究所,浙江 杭州 310002;5福建江夏学院 体育部,福建 福州,350001)
据公安部交管局统计,2019年全国新领证驾驶人(驾龄不满1a)数量达2 943万人。较于庞大的驾考人员数量,驾考场地是十分稀缺的资源。因为驾驶培训场地和驾考场地差异性大,驾考人员在科目二、科目三的路考之前需要排队到驾考场地熟悉考场,这些环节的费用较高、流程耗时、路线众多、现场路况和交通状况复杂。随着计算机硬件性能、渲染引擎以及VR(virtual reality,虚拟现实)配套设备的快速发展,虚拟驾考体验应运而生。通过对驾考场地、路线、路况、车辆驾驶、流程等进行建模,实现一个支持多人在线的虚拟仿真驾考系统。
关于汽车驾驶的虚拟仿真方面已有相关的研究成果。谷新平等[1-3]采用Unity 3D作为开发平台,研发了包括车辆和行人的动态路面三维场景;谢潇[4]设计了六自由度的驾驶模拟仿真系统,并对体感算法和人体前庭评价模型进行建模,高自由度的模拟器有较好的用户体验感;顾根[5]设计了四自由度的驾驶模拟器,该系统具有较高的经济适用性;张弛[6]对训练型汽车驾驶模拟器的汽车动力学仿真技术、视景生成技术和驾驶培训系统等三个方面的关键技术进行了研究;陈彦廷[7]以实际的训练考试场地创建虚拟场景,设计了汽车运动工况、转向灯等信息状态的模拟;王磊[8]利用Unity3D和Oculus Rift模拟驾驶操作系统,实现在环路中的人机交互式仿真;杨亚联等[9]基于Unity3D和HTC Vive搭建了虚拟现实显示系统,进行汽车试验场完整环境的渲染和VR显示,显示画面良好,且驾驶员具有较高的视场角及自由灵活的观察视角,有效提升了驾驶员的沉浸感;Capustiac A等[10]提出了与运动驾驶模拟器的控制策略的仿真和验证等方面相关的模型,包括前庭系统的动力学模型,结合触觉、视觉和听觉提示,提高了虚拟驾驶的沉浸感;Bruzelius F等[11]提出了驾驶模拟器的动力学模型,以及驾驶模拟器运动平台的功能在简单性和准确性之间进行权衡的问题;阳彪[13]利用Virtools设计了汽车虚拟驾驶仿真系统,引入了驾驶行为过程的判断与处理以及声响和天气环境的模拟[12];陈旭东利用OpenGL对地形进行建模,采用光照、雾化和纹理映射融合等特效开发了汽车驾驶虚拟场景系统,加入了汽车定位导航和位置检索功能等三维地理信息元素;李明[14]使用Quest3D开发平台,进行动力学、碰撞检测、声效等方面的模拟,并使用多通道渲染输出;李穆远[15]使用Unreal Engine和罗技G27方向盘对虚拟人机交互设备输出的数据进行实时渲染;邱国鹏[16]等提出了驾考场地高清影像获取、处理与高精度地形生成的实践方案。
以上相关工作均是在单机的环境中进行场地和车辆驾驶工况的模拟,没有对多终端同时在线的各种问题展开研究,而真实的驾考环境当中,车辆众多,路况复杂。本文针对驾考场地,利用Unreal Engine引擎,构建一个基于多人同时在线的虚拟驾考系统,对汽车行驶过程中的受力情况以及多人同时在线各个终端中不同角色的车辆的平顺性进行模拟。通过上述研究,进一步增强了用户体验感,驾考人员可在线上提前熟悉考场、车辆操控等环节,通过模拟训练,学习驾考中的各种标准化流程。本系统在一定程度上能缩短训练周期,减少车辆耗损,节约社会成本。
根据牛顿第二运动定律公式:F=ma,加速度的产生是汽车在行驶的过程当中受到的各种作用力(驱动力和汽车行驶阻力)的综合作用的结果,车辆的加速度受到驱动力和各种阻力的共同影响。
(1)驱动力
其中:Ttqigi0ηT是驱动力矩;Ttq是发动机扭矩;ig是变速器传动比;i0是主减速器传动比;ηT是传动系的机械效率;r是车轮半径。
(2)空气阻力
Far=-S2×Cd,空气阻力与速度方向相反,其中 S是速度(标量),Cd是风阻系数(kg/m)。
(3)滚动阻力
Frr=Crr×Fn,滚动阻力与速度方向相反,其中Crr是滚动阻力系数,Fn是正向力。
(4)坡度阻力
汽车在坡道路面上行驶时,其重力沿道路方向的分力For=G×sinα(其中α为坡道的角度)表现为汽车的坡度阻力。
(5)惯性阻力
汽车加速行驶时,克服其质量加速运动时的惯性力,这就是加速阻力Fir。加速阻力包括平移质量的惯性力和旋转质量的惯性力偶矩,为了便于计算,一般把旋转质量的惯性力偶矩转化为平移质量的惯性力。
Fir=(mcar+mea)a,其中mea是车辆旋转部件的等价质量,计算方式如下
其中:Iw是车轮和车轴的极惯性矩(取值 2.7 kg·m2);Ip是传动轴的极惯性矩(取值 0.05 kg·m2);Ie是引擎的极惯性矩(取值0.2 kg·m2)与飞轮和离合器的极惯性矩(取值0.5 kg·m2)之和;ηf是主减速器的机械效率;ηt是传动系统的机械效率;ig是变速箱减速比;if是主减速器减速比;rw是车轮半径。
车辆转向与车辆速度相关,车辆静止时,不允许转向;运动时,方向盘转向角度固定的前提下,无论速度大小,转向半径是固定的,如图1所示。
图1 车辆转向
Δx=(Uvf×V)Δt,其中 Uvf为速度方向的单位向量,V 为速度向量,Δt为帧间隔。
Δθ=(Δx/Rt)Ts,其中 Rt为转向半径,Ts为方向盘转向行程。
如图2所示,旋转向量vr=Δθ×e,其中e为旋转轴单位向量,Δθ为旋转弧度,转向的时候,速度向量跟随旋转向量进行变换。
图2 旋转向量
本系统基于Unreal Engine实现,Unreal Engine中多人同时在线机制基于 “客户端-服务器”模式。如图3所示,服务器(Server)担当角色状态的主控者,而连接的客户端(Client)保持近似复本,Server可将车辆状态同步到所有Client上。角色除了服务器中的主控者(ROLE_Authority)之外,还有Client端中的他机所控制的ROLE_SimulatedProxy与本机所控制的ROLE_AutonomousProxy。Server中控制的Car-s在Client中都是SimulatedProxy角色;而在Client1中控制的Car-c1,在Server中是Authority角色,在Client2中是SimulatedProxy角色;Client2同Client1。
图3 客户端-服务器模式
不同终端的硬件性能的差异导致帧率的各不相同,所以模拟出来的本机车辆的加速度不停地在与服务器同步的过程中,随着时间的累积,本机与服务器的车辆势必产生不同的速度,进而导致车辆位置的不同步;同样的,转向角度的不同步会进一步加大位置的偏差,所以需要让服务器周期性地与ROLE_AutonomousProxy进行状态同步。
不管是本机通过RPC(远程过程调用)与服务器进行通信还是服务器在固定周期时更新客户端的状态,网络传输的过程中间必然带来延迟,从而导致本地控制的ROLE_AutonomousProxy产生剧烈抖动。ROLE_SimulatedProxy是根据上次从服务器获得的速度,利用更新的间歇进行移动模拟。当服务器为特定的ROLE_SimulatedProxy发送更新时,客户端将向着新的方位调整其位置,如图4所示,此时也必然带来剧烈抖动的现象。
接下来讨论如何克服服务器在与ROLE_Autonomous Proxy和ROLE_SimulatedProxy同步的时候所产生的抖动现象,使得车辆在所有终端中都能保持平顺性。
图4 抖动现象产生的原因
服务器不应该在每次更新时同步客户端,这会消耗太多的带宽和CPU资源。为了在性能与用户体验(位移大小)之间取得平衡,本系统设置服务器的同步周期为1 s。如图5所示,假设曲线X为本机所控制的ROLE_Autonomous Proxy模拟的直线运动轨迹,Xrep(rep为repeat简写)为服务器端同步到ROLE_AutonomousProxy的状态轨迹。
为了防止在同步时ROLE_Autonomous-Proxy车辆发生抖动,本文提出了一种滞后补偿算法:将用户控制车辆的每一帧的运动模拟的相关信息(包括时间戳)进行记录,并通过RPC同步到服务器,服务器周期性地将状态更新回客户端时,传回服务器端最新一次模拟的运动,将清除本地早于此时间戳的运动记录,同时,重新计算时间戳之后的运动轨迹,确保本地车辆的位置始终领先于服务器同步回来的状态。算法详见图6。在系统实际运行中,服务器的主控者角色可能出现一些意外状况,如图5中Xrep曲线的拐角处,呈现的是服务端车辆与其他车辆相撞而突然短时间停滞不前的状况,此时本地车辆基于服务器更新回的车辆状态信息(变换信息、速度、最新执行的移动)进行模拟之后,将与原本位置和朝向都不一致,必然在视觉上产生一个明显的抖动现象。但这并不是因为延迟而产生的抖动,而是因为服务器上意外状况导致的,客户端的动作序列仍然保持领先于服务器的状态。
(1)对车身姿态转向使用球面线性插值
在转向模拟当中,简单的线性插值会导致插值过程向量的长度发生变化,而且当两次同步之间的转角大于180°时,线性插值会计算最短路径,从而产生错误,如图7所示,假设图中箭头方向为车辆当前方位,A为起始方向,B为转向后方向,线性插值将在AB逆时针区域进行插值,从而产生“抖动”现象,本文采用球面线性插值。
图7 球面线性插值
(2)对位置与速度使用Hermite三次样条插值
线性插值算法也能在一定程度上缓解抖动现象,但会使得运动轨迹变成直线运动。Hermite三次样条插值能够增强运动轨迹的平滑性,也能灵活控制经过同步点时的运动轨迹。如图8所示。
图8 Hermite三次样条插值
本文使用Hermite三次样条插值算法对ROLE_SimulatedProxy的运动轨迹(位置)进行插值,算法如下:
其中p0是起点,p1是终点,m0是起点的斜率,m1是终点的斜率,t是alpha值,取值t∈(0,1)。
结合图6与上述公式中的参数,可以推导出速度的插值计算。其中d是样条轨迹某一处的斜率,Δl是位移变化量,Δα 是 alpha值的变化量,Δt是帧间隔,ΔtBLU(between last updates)是两次同步的间隔时间。
虚幻引擎是开放的实时3D创作平台,系统项目基于Unreal Engine 4.24的C++模板、Steam VR与HTC VIVE头显构建,场景地图绘制工具使用GlobalMapper,地形工具使用World Machine,植被工具使用SpeedTree,结合3ds(3d Studio)Max进行车辆和场景建模,使用莱达仕V900方向盘模拟器。
(1)获得数字高程模型(DEM)数据。本文从ASTER GDEM下载30 m精度(一个像素代表30 m×30 m区域)高程纹理,通过输入经纬度坐标的方式指定下载驾考场地周边区域。通过ERDAS IMAGINE 9.2对下载的高程文件进行精度校验。即便高程不是很精确,最终可以对高程进行插值模拟。
(2)利用GlobalMapper处理及转换高程图格式。从下载下来的DEM数据中选取驾考场地区域,转换成World Machine可识别的格式。导出hfz格式的考场地图文件。
(3)World Machine地形处理。地形尺寸需要按照比例,所以需要计算好长宽高的比例大小。通常分辨率越高构建的地形精度越高。做一些刻画调整,最后保存导出高度图格式RAW16,以及单通道灰度图等所需要的格式的图片。
(4)Unreal Engine 4地图处理。创建初始的地形,在World Machine中对地形进行细致的刻画,从而得到更好的地面效果,也可在Unreal Engine 4里进行复杂的材质处理、法线贴图等,地形设计效果图如图9。
图9 地形设计
辆模型制作:本文使用VR设备进行交互,要求模型制作的高精细度,需要根据硬件条件在效果与性能之间进行平衡。
建筑制作:可借助卫星地图,将地图放置到地形上,根据具体驾考场地的建筑物进行建模,然后将模型放置到卫星图上面,确保建筑的坐标位置。
道路制作:根据具体驾考场地现场的考试测试点位置,标记准确位置,运用3ds Max按照卫星图进行道路建模。
利用SpeedTree制作植被,导入到场景中,依据卫星贴图进行定位。同时加入Wind Directional Source风力系统,让草地和树木更加生动。效果如图10所示。
图10 植被与树木
查阅某款车型的 “车辆一致性证书参数”文件,参数“行驶状态下带车身的车辆质量”的值为1 390 kg,发动机最大扭矩185 N·m,最小转弯半径5.4 m,变速器前进挡传动比 i0∈[0.396,2.480],倒挡传动比 i0'∈[1.680,2.604],i0=5.045,ηT=0.85,官方百公里加速10.2 s,百公里减速35.3 m,系统测试见图11。
图11 系统测试
经多次测试所得百公里加速与百公里减速的数据如表1所示,与官方参数值拟合度较高。
表1 百公里加速与减速
现有的VR多终端同步方案主要采用两种方式。
1)各客户端只从服务器同步速度(velocity)的方案,假设为方案V1;2)各客户端从服务器同步变换(位置和旋转)信息(transform)的方案,假设为方案V2;本测试基于多终端车辆同时在线时,服务器与各客户端车辆运行的“平顺性”作为指标,分别进行纵向测试与横向测试。1)纵向测试:V1、V2以及本文的“滞后补偿算法”方案,分别在不同的服务器同步频率(3、2,1次/s)设定和网络延迟(1、2、3 s)模拟的情况下进行测试。 2)横向测试:在相同的服务器同步频率设定和网络延迟模拟参数下,V1、V2以及本文的“滞后补偿算法”方案进行横向比较。
纵向测试结果显示:1)V1方案中,各终端车辆始终存在明显持续的“抖动”现象,而在同步频率越高与网络延迟越低时,车辆平顺性越好;2)V2方案较V1方案,有较大改善,但也存在较明显的“阶段性抖动”现象,在同步频率越高与 网络延迟越低时,车辆平顺性越好;3)“滞后补偿算法”方案,各终端车辆无明显“抖动”现象,且同步频率和网络延迟参数的改变,不改变车辆平顺性,车辆总体平顺性良好。横向测试结果如表2所示。
表2 相同参数设定的车辆平顺性横向模拟测试
本文针对驾考人数众多而驾考场地稀缺这一客观现实,利用Unreal Engine为渲染引擎,构建了一个基于多人在线的虚拟驾考系统,主要研究驾考场地的地形构建、场景渲染、车辆运动工况、多终端中车辆平顺性等关键技术。系统的测试结果与分析表明,车辆动力性、制动性、转向性等汽车性能指标的仿真结果与官方数据拟合度较高,达到较好的模拟效果,特别是多终端同时在线时,各终端车辆的平顺性体验得到质的改善。为多终端同时在线机制下的平顺性问题提供了一种解决方案。由于真实的驾考流程与车辆系统非常复杂,本文只研究了其中若干特性,后期需要从以下方面进一步完善与改进:(1)呈现驾考场地与车辆更多维度的状态信息,提升车辆的操控性;(2)通过优化减轻晕动症带来的不适感。