|
|
发表于 2008-2-21 09:44:00
|
显示全部楼层
Re:基于分布式虚拟现实技术的汽车驾驶模拟器研究
基于O GRE 和ODE 的驾驶模拟系统的设计与实现
高 嵩 陈先桥 杨 菊
(武汉理工大学 武汉430063)
摘 要 介绍了一种以开放源代码的图像引擎O GRE 和物理引擎ODE 为基础的系统建模方
法, 结合汽车动力学模型, 实现了一个功能强大, 效果逼真的驾驶模拟系统。
关键词 模拟驾驶器;O GRE;ODE; 汽车动力学
中图分类号: TP391. 41 文献标识码:A
Abstract: In th is paper, a modeling method based on open resource, O GRE and ODE, is int2
roduced. Based on a veh icle dynam icmodel, a pow erful and realist ic veh icle driving simulat ion sys2
tem is realized.
Key words: veh icle driving simulato r; O bject2O riented Graph ics Rendering Engine (O GRE) ;
Open Dynam ics Engine (ODE) ;mo to r veh icle dynam ics
收稿日期: 2005209217
0 引 言
主动式三维汽车驾驶模拟系统是一种能正确
模拟汽车驾驶操作, 并能在主要性能上获得与实
车相同感觉的汽车驾驶训练系统。目前国内类似
系统中的动态效果不甚理想, 且大多利用商业视
景软件进行开发, 软件成本相当昂贵。笔者提出一
种基于开放源代码的图像引擎的驾驶模拟系统设
计方法, 实践证明该方法具有开发效率高, 真实感
强, 软件成本低等优点。
1 汽车驾驶模拟器关键技术
1. 1 OGRE 概述
面向对象的图形渲染引擎(ob ject2o rien ted
检测情况和所属地区的车辆维护情况进行统计分
析, 通过上述数据交换过程实现对检测站工作监
督和管理[ 3, 4 ]。
3. 3 系统主要硬件
服务器是检测中心网络处理的核心, 系统运
行时有大量数据进行处理, 服务器配置两只硬
盘, 互为镜像。本系统服务器采用稳定的品牌服务
器, 配置P4 2. 8 G CPU、512M 内存、40 G 硬盘、
100M 网卡。业务工作站采用高性能的商业计算
机, 扩展各种设备(如IC 卡, 条形码扫描仪, 票据
打印机等)。智能测控仪表采用性能稳定的工业控
制机, 能适应检测车间的各种工作环境, 同时又能
满足使用的技术要求, 配置P3 1. 2 G CPU、128
M 内存、40 G 硬盘、10M 网卡。采用3COM 10ö
100M 网络交换机。
4 结束语
网络型汽车综合性能检测系统是计算机检测
技术发展的新方向, 自动化和网络技术的紧密结
合推动了检测技术的全面进步; 设备的通信方式
统一, 系统的功能显著增强, 检测数据传输高可靠
性和稳定性, 使检车速度明显提高。系统也成为一
个检测业务功能扩展的平台, 易于实现功能扩展,
在此基础上可实现公开查询、图象传输和数据实
时传输, 扩大信息共享范围, 行业主管部门还可利
用足够的网络带宽对车辆检测过程进行实时监
控, 保证检测的公正性, 具有良好的社会效应, 系
统的应用前景广阔。
参考文献
1 成 功, 杨佃福, 李 嘉. 以太网技术在现场总线中的
应用和前景. 计算机工程, 2001 (12) : 27~ 12
2 陈 平, 张安年. 工业以太网在现场总线控制系统中
的应用. 洛阳工学院学报, 2000 (1) : 65~ 68
3 李适伦, 陈灶芳, 曾宪强, 等. 基于CöS 模式的汽车综
合性能自动检测管理系统及其实现. 交通与计算机,
2000 (4) : 31~ 33
4 黄 坚, 郁汉琪. 基于网络的实时控制系统. 计算机工
程, 2004 (22) : 169~ 171
基于O GRE 和ODE 的驾驶模拟系统的设计与实现——高 嵩 陈先桥 杨 菊101
graph ics rendering engine,O GRE) 是用C+ + 开
发的面向对象且使用灵活的3D 引擎。它的目的
是让开发者能更方便和直接地开发基于3D 硬件
设备的应用程序或游戏。引擎中的类库对更底层
的系统库(direct3D 和openGL ) 的全部使用细节
进行了抽象, 并提供了基于现实世界对象的接口
和其它类[ 1 ]。
O GRE 系统主要包括: 渲染系统和渲染插
件、材质系统、实体管理系统、图形界面系统、纹理
和图片解码器、文件系统和文件解码器、场景管理
插件、粒子系统、日志系统等等。而最后所有的系
统全部归一个总管管理, 这个总管就是O GRE: :
Roo t。图1 是整个O GRE 的核心成分框图[ 1 ]。
图1 O GRE 核心部分框图
图1 中, Roo t 是整个O GRE 系统的入口点
和管理器, 他必须第1 个被创建, 最后1 个被消
毁, 通过Roo t 对象你可以配置系统, 还可以获得
系统内的其它对象。RenderSystem 是3D A P I 的
抽象层, 负责设置所有的渲染属性, 并调用3D
A P I 执行渲染操作。SceneM anager 是场景管理
器, 负责组织场景, 包括场景中M aterial, L igh t,
Movab le O b ject (en t ity) 和场景本身。M aterial 定
义场景中几何体的表面属性, 可以通过脚本设置。
En t ity 代表场景中的可运动物体。SceneNode 代
表位置和方向, 关联到SceneNode 上的En t ity 可
以继承其位置和方向。场景中的SceneNode 以树
的形式来组织, 进一步可分为很多具体方法如
b sp ( b inary space part it ion ing ) , Do t scene,
O tct ree 等。Cam era 为场景中的视点, 可以为视点
设置视口(viewpo rt) , 即可以将视点所看到的场
景渲染到指定视口。
使用O GRE 图像引擎可做3 个方面工作: 初
始化、处理输入以及运行时帧循环。大部分时候,
所需做的主要是初始化和输入处理, 而对于帧循
环不必要改动。
以下是一个O GRE 应用程序的伪代码。
主程序{
创建应用实例
调用应用实例go 方法{
创建roo t 实例(单件模式)
载入资源;
选择场景管理器;
创建摄像机;
创建视口;
创建视景;
创建帧监听器;
}
调用roo t 实例循环渲染方法{
W h ile (! quit) {
. . .
调用帧监听器frameStarted 方法{
响应系统输入; 计算、设置动态结点新状态;
计算、设置摄像机新状态;
. . .
}
. . .
}
}
1. 2 ODE 的引入
O GRE 系统具有图像渲染的功能, 但没有内
置碰撞检测的功能。如果不进行特殊控制, 其移动
的物体会穿过其它物体。为了让模拟驾驶系统达
到逼真的用户体验和效果, 需引入一种物理引擎
(open dynam ics engine,ODE)。
ODE 是一个高性能、开放源代码的工业级刚
性物体动力学模拟库。它功能全面、技术成熟和平
台独立, 易于和CöC + + A P I 配合使用。ODE 具有
高级的联结类型和碰撞检测整合系统, 非常适合
于对交通工具、虚拟实境中的物体和虚拟生物的
模拟。在国外已广泛地应用于PC 游戏、3D 创建
工具和模拟工具中。ODE 的核心就是经典力学的
基本原理的算法包, 是牛顿力学的C+ + 语言程序
实现, 因此具有非常好的平台独立性、高运算速度
和小体积的特点。
一个典型的ODE 模拟步骤为[ 2 ]: ① 创建一
个动力学世界; ② 在动力学世界中创建物体; ③
设置所有物体的状态, 如位置等; ④ 在动力学世
界中创建联结; ⑤ 将联结与物体绑定; ⑥ 为所有
的联结设置参数; ⑦ 按需要创建一个碰撞世界和
碰撞几何对象; ⑧ 创建一个连接组来保存接触联
结; ⑨ Loop
(a) 按需给物体施加力;
(b) 按需调整连接的参数;
102 交通与计算机 2006 年第1 期 第24 卷(总第128 期)
(c) 调用碰撞检测;
(d) 为每个碰撞点碰撞创建一个接触连接,
并将其放入连接组;
(e) 执行一个模拟步骤;
(f) 移除在接触连接组中所有连接;
bk 销毁动力学世界和碰撞世界。
从上述过程可以看出, 在创建了一个模拟世
界并做好相应的准备工作之后, 物体的运动状态
就由一个检测循环来完成, 此时人们可以对这个
世界进行干预, 如向这个世界中的物体施加力。世
界中各个物体的各种动态属性将根据其受力和当
前所处的状态计算得出, 在一个模拟步骤之后将
这些属性更新, 从而进入下一个循环, 模拟世界中
的物体按照牛顿力学的规律运动。然而ODE 是
个物理运算包, 没有渲染机制, 因此人们无法看到
这运动着的一切。
1. 3 汽车模型的建立
笔者采用多重继承的方法设计了一些新类,
使这些类具有O GRE 的图形特性, 同时具有
ODE 的动力学特性。在App licat ion 类中加入一
个关键的成员类Stepper, 用来触发动力学模拟计
算。结合动力学模型设计一个V eh icle 类, 它是对
汽车动力学模型算法的封装, 通过外部提供的输
入, 可以计算车内各部件的动力学物理值, 通过对
成员类W heel 施加力, 从而驱动汽车[ 3 ]。
图2 是用来构建V eh icle 类的ODE 联结,
Body1 体现为V eh icle 类, Body2 体现为W heel
类。
图2 ODE h inge2 jo int
在本系统中外部输入(模拟器信号) 传给该类, 通
过计算得出驱动力, 施加到图2 的轴2 上。系统调用
Stepper 计算V eh icle 与场景中建筑和其他车辆的动
力学变化, 从而模拟出真实碰撞效果[ 2 ]。
2 驾驶模拟器系统的设计及实现
笔者根据上述关键技术构建了驾驶模拟器系
统框架, 并在W indow s 平台上实现。下面重点阐
述软件部分。
2. 1 系统总体框架
系统框架如图3 所示, 操作者在驾驶模拟器
上操纵各操纵机构, 驾驶模拟器上分布的传感器
实时地将各个操纵机构的状态传送给信号采集处
理单元(该单元负责双向的A öD ,DöA 和开关量
的转换工作)。这些操作信号分为两类: 一类是模
拟量信号, 包括油门开度、制动踏板位置、离合器
位置、转向盘转角和驻车制动器位置; 另一类是开
关量信号, 包括档位、点火、喇叭、雨刮、左转向、右
转向、雾灯和远近灯等。这些数据通过计算机串口
发给驾驶模拟器软件系统, 软件系统通过计算得
出虚拟车辆的新状态, 并显示在终端上, 同时系统
按当前状态通过声效系统发出相应的声音。模拟
器软件系统把新得到的虚拟车辆的发动机转速、
车体线速度、水箱温度、油量表值通过串口发送至
信号采集处理单元, 使驱动仪表盘上各指针运动
显示出相应刻度值。
图3 驾驶模拟器系统框架
2. 2 驾驶模拟器软件系统框架
软件系统的结构如图4 所示, 具体描述如下。
1) 资源管理器从外部文件中载入系统需用
的资源, 包括模型文件(. m esh )、骨骼动画(.
skeleton)、粒子模板定义文件(. part icle)、材质定
义文件(. m aterial) 和各种图像文件, 以备系统调
用。
2) 建立场景管理器, 负责管理场景文件。系
统从场景文件中载入场景, 这个场景文件是xm l
格式, 记录着各个独立模型的相对位置, 场景管理
器按给定文件载入模型, 驾驶模拟系统以Do t sce2
ne 方式管理, 建立起虚拟场景。
3) 道路信息管理器从道路信息文件中读入
道路信息。
4) 车辆对象管理器从车辆定义文件中载入
车辆, 这个文件也是xm l 格式的, 包含了车辆各
个关键部件的几何物理参数和外观模型。载入后
场景按道路管理器指定值设置车辆初始位置。
5) O GRE 帧监听器开始循环监听, 读取串
口、鼠标键盘和网络数据, 并进行处理。串口、鼠标
基于O GRE 和ODE 的驾驶模拟系统的设计与实现——高 嵩 陈先桥 杨 菊103
图4 驾驶模拟器软件结构框
键盘数据主要是主动车辆的操控数据, 这些数据
由车辆对象管理器联合道路信息管理器用来计算
主动车辆的状态; 网络数据主要分为: ① 主控服
务器的控制指令(用于控制工作站的操作项目
等) ; ② 其他工作站主动车辆的相关信息(用于确
定当前工作台中其他互联用户车辆的状态)。然后
将相关数据发送至模拟器硬件模块驱动仪表盘。
车辆管理器通知声音管理器发出指定声音并由声
效系统输出, 同时还通知粒子管理器发射粒子(在
需要的时候)。最后O GRE 渲染子系统渲染到显
示终端。如果没有收到用户结束指令, 则进入下一
个帧监听; 否则结束渲染。
3 运行效果
系统是在W indow s 平台上使用从C+ + 开
发, 利用VC7. 1 的编辑器编译。系统的场景及车
辆模型在3DSMAX 和M ilk shape3D 中创建。系
统中用到的各种SDK 均是开源的, 且支持多个平
台, 因此, 具有良好的平台移植性。
驾驶模拟系统实现了逼真的场景渲染, 并且
能生动的模拟出汽车驾驶的各种状态。图5 是驾
驶模拟系统运行的效果图。
(a) 雾天效果
(b) 上坡效果
(c) 碰撞效果1
(d) 碰撞效果2
图5 系统运行效果
4 结束语
介绍了通过对利用O GRE 图像引擎结合
ODE 物理引擎, 构建了一个可跨平台的模拟驾驶
系统的核心设计思想。通过这种设计, 开发成本显
著降低, 同时仍具有高性能的图形和动力学模拟
表现, 由于使用到的各引擎是开放源代码的, 因此
系统也具有很高的代码安全性。
参考文献
1 余志生. 汽车理论. 第2 版. 北京: 机械工业出版社,
2000. 15~ 36
2 B rian Beckman. The physics of racing. Singapo re:
Wo rld Scient ific, 1997. 50~ 210
3 (英) 克罗拉. 车辆动力学及其控制. 喻凡, 译. 北京: 人
民交通出版社, 2003. 74~ 98
104 交通与计算机 2006 年第1 期 第24 卷(总第128 期) |
|