虚拟驾驶模拟系统操控系统模块Word文件下载.docx
《虚拟驾驶模拟系统操控系统模块Word文件下载.docx》由会员分享,可在线阅读,更多相关《虚拟驾驶模拟系统操控系统模块Word文件下载.docx(32页珍藏版)》请在冰点文库上搜索。
1989年,美国GM汽车公司开始研制开发性虚拟驾驶系统并且开发出第二代产品,它的性能指标在世界上处于领先水平。
1993年,美国FORD汽车公司的开发型虚拟驾驶系统也出现了。
1993年,美国阿依华车辆中心花费1300万美元开发汽车驾驶模拟系统。
1993年,美国交通部招标制造大型的驾驶模拟器。
1991年,日本马自达公司制造跑车型开发性驾驶模拟器。
1995年,日本汽车研究所成功研制出带有体感模拟系统的驾驶模拟器。
在国内,由于国情使然,其发展速度不及国外发达国家水平,而且购买昂贵,所以国内自主研究尤为重要。
在初期我国首先从捷克引进点光源平板投影式模拟器,在此基础上进行改进发展。
自20世纪80年代我国汽车驾驶模拟器发展尤为迅速,许多高校如清华大学、吉林工业大学等都开发出了一写初级产品,其中具有代表性的有北京航空航天大学研制的MCGI-9410T计算机成像系统和航空精密机械研究所研制的QM—CGI汽车驾驶训练模拟系统。
1996年,吉林工业大学建成汽车动态模拟国家重点实验室,该实验室是1989年获批的,1997年被列入国家重点实验室行列,并于2006年设计出大型的用于驾驶训练开发型汽车虚拟驾驶系统。
1.4课题研究的意义
虚拟驾驶系统的开发对于当今而言死非常有必要的。
中国是一个人口大国,虽然近来人口增长速度日渐减小,但是人口基数太过庞大所以人口增长依然很多。
因此,虚拟驾驶系统的开发具有重要的意义。
1.5本论文的内容
虚拟驾驶系统其中主要部分是操控系统,虚拟汽车的驾驶、预警等均由操控系统控制。
操控系统中不仅包括汽车的正常行驶、油门、刹车、离合,还包括灯光、播放虚拟环境中的立体声音等等。
设计步骤:
1)虚拟驾驶动力系统,包括方向盘、油门、刹车、离合等虚拟装置
虚拟汽车方向盘由键盘上、下、左、右键控制前进、倒退、左转、右转。
虚拟汽车动力系统分五档,档位由键盘上的数字控制键控制。
油门、刹车、离合可以使用字母控制键控制。
2)汽车预警装置
当虚拟汽车前方出现障碍物时,达到一定距离时会由预警系统发出警报,提示驾驶者前方不能通行。
3)制作及播放虚拟环境中的立体声音
汽车的发动机声、警报声等等虚拟环境声音需要专门编程以便更好的模拟现实中的声音。
2虚拟驾驶系统
虚拟驾驶系统的实现需要在个人PC机上实行,为了能满足驾驶训练的需要,总结现有技术条件选择合适的开发工具。
2.1虚拟驾驶系统的关键技术
虚拟驾驶系统在满足驾驶训练要求的基础上还应尽量使虚拟环境更加逼真,加强沉浸感,能带给驾驶员身临其境的感觉。
因此需要解决如下问题。
1)迅速提取数据
由于该系统涉及的内容量庞大且要求能够对于驾驶员的操作能够做出快速的反应,因此需要特别设计语言算法,节约系统反应时间,使其能够在最短的时间内做出反应提高精确度。
2)立体图像的生成和显示
个人PC机显示的视镜系统在双目立体视觉原理上需要分别渲染出左右眼图像,通过立体眼镜使得双眼能各自观察各自对应的图像不会出现双眼所观察的图像实现重合的现象。
3)场景中车辆的运动
驾驶员在虚拟驾驶系统中操控的车辆要能够完成如现实中前进、转弯、鸣笛、刹车等操作,虚拟场景中的车辆也要符合运动学规律。
4)实时三维图形生成技术
虚拟场景中的图像要能够实时改变,即图像的实时改变能够跟的上人眼的反应频率,不至于虚拟场景中会出现画面停滞或画面不连续的情况,这需要提高其更新的频率。
5)车辆的后视镜
虚拟场景中车辆的驾驶过程中需要用到后视镜的功能,因此要求在虚拟场景中要能实现后视镜的功能。
6)车辆的碰撞
当在虚拟现实场景中驾驶的车辆碰撞到其它物体时不能够出现重合现象,当出现碰撞时要能够发出警报或车辆损坏的状态。
2.2桌面虚拟现实技术及应用
虚拟现实技术利用了多媒体技术、计算机图形学、仿真技术、计算机网络技术、人工智能技术、多传感器技术和并行处理技术等多种技术来模拟人的视觉、触觉、听觉等感觉器官功能,让人们能够在虚拟场景中拥有如在现实生活中一般的感觉具有广阔的开发空间。
虚拟现实可以将现实场景在个人PC机上模拟出来,让人在其中可以有在现实中一般的感受。
虚拟现实技术近几年发展很快,它高度的仿真功能深的人们青睐,在虚拟驾驶系统中它模拟人们的触觉和听觉等感官,让驾驶员能投入其中以得到需要的训练效果。
2.3虚拟驾驶系统
虚拟驾驶系统主要由视景子系统、操控子系统、音响子系统、车辆运动学子系统组成,操控系统是虚拟驾驶系统的“大脑中枢”。
虚拟场景中的车辆驾驶就是操控系统来控制的。
车辆操作过程中操控的方向盘、油门、刹车、离合器、档位等都是操控子系统来完成的。
在虚拟驾驶系统中的操控功能由PC机键盘来实现相应的动作。
虚拟场景中的声音靠音响子系统来完成。
车辆行驶过程中的轮胎摩擦声、汽车警报声、鸣笛声以及车辆碰撞声等虚拟环境中的声音都是音响子系统模拟执行的,营造出逼真的环境。
虚拟场景中的车辆运动规律则是由车辆运动学子系统完善,根据运动动力学来设计车辆行驶轨迹。
虚拟驾驶系统的主要功能模块如图2.1所示。
图2.1虚拟驾驶系统的功能模块
2.4虚拟驾驶系统的开发环境
虚拟驾驶系统驾驶训练功能的实现是靠硬件部分和软件部分共同完成的。
虚拟驾驶系统的硬件配置主要包括高配置的电脑,立体眼镜,车辆驱动、刹车等装置。
其软件部分由于所需的性能要求较高选择MicrosoftVisual2010作为开发工具,图形开发引擎选择DirectX,由于虚拟驾驶系统中图形的开发需要的性能较高因而选用DirectX10.0c作为建模工具,DirectX10.0c将虚拟场景的模型建好后再导入MicrosoftVisual2010中。
两者兼容性能好,可以很好的实现所需的功能。
所以虚拟驾驶系统的开发工具我们选择MicrosoftVisual2010和Directx10.0c。
该开发平台具有如下特点:
1)具有面向对象的结构,效率高可以在最短的时间内完成相应的功能;
2)实时显示可以更改设置以便更好的显示所需要求;
3)可以使用其它的三维图形软件对虚拟现实所使用的图形模型经行建模;
4)能够连接外部设备,快捷方便的操控虚拟场景中的模型。
2.5虚拟驾驶系统的流程图
该虚拟驾驶系统开发语言采用C++,其中核心部分三三位图形程序的编写主要靠下列函数实现:
⏹IsDeviceAcceptable可以判断图形设备的支持方式
⏹ModifyDeviceSettings可以修改图形设备的设置
⏹OnCreateDevice能够进行图形设备创建与初始化
⏹OnResetDevice可使图形设备复位
⏹OnFrameMove改变当前帧的操作
⏹OnFrameRender可以渲染当前帧的图像
⏹MsgProc处理系统消息
⏹KeyboardProc处理键盘消息
⏹OnGUIEvent处理用户界面消息
⏹OnLostDevice处理图形设备丢失
⏹OnDestroyDevice处理图形设备释放
下面是几个回调函数的调用顺序:
启动程序:
InitApp→MsgProc→IsDeviceAcceptable→ModifyDeviceSettings→OnCreateDevice→OnResetDevice→渲染主循环
渲染主循环:
OnFrameMove→OnFrameRender
改变设备:
ModifyDeviceSettings→OnLostDevice→根据需要调用OnDestroyDevice→OnResetDevice→渲染主循环
图2.2虚拟驾驶系统视景显示过程
图2.3透视投影原理图
图2.4汽车虚拟驾驶模拟系统的流程图
退出程序:
OnLostDevice→OnDestroyDevice
虚拟驾驶系统中的函数调用功能如下所示:
OnCreateDevice:
设置字体,经行视镜和世界矩阵的变换以及虚拟驾驶系统场景的渲染。
OnResetDevice:
虚拟场景中人物、车辆等动画设置,影像变换、装载网络模型以及灯光设置和后缓冲器。
OnLostDevice:
纹理和设备释放,去除网格模型中的实例。
OnDestroyDevice:
删除场景、纹理、视景盒、声音、动画等。
MsgProc:
处理窗口消息。
KeyBoardProc:
处理键盘消息。
OnFrameMove:
该函数可以辨别是否生成渲染立体图像对,识别键盘操作、实时动画显示以及摄像功能跟踪拍摄(实现车辆运动场景的实时变化)。
OnFrameRender:
对话框、视镜窗口及左右眼观察图像的渲染。
3虚拟驾驶系统中虚拟车辆和操控模块的设计
虚拟驾驶训练系统中的车辆是训练员与虚拟场景的联系枢纽,因此车辆的设计对于虚拟驾驶系统很重要。
随着训练员的不同操作车辆表现出相应的动作,根据对应的指令做出对应的动作。
并且虚拟场景中的视镜也要随着车辆的行驶进行相应的改变,做到实时显示。
车辆的设计主要有外观模型的设计、车辆操作盘的设计、后视镜的设计以及背景音乐的播放。
3.1虚拟场景车辆外观模型的设计
为了使系统虚拟场景能显得更真实一些,同时也尽量满足训练的要求开发的系统中的车辆类型应尽可能多样化,设计多种汽车类型(轿车、面包车、公交车、自行车、摩托车等)。
这些车俩模型通常需要先进性建模再通过接口导入开发工具中形成虚拟场景中的车辆模型。
下图3.1所示为各种虚拟场景中的车辆模型
图3.1汽车的模型框架与渲染效果图
为了能够减轻开发系统的运行难度,虚拟车俩模型在设计过程中尽量设计的简单些同时增强渲染程度即可减轻系统负担又可增加车辆外观真实度。
该系统运用多组动画想结合的方式,各种物体的动画组合在一起可以在程序导入时实现多个动画之间的快速切换。
3.2虚拟车辆类面向对象的设计
要使车辆在虚拟场景中的运动过程能够形象逼真的模拟现实车辆行驶过程中的运动,这需要虚拟车辆具有实际车辆的属性,并能够遵循一定的运动规律运动。
因此虚拟驾驶场景中的虚拟车辆设计非常得复杂。
建立车辆的三维模型是必须做的工作,并将这个模型导入到虚拟驾驶系统的场景中。
训练员用来驾驶操作的车俩称为主动驾驶车辆。
车俩的设计以主动驾驶车辆为例来说明如何在虚拟驾驶场景中建立虚拟车辆。
车辆的设计工作量是一个精细的工作,建立车俩模型使用的技术是应用面向对象的设计方法,并且为满足车辆实现动画动作的需求建立了表示车辆动画的类库。
其中的类库包括:
动画分配层类(又称CMultiAnimationAllocateHierarchy),网格模型容器类(又称MultiAnimMC),动画框架类(又称MultiAnimFrame),动画网格模型类(又称CMultiAnim),动画实例类(又称CAnimInstance)。
1)(CMultiAnimationAllocateHierarchy):
该类是从ID3DXAllocateHierary接口分配而来的,它能够实现虚拟场景中动画框架(帧)以及释放和分配网格模型的内存。
该类的结构如下图4.2
图3.2动画分配层类结构图
2)动画框架类(MultiAnimFrame):
该类能够表现虚拟动画的框架和骨骼,它是从D3DXFRAME类分配出来的。
图4.3为动画框架类结构图
图3.3动画框架类结构图
3)网格模型容器类(MultiAnimMC):
该类是从D3DXMESHCONTAIBER分配来的。
网格模型容器类的功能是描述一个网格模型对象,并且从中取得这个模型的顶点混合,根据其中的信息进行虚拟渲染。
这个类包含的属性和行为如下图4.4
图3.4网格模型容器类结构图
4)动画网格模型类(CMultiAnim):
该类拥有共享所有网络层次的虚拟动画列表,并且共用一个动画控制器的复制,该类中封装了一个网格层次。
网格模型类的结构图为4.5
图3.5网格模型类结构图
5)动画实例类(CAnimInstance):
这个类不同于动画网格模型类,它封装了一个动画实例并且能够自己控制这个动画实例。
动画实例类的结构图如图4.6
图3.6动画实例类结构图
根据所定义类的类型及应用的类型函数,通过某一车辆对象为参照模型,建立车辆类类型。
通常车辆类的属性拥有位置属性、基本数据、对象轨迹属性、状态属性和其他的一些属性。
车辆类数据成员的简单表示如图3.7
图3.7车辆类数据成员结构图
虚拟车辆的主要的构成函数和构成变量及其功能如下:
classCVehicle
{
protected:
//构造数据
CMultiAnimVehicle*m_pMA;
//模型物体指针
DWORDm_dwMultiAnimIdx;
//多动画索引号
CAnimInstanceVehicle*m_pAI;
//动画实例的指针
std:
:
vector<
CVehicle*>
*m_pv_pChars;
//场景中智能物体的指针
CSoundManager*m_pSM;
//声音接口指针
DWORDm_dwAnimIdxForward,//动画集的索引号
m_dwAnimIdxBackward,
m_dwAnimIdxLeft,
m_dwAnimIdxRight;
//可操作的状态
doublem_dTimePrev;
//上一个系统时间
doublem_dTimeCurrent;
//当前系统时间
boolm_bUserControl;
//是否用户控制
boolm_bPlaySounds;
//是否播放声音
DWORDm_dwCurrentTrack;
//当前动画帧
//智能物体属性
intm_nVehicleIndex;
//车辆编号
intm_nPositionCount;
//车辆给定点数量‘
POSITIONm_Position[10];
//车辆给定点数据
floatm_fAcc;
//车辆加速度
floatm_fSpeed;
//车辆当前速度
floatm_fSpeedTurn;
//车辆角速度
D3DXMATRIXm_mxOrientation;
//世界变换矩阵
floatm_fPersonalRadius;
//物体碰撞检测半径
//智能物体状态
intm_nStates;
//当前运动状态(0前进,1后退,2左转,3右转)
D3DXVECTOR3m_vPos;
//当前坐标
floatm_fFacing;
//当前方向矢量
D3DXVECTOR3m_vPosTarget;
//当前目标点矢量
floatm_fFacingTarget;
//当前目标点方向矢量
boolm_bWaiting;
//是否等待状态
public:
CVehicle();
//构造函数
virtual~CVehicle();
//析构函数
virtualHRESULTSetup(CMultiAnimVehicle*pMA,std:
CVehicle*>
*pv_pChars,CSoundManager*pSM,doubledTimeCurrentm,floatfScale);
//初始化设置
virtualvoidCleanup();
//释放资源
virtualCAnimInstanceVehicle*GetAnimInstance();
//取得动画实例
voidGetPosition(D3DXVECTOR3*pV);
//取得目标点
voidGetFacing(D3DXVECTOR3*pV);
//取得目标方向
virtualvoidAnimate(doubledTimeDelta);
//开始动画
virtualHRESULTDraw(IDirect3DDevice9*pd3dDevice);
//绘制模型
virtualvoidSetSounds(boolbSounds);
//设置声音
boolIsBlockedByCharacter(D3DXVECTOR3*pV);
//碰撞检测
voidSmoothLoiter();
//平滑过渡
voidAnimateUserControl(doubledTimeDelta);
//用户操作控制
voidComputeFacingTarget();
//计算方向矢量
voidSetMoveKey();
//设置动画关键帧
virtualboolIsOutOfBounds(D3DXVECTOR3*pV);
//边界检测
};
3.3车辆的运动学模型及车辆运动
“虚拟驾驶系统中有个重要问题需要解决就是是车辆的运动学模型设计。
为了能够更加真实的模拟现实车辆的运动,需要将数学模型建立并求出,即车辆的运动模型。
这是虚拟环境中比较难以处理的一个问题,在采用虚拟现实技术的前提下,复杂的汽车运动采用了简单化的数学模型来表示”[36]。
“操作虚拟车辆一般包括转弯倒车,油门加速,刹车等操控动作,这需要对车辆的速度和方向进行控制,例如在
时刻,车辆的运行速率为
,而在
坐标系中,车辆的运行方向与正向
轴的夹角为
,车辆的位移为
,那么在
时刻,可求出
、
的计算公式”[42][43]:
(1)
根据公式
(1)分别建立了相应的线性函数,通过驾驶员的操作来控制虚拟车辆的速度、行驶方向和位置的变换。
在面向对象的设计车俩中设定变量来表示车辆运动的属性,定义全局变量@表示加速度
,因为加速度是一个变量,所以油门力度越大加速度也愈大加速度@也越大,假设每秒增加的增量为0.01,那么驾驶过程中的@+=0.01,并返回到车辆的速度上车辆形式的越来越快。
当减速时原理是相通的加速度不断变小反馈到车辆速度上使得车俩运行速度越来越低,不同的地方是速度的方向和车辆的朝向之间的关系,当车俩前进时车辆的行驶方向和车辆的朝向一致,当倒车时车辆的运行方向和车辆的朝向相反,速度的方向决定车俩是前进还是倒退。
车辆行驶过程中遇到拐角时车头角度发生变化,其变化角度决定车辆的转弯情况。
设定好虚拟的车辆运动模型就决定了车俩在虚拟环境中运行的规律,车辆运动的实现是通过具体的变换来完成,同样虚拟驾驶系统中的动画设计和动画显示也是通过变换来完成的,变换所用矩阵来自Direct3D,各坐标系之间的变换就是靠矩阵来实现的,如车辆位置的改变靠平移变换实现。
车辆的运动状态表现在车体和轮胎相对地面运动的情况。
如果仅仅改变场景中车辆位置的变化,运动感显得不够真实。
车辆位置的改变配合上车辆的动作,即车辆的动画,使得驾驶车辆时能更加有真实感,如追加车辆转弯时的方向盘动画,车辆行驶中车轮的旋转动画等等。
3.4车辆的操控部分设计
虚拟车俩想要能在虚拟环境中运行必须要有指令信息输入才能运行,这里的指令输入即操作虚拟车俩的指令,这需要操控系统来完成。
虚拟驾驶系统的操控模块相当于人的“中枢系统”,它决定着车辆如何运动,这也是操控虚拟车俩唯一的办法。
从经济高效方面考虑,虚拟车俩的控制装置可以选择个人PC机的键盘,也可由游戏方向盘来代替。
“DirectInput是一个输入设备的应用程序接口,负责输入装置的成员,它除列入支持基本的键盘和鼠标外,还支持多种摇杆等复杂的操作方式”[44]。
使用DirectInput对象作为方向盘,程序接收方向盘传来的数据实时交互,这样方向盘就可以操控虚拟车辆。
“在使用DirectInput前,设备须进行初始化工作,这些工作在Windows应用程序主窗口处理消息时进行”[45]。
通过类CDinput确定方向盘控制车辆的方式。
该类的功能函数包括:
建立并且释放这个环境,输入状态的及时更新,输入设备的初始化,输入设备的清楚。
通过这个类来说明和操控车辆的运行,驾驶员能够在虚拟驾驶系统进行方向盘、离合器踏板、油门踏板、脚刹踏板、手刹车、档位、发动机的点火开关等操作设备进行模拟操作。
也可以设置键盘上的控制键执行特定的功能如↑、↓、←、→控制键执行车辆的前进、左转、后退、右转等功能,空格键鸣笛。
3.5车辆背景声音的设计
虚拟驾驶系统不仅仅能够操控就行的,要想要达到如在现实中一般的效果,还必须加入一些外界因素如声音效果。
声音效果的实现需要Directx工具来实现,它能对多媒体经行处理,应用其中的DirectSound的功能组件就可以实现虚拟驾驶系统中车辆背景音效的设置。
模拟在驾驶模拟软件中也是十分重要的过程,模拟声音效果可以制造更加逼真形象的虚拟环境。
“虚拟环境中的音响效果通过DirectSound模拟,Directsound实时控制播放具有两个特性:
可控制性强和速度快”[46-48]。
如图4.9所示声