基于WorldViz PPT的船体虚拟装配研究*

2019-01-22 01:30徐仁桐李舒明吕建军韦乃琨
九江学院学报(自然科学版) 2018年4期
关键词:手柄分段按钮

李 翼 徐仁桐 李舒明 吕建军 韦乃琨

(1福建船政交通职业学院轮机工程系 福建福州 350007;2上海船舶工艺研究所 上海 200032)

虚拟装配是采用虚拟现实技术、三维仿真技术、计算机图形学技术等构建交互式的虚拟环境[1],用户使用交互设备在该环境中进行装配操作的一种方法。虚拟装配在军事、船舶、航空等领域应用广泛,可以对产品设备进行可装配性分析检查,对装配人员进行培训。

虚拟装配的交互方式有很多,最常用的是采用鼠标键盘进行控制,该方式方便、快捷,但沉浸感、交互感不强。采用HTC Vive或Oculus Rift头盔配合Unity3D也可以实现虚拟装配,但头盔中看到的虚拟装配环境画质颗粒感较大,画面会卡顿、延迟,让人眩晕。

采用Worldviz公司的PPT产品配合Unity3D进行船体交互操作装配[2]。PPT作为一款实时光学追踪系统,具有追踪精度高,追踪范围广(可达到50m×50m),抗干扰强等特点,已成功在波音、福特得到推广运用。PPT可以通过多种方式和软件连接,主要有VRPN协议,RS-232接口、共享内存等方式。Unity3D是一款时下热门的虚拟仿真引擎[3],它能轻松搭建三维场景,开发交互动画,制作场景特效,在游戏开发、房地产展示、VR/AR/MR(即Virtual Reality/Augmented Reality/Mixed Reality)、工业制造、军事演练等领域运用广泛。

1 数据获取

PPT追踪系统主要包括4个光学摄像头,1个Eyes头部跟踪、1个Wand手柄、1个标定板,设备如图1所示。Eyes和Wand上面具有多个LED Marker:其中Eyes有2个LED Marker,拥有5个自由度;Wand有3个Marker,拥有6个自由度。

虚拟装配数据主要通过PPT追踪系统获取。首先通过标定板校准四个相机镜头,并确定正方向,构成一个虚拟3D空间,如图1所示。当Wand和Eyes在跟踪空间中运动时,光学摄像头能够实时精确地捕捉其空间位置和角度数据,再通过PPT Studio N换算成标准的位置和旋转数据。

图1 校准3D空间

PPT获取的标准数据通过VRPN协议进行传输。VRPN是一个将虚拟现实系统应用程序和外围设备进行通信的网络接口[4],它由一套类库组成。文章采用VRPN 7.33进行数据通信。利用CMake将VRPN源代码进行编译,并添加bin到path环境变量。VRPN所获取的数据,通过逻辑抽象层将相同类型的外设抽象为都派生于同一个基类的子类,例如所有的轴数据信息都派生于VRPN_Analog基类。VRPN数据通常抽象为五种类型:①Tracker记录位置和方位信息;②Button记录二进制按钮信息,类似于数字量,例如鼠标按钮、手柄按钮的点击事件等;③Analog记录轴数据,类似于模拟量,例如手柄遥杆、鼠标轴等;④Dial记录增值旋转信息,例如旋钮等;⑤ForceDevice记录力反馈相关信息。例如PPT Wand具有一个Tracker、一个Analog和一组Buttons。

PPT和VRPN传输数据至Unity的流程原理如图2所示。

图2 数据获取流程

由于VRPN是C++程序,Unity C#程序不能够直接访问,需要进行封装,采用C#调用C++代码。将PPT传输数据方法写成VRPN Tracker Extern、VRPN Analog Extern、VRPN Button Extern几个主要方法,并在方法声明中增加_declspec(dllexport)关键字,关键代码声明示例如下。

extern "C" _declspec( dllexport ) double VRPN Tracker Extern(char* _address, int id);编译时需要选择.NET 3.5版本,将编译的dll导入Unity/Plugins, 在C#里使用DllImport对这些方法进行封装。关键代码声明示例如下:

// EntryPoint 参数代表dll 库中的入口点名称

[DllImport("VRPN_PPT" , EntryPoint = "VRPNTrackerExtern"))]public static extern IntPtr Create Tracker([MarshalAs(Unmanaged Type.LPStr)] string _address, [MarshalAs(UnmanagedType.I4)] int id);

为了能够更方便的使用PPT开发Unity,对其进一步的分类划分,分为PPT Analog、PPT Button、PPT Tracker、PPT Wand等几个主要的方法,代码的封装结构如图3所示。

图3 封装结构

2 交互实现

先搭建船体装配车间三维场景,并建立双层底分段模型。设置相机初始视角,并将PPT Tracker组件添加到相机上,配置IP为PPT服务器地址和端口,设置Tracker ID为1(表示连接到PPT Eyes),如图4所示。建立Wand手柄三维模型,并添加PPT Wand组件,设置WandID为3(表示连接到PPT Wand)。这样PPT Eyes控制相机视角,PPT Wand控制虚拟场景中的手柄模型,实现了交互操作。

图4 PPT Tracker组件

3 双层底分段装配仿真

选择手柄抓取方式,首先需要将分段模型划分为中小组立件节点,给每个组立添加碰撞体和刚体组件[5],并保存为Prefabs,在脚本中通过Instantiate类实例化预设。添加了碰撞体的组立件和周围部件发生碰撞时会产生干涉效果,这样便可进行设计阶段的空间合理性检查[6]。装配前可以打乱组立件的位置,并预先定义正确的装配序列,主要是采用string数组保存每个组立件的名称。当装配时,确定当前装配数组索引,选择错误不能装配;选择正确,则数组索引自增1。

当按下手柄Trigger按钮,同时手柄碰撞到组立件,并且碰撞对象为当前装配索引时,通过Transform.SetParent(Transform parent, bool world Position Stays)方法将该组立件设为手柄模型对象的子节点,便可实现抓取;松开手柄时,通过同样的方法将该组立件的父节点设置为初始节点,便可放置组立件。

为了能够突出当前抓取模型,在On Trigger Enter(Collider other)方法中,将手柄触碰的组立模型的material颜色实时更换为高亮半透明的material,整体装配效果如图5所示。

图5 装配效果

4 结论

采用WorldViz PPT对PPT Wand和PPT Eyes进行了位置跟踪,使用VRPN将获取的数据传输至Unity,并进行了船体分段虚拟装配的交互仿真。实验表明,该方法装配效果直观,运行稳定可靠,能够在设计阶段对装配可行性、空间合理性进行分析评价,减少实际装配的错误,缩短返工率,具有较强的工程应用价值,为虚拟装配技术在船舶行业的应用研究提供了技术支撑。

猜你喜欢
手柄分段按钮
当你面前有个按钮
一类连续和不连续分段线性系统的周期解研究
基于PLC控制的手柄座钻孔攻丝一体机的研发
分段计算时间
一种多功能无线手柄的设计
死循环
3米2分段大力士“大”在哪儿?
为什么厨具的手柄不是金属的?
银行家
内心不能碰的按钮