基于OpenGL的汽车转向三维模型设计陈家琪,曹晨光(上海理工大学,计算机与电气工程学院200093)摘要:汽车转向过程轨迹的计算比较复杂,需要使用汽车动力学诸多公式进行复杂的数学建模。汽车3D虚拟系统实时性要求较高,因此对汽车转向模型进行简化,同时控制汽车轨迹的误差。使用OpenGL设计汽车三维模型,通过估算横摆角速度得出简化的转向轨迹模型。据此设计汽车转向三维动画,实验结果表明汽车轨迹和姿态都取得了较好的可视化效果。关键词:OpenGL;汽车转向;轨迹模型;三维模型中图分类号:TP311文献标识码:A3DModeldesignforAutomobileSteeringbasedonOpenGLCHENJia-Qi,CaoChenguang(SchoolofComputerandElectricalEngineering,UniversityofShanghaiforScienceandTechnologyShanghai200093)【Abstract】Thetrackcalculationofautomobilesteeringprocessisverycomplicated.ItneedscomplicatedmathmodelingwithmanyformulasofVehicleDynamics.Automobile3Dvirtualsystemhashighrequirementforreal-time,henceautomobilesteeringmodelneedspredigested,meanwhile,theautomobiletrackerrormustbecontrolled.Automobile3DmodelisdesignedwithOpenGL;predigestedtrackmodelisdeliveredbyyawrateestimation.3Danimationforautomobilesteeringiscarriedout.Experimentresultsshowthatbothofthetrackandgestureachievefavorablevisualizationeffect.【Keywords】OpenGL;AutomobileSteering;TrackModel;3DModel汽车模型设计有着广泛的应用。汽车电子控制系统如ABS、ESP等性能测试平台需要建立汽车模型,虚拟驾驶系统和汽车3D虚拟系统需要建立汽车模型和运动轨迹模型。汽车性能测试平台、虚拟驾驶系统等研究性应用要求建立严格的数学模型,用户的输入通过传感器等硬件设备传入系统,可以提出特定的要求,如安装Matlab等软件和一些板卡等硬件。汽车3D虚拟系统对实时性和交互性要求较高,因此必须进行汽车模型和轨迹模型的简化,同时必须控制汽车姿态和轨迹的误差,为汽车碰撞检测和地形匹配提供有效的数据。OpenGL是数百个函数的集合,提供了图形硬件接口,光照、雾化、反走样、纹理等渲染技术的应用可以获得较高的真实感[1]。同时可利用Windows定时器等机制实现动画,通过消息机制实现与用户交互。显示列表等性能优化技术提高了运行效率[2]。因此在3D虚拟系统开发中广泛应用。1汽车三维模型1.1OpenGL三维模型的一般形式OpenGL的函数库中有许多绘图函数用于绘制基本图元和各种几何体,还可以导入其它工具制作的三维模型。通过基本图元、几何体、基本模型的组合和变换,形成目标模型。设制作一个三维模型需n个基本模型,定义操作序列P=M1(O1)M2(O2)…Mi(Oi)…Mn(On)。Oi为要绘制的第i个基本模型,可以是基本图元、几何体、其它工具制作的基本模型,也可以是一个操作序列。Mi(Oi)为绘制Oi之前的一系列矩阵操作。Mi=C1×C2×……Cm。Cj(j=1,2,…,m)为基本模型变换操作,以4×4的矩阵表示。OpenGL中连续两个模型变换一般不可交换顺序,模型变换的执行顺序和函数调用顺序相反。OpenGL是一个状态机,绘制Oi时还受一系列模型变换M1M2…Mi-1的影响。令Mi=(MjMj+1…Mi-1)-1C,恢复到Mj(j=1,2,…,i-1)状态后,再执行模型变换C和基本模型的绘制。使用C=R{θ,0,0,1}表示绕Z轴逆时针旋转θ,C=R{θ,0,1,0}表示绕Y轴逆时针旋转θ,C=R{θ,1,0,0}表示绕X轴逆时针旋转θ。使用C=T{x,y,z}表示沿X轴正向平移x单位,沿Y轴正向平移y单位,沿Z轴正向平移z单位。使用C=S{x,y,z}表示沿X轴方向缩放x倍,沿Y轴方向缩放y倍,沿Z轴方向缩放z倍。1.2基于OpenGL的汽车三维模型汽车组成十分复杂,只能抽取其中一部分进行建模。由于只关注汽车的姿态和运行轨迹,忽略质量、悬挂、发动机等。汽车三维模型由车身、底盘和四个车轮组成。车身安装在底盘上,其位置和姿态由底盘决定,和底盘的位置是相对固定的,三维模型建立时和底盘作为整体考虑。车身的绘制使用Bézier曲线和曲面完成。四个车轮转速、方向决定了汽车的位置和姿态,由用户通过键盘、鼠标等输入。模型在转向过程中主要考虑轮子质心的位置和速度,不考虑风阻、摩擦、滑移率等因素,轮子转速与汽车线速度成正比,前轮转向角完全决定汽车转向。汽车规格主要包括轮距、轴距。轮距即两个前轮(后轮)质心的距离。轴距即汽车前后两根轴之间的距离。根据汽车规格,确定其相对位置,从而使用模型变换制作出相应的三维模型。四个车轮和汽车相对位置关系如图1所示。图1汽车相对位置关系其中,Z轴垂直纸面向外。W为轮距,L为轴距,C为汽车质心,D为汽车后轴中点。β为车身到Y方向的夹角。P1、P2、P3、P4为轮子质心,也是前后轴的顶点,θ为轮子转向与车身正前方的夹角。同时需要另外考虑轮子的转动,设Pi绕X轴转动的角度为ϕi。由图1得到制作基本汽车模型的步骤P=M1(O1M2O2M3O3M4O4M5O5);其中O1:车身和底盘;O2:轮子P4;O3:轮子P3;O4:轮子P2;O5:轮子P1;变换矩阵为:M1=C1×C2;M2=C3×C4;M3=M2-1×C5×C6;M4=M3-1×C7×C8×C9;M5=M4-1×C10×C11×C12;其中:C1=R{-β,0,0,1};C2=T{Cx,Cy,0};C3=R{ϕ4,1,0,0};C4=T{W/2,-L/2,0};C5=R{ϕ3,1,0,0};C6=T{-W/2,-L/2,0};C7=R{ϕ2,1,0,0};C8=R{θ,0,0,1};C9=T{-W/2,L/2,0};C10=R{ϕ1,1,0,0};C11=R{θ,0,0,1};C12=T{W/2,L/2,0};若Oi的绘制过程进行了模型变换,绘制完毕后必须进行逆变换,消除后续模型的影响。汽车模型建立完毕后,使用三投影技术获取实现汽车模型运动视景,获得良好的沉浸感[3]。2简化的转向轨迹模型P1P2P4P3CDOYXWLβθθ2.1基本假设汽车转向系统是一个闭环系统,除考虑前轮转角外,汽车高速行驶时存在“侧偏”现象,还有诸如转向悬挂系统弹性、侧倾转向效应、车轮倾斜效应、空气动力学影响等因素[4]。对于虚拟系统而言,在不损害真实感的前提下,需要对转向过程进行简化。为此进行以下假设:假设1:汽车低速行驶,服从阿克曼几何原理。汽车转弯半径如图2所示。图2汽车转弯半径定义根据转弯半径定义有:R=L/tanθ(1)在转弯过程中四个轮子质心的速度成比例关系,比例系数与汽车规格和前轮转角大小有关。设P4轮绕质心转速为ω4,质心速度为v4;P3轮绕质心转速为ω3,质心速度为v3;则有:假设2:滑移率为0。滑移率是在车轮运动中滑动成分所占的比例,滑移率为0表示汽车进行纯滚动,即在汽车加速和减速过程中不考虑滑动因素。汽车直线运动时认定四个轮子转速ω相同。从而,轮子质心速率Vw=ωr,r为轮子半径。设在时刻T,汽车车身方向到Y正向夹角为β(Y正向到车身的夹角为-β),汽车后轴中点D坐标为(xd,yd,zd),则汽车沿直线运动经过∆T后D的坐标为:(3)式(3)中ω为车轮绕其质心转速,是时间t的函数,r为车轮半径。2.2转向轨迹计算汽车在转向过程中做圆周运动,轨迹计算关键在于确定圆心位置、转弯半径和横摆角速度。圆心位置和转弯半径可以根据图2计算,横摆角速度的计算是要解决的关键问题。由于没有建立精确的数学模型,只能对横摆角速度进行估算。横摆角速度的估算方法有基于运动学模型的估算方法和基于动力学模型的估算方法。N.Sivashankar使用两个加速计和一个转向角传感器进行了估算[5]。程晓懿对当前的估算方法进行了分析和对比[6]。基于一组轮速信号估算的公式如下:式(4)中ω1为后轴的转向外侧轮转速,ω2是转向内侧轮转速;r为车轮静态半径;θ为前轮转向角;W为后轴轮距。根据前面两个假设,式(1)、式(2)代入式(4),得:(5)由式(5)可知给定θ,横摆角速度的估算值与车轮转速成比例关系。设时刻T,汽车dTTTdTTTdzzdtryydtrxx=+=+=∫∫∆+∆+βωβωcossinθP1P2P3P4LRθ2/2/4343WRWRvv−+==ωωθωωδcos)(ˆ21Wr−=(4)θθθωδsincos2tan22WLr−=(2)车身方向到Y轴正向夹角为β,后轴中点D坐标为(xd,yd,zd)。则经过∆T后D点坐标为:(6)其中ϕ是∆T后汽车车身方向到Y正向夹角,假设θ在∆T内不变,从而圆心坐标不变。2.3OpenGL实现汽车三维动画使用OpenGL实现动画有三种机制:Windows定时器机制、短接WM_PAINT消息机制和事件插入循环机制[7]。Windows定时器机制实现简单,但是受操作系统计时器分辨率的限制,Windows2000计时器最佳分辨率为10ms。采用短接WM_PAINT消息机制可以获得较高的优先级。使用事件插入循环可以获得更高的帧效率,但会影响程序的交互性。汽车沿直线运动的轨迹和转向轨迹都是连续的,设每隔∆t进行一次汽车各参数的运算和更新场景。前轮转向角θ和车轮绕质心转速ω由键盘或游戏手柄控制。∆t间隔内假定θ和ω值不变,式(3)和式(6)的积分形式可以简化为与∆t相乘。实现流程如图3所示。图3动画实现流程3.实验结果使用VC++6.0建立基于MFC的单文档项目,利用OpenGL进行三维建模,制作了汽车三维模型。车身和底盘尚未进行纹理处理。建模可视化结果如图4所示。(a)右侧视图(b)左侧视图(c)俯视图(d)后视图图4汽车三维建模可视化结果汽车转向轨迹中转弯直径可由式(1)得出,是后续计算的基础。为此采集了汽车生产商公布的数据,与式(1)理论计算结果相比较,如表1所示。∫∆++==−+=−+=TTTddddtzzRRyyRRxxδβϕϕβϕβcoscossinsinWait(WM_PAINT)ModelTransform(x,y,z,)DrawAuto(W,L,)θβGoStraight?;cos***;sin***ββTrwyTrwx=+=+;;coscos;sinsin*;*ˆ;tan/ϕβϕβϕβδβϕθ=−=+−=++==RRyRRxTLRYN表1最小转向直径对比(单位:m)车型轴距最小转向直径转角26°计算值雪铁龙Berlinggo2.69311.711.04雷诺Kangoo2.6051010.68大众开迪2.6821111本田CR-V2.621110.74现代美佳1.8GLS2.6010.610.66奇瑞SQR7160ES2.46810.510.12由表1可知,式(1)在转向角为26°时与最小转向直径的误差在5%左右。在汽车3D虚拟系统设计、汽车微观仿真中应用是可以接受的。4结束语三维虚拟系统中需要许多逼真的模型,不仅建立静态模型时需要真实感,还要求尽可能逼近模型的物理特性和运动特性,同时要具备良好的实时性和交互性。本文作者创新点:通过对横摆角速度的估计,对汽车运动学模型进行简化,使用OpenGL建立起实用高效、真实感良好的三维模型。同