吕梦雅,蒋 禹,唐 勇,陈英建
(燕山大学 信息科学与工程学院,河北 秦皇岛 066004)
虚拟驾驶系统是基于虚拟现实(VR)技术的一个新的研究热点与难点。将虚拟现实技术应用于汽车的驾驶仿真系统中,借助计算机这个工具来产生汽车行驶过程中的虚拟周边环境、音响效果以及运动仿真,使驾驶员能沉浸到虚拟驾驶的环境当中,并获得实际驾驶操作车辆的感觉。驾驶员根据虚拟环境中提供的视觉、听觉、触觉等感受,构想驾驶操作并模拟操作驾驶舱中的操纵部件,实时地改变汽车在虚拟世界中的运动状态,这一过程不断循环,构成了驾驶员-虚拟世界环境直接地交互,实现了操作员的虚拟驾驶,完成了在现实世界中汽车驾驶从体验到认识、学习并掌握的全部过程[1]。
传统的虚拟驾驶大多是模拟一般汽车行驶行为即方向盘相关行为[2-3],或者以虚拟驾驶为辅助进行一些其他工作的研究,如道路的路标设计[4]。而大型工程车辆由于其具有极其复杂的约束关系,要模拟出高度真实的物理效果是极具挑战性的工作。因此,物理引擎的引入势在必行。
物理引擎一般通过使用对象属性如重心、动量、扭矩、弹性等来模拟物体的行为,一些简单的物理行为可以通过编写脚本或者动画的方式来实现,但当需要处理比较复杂的物体之间的相互作用、相互约束关系时,通过动画的方法来实现比较困难。随着计算机硬件的飞速发展,物理引擎被越来越多地应用于VR仿真的各个领域。2008年,同济大学的欧阳慧琴等人实现了Newton物理引擎与OGRE图形渲染引擎的绑定[5],作为测试,他们模拟了传送带以及简易小车的运动场景。2008年,NVIDIA公司的Harris在Siggraph Asia上展示了用 PhsyX物理引擎中的粒子系统快速实时地模拟水的物理效果[6],但在逼真程度上略有欠缺。2009年巴西的南大河州联邦大学的 Maciel等人基于NVIDIA PhsyX物理引擎开发了多模态的虚拟手术环境[7],他们将 PhsyX物理引擎的碰撞处理层接口和触觉渲染设备绑定以同时提供实时的组织反应以及力反馈。
本文研究了基于 Bullet物理引擎的虚拟泵车驾驶系统,其实现分为两部分:1)结合物理引擎与真实泵车的资料对泵车各部件参数进行设定;2)在各个泵车之间建立合适的约束关系并进行验证。
Bullet与 NVIDIA 的PhysX、Intel的 Havok并称世界三大物理引擎。它支持Windows、Linux、MAC、PlayStation3、XBOX360、NintendoWii等平台,同时Bullet也被整合到Maya和Blender3D中,并且是开源、免费的。其主要构成组件包括线性数学的存储器与容器模块、碰撞检测模块、刚体动力学模块、软体动力学模块、多线程模块以及一些额外的工具支持模块,如图1所示。本文的主要工作建立在刚体动力学模块基础之上。
图1 Bullet的主要构成组件Fig.1 Primary clustering of Bullet
根据实际需求,将整个泵车模型分解成为52个部件模型。依据物理引擎的参数设定原则,每个部件模型都需要为其设定质心、碰撞形状以及其它基本物理属性如密度、质量等。
对于物体的质心,考虑到分离出的部件形状较为规则,因此将重心坐标设定与包围盒的中心点统一;对于碰撞形状的选择,Bullet提供了参考的选择方案,如图2所示,由于各个部件并不能视为简单的几何体如立方体、椭球或球体,因此统一地将模型的碰撞形状设定为凸包;而密度与质量则参考泵车的实际数据进行设定。
图2 Bullet碰撞形状选择Fig.2 Selection of collision for Bullet
因为虚拟泵车驾驶涉及到数据量并不十分庞大,且为了使虚拟驾驶系统具有更强的可移植性,故选择XML文件存储基本的数据。以车体的底盘为例,存放的数据格式如下:
在经典力学中,物体的运动必须遵守牛顿运动定律。此外,每一个物理系统中物体的运动必须遵守一些约束条件。例如,简单摆系统的约束中摆绳的长度是常数,摆锤与支撑点的距离必须等于该长度;在一个封闭的水瓶里,除非水瓶破了,水分子绝对不能运动到水瓶外面。这些约束使得物理系统的特性得以呈现。
Bullet也提供了许多约束模型。常见的约束模型如图3所示,点对点 (Point to Point)约束是在两个刚体的某个轴点处限制它们的移动,并在世界坐标下将这两个刚体在该轴点处匹配,使其不能分离,例如常见的刚体链中刚体的约束关系就是点对点约束;铰链 (Hinge)约束是在某个节点处建立限制两个刚体的转动轴,使其只能绕该轴旋转,这个轴即为铰链轴,例如门和门轴;滑动(Slider)约束则是指两个刚体只能沿着某一条轴移动。
图3 Bullet中的约束关系Fig.3 Constraint relation in Bullet
在为泵车的各个部件建立约束前,首先需要确定各个部件的约束种类。通过泵车实际操作演示视频的分析,最终确认需要建立的泵车约束为40个铰链约束、16个滑动约束,共计56个约束。
在Bullet中,大部分的约束针对的是刚体或者约束的局部坐标系,若要成功地使用Bullet物理引擎中的函数,创建一个满足实际需求的应用程序,则需要对刚体的空间姿态或者约束轴进行调整。应用Rodrigues旋转公式,绕单位向量 ,, 旋转且旋转角为的旋转矩阵为
在获取了物体的空间姿态以后,则可以通过式 (1)对物体进行调整。否则,建立的约束运动将和预期结果相差很大。图4展示了使用和不使用旋转公式调整空间姿态两种情况下泵车左前支腿向外伸出的结果对比,使用的约束类型为滑动约束,其中图4(a)为不调整空间姿态的运动结果,图4(b)为调整姿态后的运动结果。
图4 泵车的约束实现Fig.4 Constraint realization for pump truck
除此之外,泵车中还存在大量的约束嵌套关系,即便是简单的支腿展开动作,也至少需要在支腿和车身的连接处建立一个包含4个约束的嵌套关系。如图5所示。其中,右图为左图的局部放大图。右图中蓝色线条表示存在铰链约束,红色虚线方框表示存在滑动约束。由此,确定此嵌套中哪个约束为驱动,哪些为从动至关重要。虽然现实中驱动约束应为红色虚线框代表的约束4,但受限于计算机模拟的精度问题,经过反复的实验,选定约束1为驱动约束能取得最好的表现效果。
同时,由于约束本质上反映的是两个刚体之间的作用关系,因此刚体自身的属性如质量、重心等都会对约束的表现效果起到非常大的影响。图6展示了臂架抬起到一半以及臂架抬高到与车体成直角的效果图。其中左图为第一节臂架完全打开,右图为打开一半。
图5 泵车中的约束嵌套关系Fig.5 Constraint nesting relation in pump truck
图6 泵车的臂架Fig.6 Arm frame of pump truck
在Windows 7操作系统下,使用VS 2010开发平台和OSG图形渲染引擎以及Bullet物理引擎实现虚拟驾驶系统。硬件环境为:Intel Xeon CPU X3440 2.53 GHz,4G RAM,显卡为NVIDIA Ge-Force GTX460。
图7为模拟的车模型与真车的对比,其中右图为将所获取的车模型各部件分解以后通过约束组装后的静止状态图,左图为真实泵车样图。
图7 模拟车与真车对比Fig.7 Comparison of simulation pump and real pump truck
图8为下支腿全部展开的泵车正面视图,可以很明显地看到泵车整个车体被4条支腿支撑离开地面。
图8 支腿展示Fig.8 Showing leg plank
图9为在臂架侧向伸展后,支腿打开与不打开的模拟结果对比图,图9(a)为支腿打开的情况,图9(b)为支腿不打开的情况。显然,臂架向侧面展开后,在没有打开支腿地情况,车会发生倾翻,这与实际情况相符。
图9 支腿作用展示Fig.9 Showing the function of leg plank
最终,在加入了整个工况场景后,模拟的最终效果如图10所示,其中图10(a)为真实的泵车操作图,图10(b)为模拟结果图。可以看到模拟的整个结果图与实际情况相似度很高。需要指出的是,整个模拟过程帧率都稳定在40帧左右。
图10 最终模拟结果Fig.10 Final simulation result
针对大型工程车辆驾驶操作仿真中的复杂力学约束关系,引入了物理引擎中的简单约束来拟真地表现车辆各组件的运动过程。实验结果表明物理引擎的引入解决了此种车辆模拟的实时性与仿真效果的兼顾问题。
作为一个虚拟驾驶系统,光有物理视觉效果不足以让用户沉浸到虚拟环境中,还需要添加光照与阴影、声音以及将鼠标与键盘的操作模式变为驾驶室的操作模式,这将是后续研究的重点内容。
[1]王力军,荆旭.汽车驾驶模拟系统的研究与进展 [J].农业装备与车辆工程,2009(5):34-37.
[2]廖晋民,李峰,钟国虎.地形影响下驾驶模拟器机动行为仿真技术研究 [J].系统仿真学报,2013,25(S1):390-393,400.
[3]Nikolaj Mole, Ga per Cafuta, Boris tok. A method for optimalblank shape determination in sheet metal forming based on numericalsimulations [J]. Journal of Mechanical Engineering, 2013,59(4): 237-250.
[4]Abdellatif Tesnim, Combaz Jacques, Sifakis Joseph. Rigorousimplementation of real-time systems-fromtheory to application[J].Mathematical Structures in Computer Science, 2013,23 (4):882-914.
[5]欧阳惠琴,陈福民.物理引擎与图形渲染引擎绑定的研究与实现 [J].计算机工程与设计,2008,29(21):5580-5582.
[6]HarrisM. CUDAfluid simulation inNVIDIAPhysX [C] //ACMSIGGRAPH Asia 2008 Course Notes, Singapore, 2008: 28-42.
[7]Maciel A, Halic T. Using the PhysX engine for physics-basedvirtual surgery with force feedback [J]. International Journal ofMedical Robotics and Computer Assisted Surgery, 2009,5 (3):341-353.