杨曦
摘要:通过分析虚拟现实技术的发展状况和趋势,提出了在虚拟现实生成软件EON中,结合数据手套与虚拟场景中物品进行互动的实现方法。利用VC++6.0等开发工具,与EON软件进行数据的交换,以实现手势识别,虚拟抓取等功能,并结合这些功能展望了虚拟现实技术的应用前景。
关键词:虚拟现实;系统仿真;EON;数据手套;手势识别
中图分类号:TP391.9文献标识码:A文章编号:1009-3044(2012)01-0084-04
Research Of Data Glove Interactive Ssimulation System Based on EON
YANG Xi
(Information and Control Engineering School, Xian University of Architecture and Technology, Xian 710055, China)
Abstract:By analyzing the trends and development of virtual reality technology , Proposed the Method of combined with data gloves to in? teract the items in the virtual scene by virtual reality software EON. In order to achieve gesture recognition, virtual crawl and other functions, using VC + +6.0 and other development tools, with EON software for data exchange and combined these functions to look into the future of virtual reality technology application.
Key words:virtual reality ; system simulation ; EON;data glove ; gesture recognition
随着科学的进步和社会的发展,一门结合计算机仿真技术,图像识别技术,计算机图形学等多门科学的交叉技术逐渐发展了起来,我们称其为虚拟现实技术(Virtual Reality,VR)。虚拟现实技术是通过用户平时就可以使用的电脑来创建一种令用户可以体验的虚拟环境,它借助数据手套、数据头盔等专业的外部设备,实现了交互式体验和多信息融合的立体图像的系统仿真,可以让用户进入到虚拟的世界之中,实时的与虚拟世界中的各种对象进行身临其境般的互动
目前的虚拟现实系统,根据虚拟现实系统所偏向的的方向的不同,主要分为四个方面:即桌面式、沉浸式、增强式和网络分布式。桌面式虚拟现实系统通常只使用个人计算机就完成了交互场景的仿真,它缺乏能令用户免除周边干扰,沉浸其中的功能,但是其成本也相对较低,因而,比较普及。沉浸式虚拟现实系统是开发者追求的最理想的目标,利用头盔显示器、数据手套和身体部位跟踪器等交互设备,通过听觉、视觉、触觉以及其他感觉,给用户带来一种封闭式的虚拟环境的交互体验,其可以广泛应用于虚拟训练,虚拟手术等现在较为流行的应用领域之中[1]。其中数据手套与虚拟开发环境的交互也是本文研究的重点。如果说沉浸式虚拟现实系统强调的是用户在虚拟环境中的沉浸感,增强式虚拟现实系统则允许用户观察到真实世界,同时也能看到叠加在真实世界之上的虚拟对象,增强了用户对真实环境的感受,但同时它对系统本身的实时性的要求也就更高,需要有良好的硬件和软件进行支持。
1系统设计
1.1系统总体构思
近几年,随着虚拟现实技术的不断进步,数据手套已经成为与计算机进行人机交互的主要方式之一,目前被广泛应用于如虚拟训练,虚拟手术,虚拟安装等多个领域。数据手套作为虚拟现实系统常用的交互设备,主要通过数据手套上的传感器系统,可以将使用者的动作变成传感信号输入到计算机,计算机读取并分析传感器的信号,以便控制虚拟手做出不同的手势或抓取、移动和释放物体,完成与虚拟环境的交互[2]。本文主要研究利用数据手套和虚拟现实开发平台共同完成的人机交互功能的实现。
1.2虚拟平台开发软件介绍
EON STUDIO是目前世界公认整合性、延展性最好的虚拟展示开发系统。可读取现有的大多数的CAD数据格式(如:*.3ds,*. dwg,*·lw,*·wrl,*·igs等),支持90%以上的外设和多种立体显示方式(如:桌面型、单双墙、洞穴型、环幕型)。同时,EON为了满足客户不同的需要,提供了开放的开发环境EON SDK,通过其SDK开发包可实现用户所需要的特殊的交互行功能。在视觉效果上,它还支持图形图像的计算机图形(Cg)高级渲染,在满足最新的DX9和OpenGL特效的同时,带给用户顶级的视觉冲击,又能配合硬件设备针对各种VR应用需求进行沉浸式交互漫游。
本文采用的是5DT DataGlove数据手套,它是采用光纤传感器来进行数据的辨别,每个手指都有一个光纤回路,允许由于手指弯曲而产生微小的平移。光纤被连接到手背上的光电连接器上。每个光纤回路的光线可被光敏晶体管感知到。如果光纤是直的,发射光返回时就不会衰减。如果光纤受到弯曲则光线就会有溢出。根据返回光线的强度来间接测量出手指的弯曲程度[3]。
在VC平台读取数据手套数据的部分程序如下:
BOOL CGloveSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
m_ComList.AddString("USB 0");
m_ComList.AddString("USB 1");
m_ComList.AddString("COM 0");
m_ComList.AddString("COM 1");
m_pGlove = NULL;
UpdateInputs();
SetTimer(1,10,NULL);
return TRUE;
}
但在使用过程中,我们发现,因为我们的用户对象是未知的,其手的大小也是各不相同的的,因此,为了能得到更加精确的输出数据,我们必须在使用数据手套之前,对手套进行重新的标定,即确定用户的手指在紧握状态和伸直状态下数据手套传感器所能达到的相应极限值。这里,本文所采用的5DT DataGlove则提供了专门的校准软件用来进行数据的桥准。
5DT DataGlove数据手套使用的是一个8位,分辨率为256的模/数转换器,即手从紧握状态到伸平的状态有256个中间位置。5DT DataGlove数据手套的所读取的默认传感器数据为raw,每次读取之后,就将传感器读出的原始值与系统设置的最大值和最小值(rawmax和rawmin)进行比对,如果得到的原始值超出了所设定的范围,就将最大值和最小值进行更新。在对数据手套重新标定的时候,用户需要用手连续快速地做紧握伸直运动,不断地更新当前值,已得到理想的数据,可以使用下面的公式进行校准,其中MAX值由系统函数设定。
2.2基于数据手套的手势识别
手势识别技术是数据手套与虚拟手进行交互的基础,只要在手势识别完成的基础上,才可以进行如对虚拟物品的推动、抓取等一系列复杂的运动。数据手套一般都采用富有弹性的材料制成,在相应的关键位置如手指关节,手腕等处放置传感器以完成对手指紧握、外展以及手腕动作的检测,在获得了这些位置的运动信息之后,虚拟手将通过实时的接收这些数据以完成虚拟手势的改变,从而使用户能以一种贴近真实的感受与生成的虚拟环境进行交互。在用户带上数据手套之后,将通过计算机对数据手套的各个传感器进行数据的采样,再将采样得到的信号进行处理,再将这些包含用户手指手腕等部位动作的信息传递给计算机,这就完成了基于数据手套的手势识别。
手势的定义是基于传感器的预设响应值和阈值的比较而得到的。而5DT DataGlove来获取用户的手部姿态信息实际是通过数据手套光纤中光通量的变化。当传感器的响应低于下阈值时将会返回值1,表示对应手指伸直;但传感器的响应高于上阈值时将会返回值0,表示对应手指弯曲;当响应在上阈值和下阈值之间时,将不返回值。对每个手指的屈伸进行组合,便能定义不同的手势[4-5]。
3 EON与系统接口的实现
3.1基于EON SDK的Handmove节点的开发
虽然EON STUDIO软件本身提供了大量的的节点和原型,已经可以满足许多领域的应用仿真,但因为不同用户的特殊要求,因此,EON STUDIO又给广大开发人员提供了EON SDK,用来进行节点或模块的二次开发。
EON SDK是在VC++环境下开发使用的,通过EON SDK节点向导,可以方便地根据用户的需要生成可供开发的类。在生成的程序之中用户通过自行添加节点代码,就能实现EON STUDIO本身所不包含的节点功能。
在开发控制虚拟手节点的过程中,用户可以根据控制虚拟手的需要,自行设定Handmove节点。Handmove节点的属性域将包括各个手指关节的信息。EON SDK为节点增加属性需要在节点的头文件中添加自定义的属性域,添加的位置应在公有枚举成员变量enum里的枚举元素FID_FIRST与FID_LAST之间。依照EON SDK所默认格式,所添加的属性域都应该是“FID_”加定义属性域的名称。因此Handmove节点的属性域定义如下:
enum {
FID_FIRST=CEonBase::FID_LAST-1,
FID_IND,
FID_MID,
FID_THU,
.......
FID_LAST
};
在添加了属性域后,Handmove节点还应有内部处理函数用来处理外部信息。同样是在在节点开发的程序框架里,FieldChanged函数是节点内部处理函数,其代码如下[6]:
void handmove::FieldChanged(int ID)
{
switch (ID)
{
case FID_THU: functionl();
break;.
.......
case FID_IND:
function2();
break;
default:
CEonBase::FieldChanged(ID);
}
}
3.2 EON与VC之间的通信
EON附带了可供开发嵌入的运行交互式EON仿真的插件EonX。该控件允许用户使用VB,VC++,C++ Builder等支持接口的软件开发平台建立自己的使用界面,并且能与EON内部的接口进行通讯,在软件开发平台就能完成对虚拟环境的控制。VC与EON通信流程如图1所示:图1 VC与EON通信流程图
VC++与EON之间的一般通讯过程如下:
1)在EON中建立InEvent(事件输入)节点或OutEvent(事件输出)节点。
2)建立EventIn节点或EventOut节点等通信节点后,添加用户设计的处理节点。连接通信节点和处理节点。
3) VisualC++的应用程序可以调用控件类CEonCtrl的成员函数函数,实现数据传输[6]。如SendEvent函数就能实现将VC的数据发送到EON的InEvent中,SetFullsize函数可以将读入的EON图像全屏的操作等等。部分程序如下:函数初始化
BOOL CDemoDlg::OnInitDialog(){
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
myeon.SetSimulationFile((LPCTSTR)"han1d.eoz");
return TRUE;
}
载入文件代码
void CDemoDlg::Onstart()
{
myeon.Start();
}
4结果与分析
实验结果表明,利用EON软件和VC++软件可以很好的实现虚拟现实仿真系统的交互功能,利用EON自身的节点功能和EON SDK的二次开发能力,可以很好的完成手势识别虚拟抓取等功能。图2为简易的开发界面。图2基于VC的简易开发界面
从试验中我们可以看出,基于EON的数据手套交互仿真系统可以广泛应用于多个领域,比如虚拟手术,虚拟训练,虚拟安装等,利用虚拟现实仿真系统,与传统的培训方式相互结合,可以是培训手段更加丰富,并且在危险性等方面都有所降低,同时虚拟现实平台强大的可通用性也使其在以后的发展中可以更加快速的应用于新的领域之中。
参考文献:
[1]李志文,韩晓玲.虚拟现实技术研究现状及未来发展[J].信息技术与信息化,2005(3) .
[2]周晓晶,赵正旭,楼江.基于数据手套的虚拟手势交互系统[J].仪表技术与传感器,2007(10) .
[3] DT. The 5DT Data Glove Driver Reference Manual[Z] .South Africa: 5DT Technology, 2000, .
[4]章名涛,肖如鸿.电机的电磁场[M].北京:机械工业出版社,1988:51-65.
[5]唐任远.现代永磁电机理论与设计[M].北京:机械工业出版社,1997.
[6]潘燕彬.基于数据手套的虚拟手术训练系统交互技术的研究[D].广州:广东工业大学, 2008.
[7] EON Reality, Inc. EON User Guide 5.0 .2004,311-314.
[8]安明,陈善广,刘玉庆.基于数据手套的虚拟手精确建模的研究与实现[J].计算机仿真, 2010(1) .
[9] EON Reality Inc. EON SDK 3.0 .Jan 2002.