关键词:虚拟现实 人机交互 DSP 传感器 立体显示
虚拟现实是计算机生成的、给人多种感官刺激的虚拟世界(环境),是一种高级的人机交互系统。理想的虚拟现实系统应当让使用者在与虚拟环境产生交互行为时的感受与真实环境中的感受完全一样。而现有的漫游系统大多采用二维交互界面,即采用鼠标(二维输入)和键盘(线性输入)作为交互设备,遵循着“窗口-图标-菜单-指定”(Windows-Icon-Menu-Pointer,简称WIMP)操作范式,交互方式不合谐,不自然。本文以健身作为人机交互的工具,设计了一种实时自行车漫游系统VR-BWS。该系统以虚拟现实技术为基础,综合运用了传感器技术、DSP控制技术,采用了多线程、非阻塞的数据实时通信技术,并通过立体显示等多通道交互技术实现了人在虚拟环境中的漫游,使参与者在由计算
机构造的虚拟场景中获得了如同在真实环境中骑车的体验,是把虚拟现实技术应用于实际的一个有益尝试,应用前景十分广阔。
1 系统构成及原理
当参与者骑在自行车上运动时,自行车的速度、方向、笼头往上提的时间和力度以及骑车人自身重量等数据,通过传感器实时采集,然后经由DSP控制电路传送到上位机中,经过分析处理,使其在屏幕的虚拟场景得到仿真和展示,在虚拟场景里达到表演的效果;同时,当屏幕中的场景变化时,如上坡、下坡等,也可以通过控制软件反馈到自行车的控制器上,产生阻尼/驱动力,使骑车人有上述场景产生的上、下坡的感觉,从而获得好的沉浸感。系统构成如图1所示。
2 关键技术 2.1 人机交互传感器技术 在本自行车漫游系统中,主要是借助各种传感器实时地捕捉人体作用于自行车而产生的各种运动参数,输入到计算机,作用于虚拟环境,实现人与虚拟环境的交互。 VR-BWS中使用的传感器有光电编码器、角位移传感器和力传感器。与车轮同步施转,并以增量式编码方式记录自行车车轮旋转角度对应的脉冲,然后将检测到的脉冲数据换成车轮的旋转圈数,即自行车相对于某一参考点的瞬时位置;VR-BWS中使用了角位移传感器检测车把转角,控制场景中视点和视线的方向;在场景中设计有没宽度的沟壑和天堑,根据骑车人的体重和速度来判断能否冲过去,仿真飞越长城和黄河等,因此在自行车的车把和座位处安装了用来测量提力和人体重量的力传感器。 2.2 DSP控制技术 底层控制均由DSP系统完成。DSP处理系统的CPU采用TI公司生产的TMS320LF2407A,使用该芯片是为了保证上位机和下位机之间传感器数据和地形数据双向传递的实时性,减少运动跟踪和信息反馈环节的延时。 在DSP的事件管理器EV模块中,有一个正交编码脉冲电路QEP。该电路使能后,可以在编码和计数引脚上输入由光电编码器产生的正交编码脉冲。正交编码脉冲电路的基可由通用定时器提供,在程序中通用定时器设置成定向增计数模式,并以正交编码脉冲电路作为时钟源。由角位移传感器和力传感器采集到的角度数据和力数据是模拟信号,通过DSP的模数转换模块(ADC)将采集到的数据进行模数转换后存入的结果寄存器中。 TMS320LF 使用多路传感器作为三维场景漫游的视点跟踪传感器时,必须不断地从串口采集各路传感器的状态数据,以跟踪观察者对视点位置和视线方向的改变。通常有两种方式:(1)在应用程序中创建定时器;(2)采用多线程的应用程序框架。第一种方法由于控制单元是以固定的频率向主机传输状态数据,因此为定时器选择适当的定时周期是关键,否则很容易造成数据丢失。另外,由于应用程序需要不断地响应定时器函数,因此三维场景的绘制速度必然会受到影响。笔者采用了第二种方法,具体如下: 在VC环境下开发了基于RS232协议的实时通信软件,可以与虚拟环境软件部分直接相连,并采用了多线程、非阻塞的实时漫游框架,在辅助线程中监视串口,有数据到达时依靠事件驱动,读入数据并向主线程报告;并且WaitCommEvent()、ReadFile()、WriteFile()都使用了非阻塞通信技术,依靠重叠
2.3 虚拟场景的构造及其实时显示技术
目前,从技术角度上讲,漫游的最大难点在于建模和实时绘制,需要在模型的精细程度和绘制速度方面取一个折衷,既要保证一定的绘制质量,又不能造成用户的运动不适感。在建模和实时显示方面采用了各种技术,以保证实时性。
点击看原图 虚拟环境中的每个物体包含形状和外观两个方面,用于存储虚拟环境中几何模型的模型文件应该能够提供这两方面的信息。同时还要满足虚拟建模技术的三个常用指标——交互显示能力、交互操纵能力、易于构造的能力对虚拟对象模型的要求。Open GL中很容易实现模型的各种变换、着色、光照、纹理、交互操作和动画,但是它只能提供基本几何元素的造型函数,使得复杂模型的建模相对困难。3DMAX等三维图形建模工具能方便建 本系统(VR-BWS)软件部分需要享用多种公开三维格式文件数据,同时还要与数据库相关联,VR-BWS数据流图如图2示。 在3DMAX等建模工具中建立好复杂模型后,可以用多种文件格式存储。考虑到Open GL提供了最基本的由多边形构造三维模型的方法,故以三角形网络方式存储。VR-BWS的软件部分是基于面向对象技术。三维图形类、渲染场景必不可少的属性类如:颜色类、纹理类、材质类、光源光等均采用面对象方法对Open GL函数进行封装(如图3所示),软件的各个组成模块使用OCX控件和COM作为标准接口。这样既可以大大节省开发时间,又能提高渲染速度。 虚拟现实最重要的特性是人可以在随意变化的交互控制下感受到场景的动态特性。而提高显示性能的技术包括硬件和软件两个方面。在硬件方面,采用了高速的DSP芯片进行数据的实时采集和传输;软件方面建立了多线程、非阻塞的漫游框架,并采用了以下方法来提高场景画面的刷新速度。 (1)双缓存机制。也为显示器建立两个视频缓冲区,一个用于后台刷新屏幕,一个用于前台绘制。当需要更新时,切换这两个缓冲区,将原来作刷新用的缓部区用于绘制新的帧,同时将原来作绘制用的缓冲区用于刷新显示。场景越复杂,采用双缓存机制时间优越性就越能得到体现。而且采用双缓冲机制可以解决画面演示过程中严重的“闪屏”现象。 (2)LOD(Level of Detail)细节层次技术。根据两种不同的判断来选取细节层次不同的模型:一是距离远近,离视点近的物体采用较高精度绘制,离视点远的物体则用较低精度绘制;二是通过自行车的速度设定不同的阈值,根据阈值选取不同精度的模型,然后通过平滑过渡技术来显示。 (3)实例技术。场景中经常需要多个相同的虚拟物体,如完全相同的树木等。对于这类需重复出现的特体,利用Open GL库中的显示列表功能,将其分别定义为单独的显示列表,预先生成三维实体;再通过几何变换得到其它位置的特体。在图形显示时,只需调用所需的显示列表即可显示相应的三维实体,大大节约内存从而提高图形显示速度。 (4)预处理技术。对一些复杂的场景模型,如路两旁的高层建筑等,在预处理阶段,只计算出显示在观察者视野范围内的场景并存放起来,在动态显示时就无需对不可见的物体及落在所定义的观察空间之外的物体进行绘制,从而大大减少在动态显示时对可见性的测试和计算。 (5)用二维纹理代替三维模型。对漫游场景中非常复杂的细节上的物体如山坡上的植被等,若用三维模型表示,将需要大量的多边形,但实际动态显示时,没必要把它们表现得十分精确,所以使用二维纹理代替三维模型。其方法是将复杂特体的图像粘贴在一个平面上并放置在场景中,在三维复杂场景的实时显示时,令该平面的法向始终指向观察点。这样,就形成了这些复杂物体随着观察方向的改变而转动,提高了场景显示的实时性。 3 立体显示技术 三维立体显示技术虚拟现实的关键技术之一。要实现三维景观的立体显示,首先必须得到符合三维特征的立体图像对。左右片对的生成可以按照以往传统的单目三维图形生成方法分别生成,即先计算左右眼的视点向量,并分别进行视点变换及首色处理,可取得左右眼的图像。但由于左右片对图像的相关性很强,物体在左右图上通常只有一个视差d,而其色彩与亮度值相差很小,可以利用这一点实现立体片对生成的快速算法。 假设场景中任意点F(x,y,z)在左右片对中分别成
立各种复杂特体模型,但是很难进行程序控制。因此,笔者在3DMAX等工具中建立好复杂模型后,在Open GL中实现对其方便控制和变换。
其中L代表左右焦点之间的间距,f代表焦距,d代表两眼的视差。首先分别计算得到左右眼的视点向量及其变换矩阵,而后在生成右眼图的同时,利用式(2)计算左眼图。在这一过程中,对离视点近的特体不采用式(2)计算,而用分别计算方法生成。这样可以使生成的左右片对既不失真实性,又具有快速性。 采用幅分割法进行立体显示。当显示器进行逐行扫描时,将左右图像按幅序交替显示,在计算机屏幕前用液晶方式实现图像分像,通过使用液晶眼镜并利用人眼的视觉延迟就可以获得立体视觉。立体监视器显示图像的刷新频率的高低直接关系到图像的稳定性,即所显示图像是否会出现闪烁现象。采用刷新频率为120Hz的监视器,使左、右眼视图的刷新频率保持60Hz。在本文中,水平方向采用不同视线参数的两幅透视图像的实时显示是通过软件控制实现的。 4 试验结果及结论 本文实验硬件配置为Pentium IIII 2.4GHz CPU,内存2GB,硬盘80GB,立体显示卡为Quadro4 750XGL128MB,健身车选用豪华避震式大飞轮,采用刷新频率为120Hz的优派21
寸纯平显示器,配备装有红外线发射器的有源立体眼镜。操作系统为Windows 2000。立体图像生成软件和立体显示接口软件用Visual C++ 6.0编写,三维图像标准采用Open GL,三维建模工具采用3Dmax和ArcInfo