论文阅读:Design and Implementation of a Virtual Reality Application for Mechanical Assembly Training
Design and Implementation of a Vir- tual Reality Application for Mechani- cal Assembly Training
0.摘要:
Although virtual assembly has been studied for over 20 years, it has not yet reached a state where it would enjoy widespread usage outside of academia despite the possible cost savings and improvements in the effectiveness of the training. Even though there have been multiple separate studies on virtual assembly, hand- based interaction, and assembly assistance, we have not found applications that would combine all of these to provide a complete assembly training experience.
尽管虚拟装配已经研究了20多年,但它还没有达到可以在学术界以外广泛使用的状态,尽管可以节省成本并提高培训的有效性。 即使对虚拟装配,基于手的交互和装配帮助进行了多个单独的研究,我们仍未找到可以将所有这些结合起来以提供完整的装配培训体验的应用程序。
本文的目的是设计和实现用于机械装配培训的虚拟现实应用程序。 在我们的应用程序中,我们通过使用Leap Motion控制器(安装在虚拟现实耳机上的手部跟踪设备)提供自然的用户交互。 该应用程序是使用Unity游戏引擎实现的,并支持Oculus和SteamVR兼容的VR耳机。
与大多数以前的系统不同,我们结合了基于手动交互,装配模拟和上下文感知装配指导的使用,以创建一个多合一的VR装配解决方案。 作为实现的一部分,我们提出了一种用于装配指导和验证的新方法,该方法通过将用户建造的装配体与用户应该建造的装配体相匹配来工作。
根据用户测试结果,对这种应用程序很感兴趣。 尽管手和手指的跟踪不准确会妨碍应用程序的可用性,但用户一旦学会了如何克服这些问题,便将应用程序描述为令人惊讶的易于使用。
1. 介绍
对新员工进行机械装配任务的培训可能既耗时又昂贵,因为它通常需要经验丰富的人员来教授装配任务的基础知识。 此外,尽管事实证明,由技能更强的老师进行的体育锻炼可以在现实生活中发挥作用,但一些早期的研究(例如[1,17,41])显示,在虚拟环境中进行组装训练的结果比相应的体育锻炼更有成效。 此外,基于虚拟现实的培训还有其他好处,例如可以在任何地方,任何时间进行而无需监督的情况下进行培训。 由于这些原因,基于VR的组装培训提供了一种有吸引力的替代传统培训方法的方法。
尽管虚拟装配(VA)在20多年来一直是学术界广泛关注的话题,但其在工业中的实际应用仍然受到限制。 我们认为这是由于以下原因造成的:首先,大多数现有的VA应用程序已使用不自然的用户界面(例如,笔或类似笔的输入设备)进行了控制。 其次,尽管通过物理和运动学约束进行了多项研究来使连接两个虚拟对象的操作更加动态,但在更复杂的装配仿真中却普遍忽略了物理行为。 因此,现有的装配仿真已成为乏味的,非物理的仿真,与执行相同操作的真实经验不符。
本文的目的是设计和实现用于机械装配培训的虚拟现实应用程序,该应用程序将通过提供自然的用户界面与动态装配模拟相结合的方式来解决上述问题,在动态装配模拟中零件之间可以进行物理交互。通过使用随时可用的虚拟现实技术和可购买的游戏引擎,我们开发了一种应用程序,该应用程序利用手部跟踪功能提供了一种与虚拟环境和组装件进行交互的自然方式。为了创建既具有物理说服力又便于手部跟踪的装配仿真,我们利用实时物理技术的结合来实现对象之间的自然相互作用以及运动学上的约束,从而简化了装配操作。除了前面提到的挑战之外,我们还希望解决许多现有的虚拟装配应用程序中的问题,在这些应用程序中,即使有可能以其他方式完成任务,也迫使用户按照固定的顺序遵循说明。为了解决这个问题,我们提出了一种新的装配验证和指导方法,该方法通过将用户构建的装配与目标装配相匹配来起作用。通过这种新方法,我们为用户提供了上下文组装指令,该指令可自动检测用户到目前为止已构建的内容,并根据该指令进行更新,而不是依赖固定的组装顺序。
本文是作为装配与维护自动化认知引擎(CEAMA)项目的一部分完成的,所使用的主要方法是文献综述,实验和基于用户测试结果的迭代开发。 我们在两个单独的用户测试中分别对我们的应用程序进行了测试,其中有大学工程人员和从事工程行业的专业人员。 根据用户测试结果,对此类应用程序很感兴趣。 尽管手部跟踪的准确性妨碍了应用程序的可用性,但是用户发现上下文组装指令易于遵循,并且许多人在习惯了控件之后将应用程序描述为令人惊讶的易于使用。
本文的其余部分安排如下:第2章深入了解虚拟现实以及有关虚拟装配和装配理论的先前研究。 第3章介绍了应用程序的高级设计。 第4章介绍了应用程序的实现以及开发过程中遇到的问题。 第5章着重于对应用程序的评估。 最后,第六章总结了论文并提出了未来的工作。
2. 背景
本章介绍与本文主题相关的虚拟现实和技术。 在第2.1节中,我们简要介绍了虚拟现实和相关的硬件。 2.2节提供了有关虚拟装配,虚拟手-物体交互和装配理论的先前研究的见识。
2.1 虚拟现实概述
虚拟现实的定义因来源而异,因此很难正确。 作为一个很好的起点,Sherman等人将虚拟体验的基本要素定义为虚拟世界,沉浸感,感官反馈和互动性[44]。 这组元素很好地反映了现代虚拟现实解决方案可以为我们提供的经验,因此在本文中,我们坚持使用此定义。
VR的历史可以追溯到Morton Heilig于1956年推出的非交互式虚拟现实设备Sensor44 [44],但直到最近的技术进步最终为消费者提供了价格合理的VR头戴设备以来,它一直是学术界感兴趣的话题。 近年来,VR娱乐(主要是VR游戏)一直是VR发展的推动力之一。 自Oculus Rift的软件开发工具包(SDK)发布以来,多家新的游戏公司浮出水面,仅专注于VR游戏。 此外,许多现有的游戏公司也已开始考虑使其现有的游戏至少部分与VR兼容。
典型的现代VR体验通过使用专用输出设备(第2.1.2节)来满足上述基本要素,例如头戴式显示器和启用3D的控制器(第2.1.1节),例如手持式魔杖控制器。 这些设备一起使用户可以沉浸在虚拟世界中并与之互动。
由于其多功能性,VR已广泛适应跨多个领域的不同应用。 一些最著名的用例包括VR游戏,飞行模拟器之类的车辆模拟器,信息可视化应用程序以及中风康复等医疗应用程序[51]。 此外,最近有一些尝试将VR与游戏化相结合,即将游戏设计元素应用于非游戏应用程序的想法,因为有人尝试将游戏设计元素应用于例如健身应用程序以鼓励锻炼。 多年来,基于虚拟现实的装配培训和装配仿真一直是学术界广泛关注的话题,第2.2.1节将对此进行进一步讨论。
2.1.1 用户交互
人机交互(HCI)专注于人与计算机之间的接口。 由于交互是VR体验的关键要素之一,因此用户与计算机之间的交互在VR体验中起着重要的作用。 尽管可以在VR中使用传统的键盘和鼠标输入,但由于现代VR侧重于使用具有方向和位置跟踪功能的头戴式显示器(HMD)(第2.1.2节),因此传统VR不太常见,而传统的计算机输入可以使用 大大限制了可用性并削弱了沉浸感。 因此,现代VR硬件已建议使用多个不同的用户界面。
棒控制器是手持控制器,用于通过将设备指向虚拟对象来操纵它们,从而与虚拟世界进行交互。尽管魔杖控制器已在早期研究中广泛使用,但Nintendo Wii Remote [15]是第一个主流的魔杖控制器,其成功对现代游戏控制器的发展产生了深远的影响。另一个流行的魔杖控制器PlayStation Move [38],紧随其后的是Wii Remote,如今,大多数传统的VR控制器都是魔杖控制器。大多数棒控制器都跟踪控制器的方向或位置和方向,从而分别提供3或6自由度(DOF)跟踪。在开发过程中使用的两种头戴式耳机Oculus Rift [35]和HTC Vive [49]都带有可用于指向物体的魔杖式控制器,并且它们还通过控制器中的附加按钮提供了许多不同的动作。 Oculus Touch控制器甚至可以利用围绕控制器放置的多个接近传感器为用户提供虚拟手。
像Virtuose TM 3D Desktop [48]这样的笔式控制器在学术研究中也很普遍,因为它们通常很准确并且能够提供触觉反馈。 但是,由于它们的成本高且麻烦,它们尚未在学术界和科技行业中流行起来。 而且,这种输入设备不太适合现代VR硬件,而现代VR硬件围绕HMD的使用而展开,而HMD在虚拟世界中的移动是体验的关键部分。
为了改善用户对虚拟现实的沉浸感,已经进行了多次尝试来开发用于用户和虚拟对象之间自然交互的虚拟现实手套的尝试。 这些手套通常利用惯性测量单元(IMU)或弯曲传感器来跟踪手和手指的运动。 尽管从用户的角度来看这些方法几乎是无法区分的,但是许多基于挠曲传感器的手套仅限于跟踪手指的屈曲运动(弯曲),而基于IMU的手套也可以跟踪外展(张开) 的手指。 除了商业解决方案外,诸如[26,52]的多项研究也开发了自己的VR手套。
诸如Kinect,Leap Motion和uSense的Fingo之类的光学系统使用户无需用手戴VR手套或将控制器握在手中即可与环境互动。虽然某些系统(例如Kinect)仅支持手势控制,但是Leap Motion和Fingo在放置在台式机上或直接连接到VR头戴式耳机时可以提供高质量的手和手指跟踪。因此,这些设备可以支持更复杂的交互,例如抓握和扔东西。尽管光学系统的优点是可以让您的手腾出空间,但其准确性取决于摄像头和被跟踪手之间无障碍的可见性,这意味着任何遮挡(例如被跟踪手前面的另一只手)都可能会严重降低跟踪精度。 。此外,光学跟踪可能会对环境造成一些限制,因为镜面或强光会降低跟踪精度。与可穿戴系统相比,另一个重大缺点是缺乏力反馈,这种力反馈已被证明可以改善虚拟装配的性能[25,53]。但是,由于光学系统通常比可穿戴的光学系统便宜,因此到目前为止,它们的适应范围更广,并且多项研究已将Kinect或Leap Motion用作用户界面。 在我们的应用程序中,我们还选择使用Leap Motion,因为它的价格合理,可用性高且跟踪精度相对较高。
尽管语音控制已通过智能手机,智能电视和智能扬声器稳步进入消费者的家中,但尽管许多HMD都集成了耳机和麦克风,但在VR中语音命令的使用仍然受到限制。 除了使用Leap Motion与世界互动和控制应用程序外,我们还使用语音命令作为控制应用程序的替代选项,以了解潜在目标受众对使用语音控件的感受。
2.1.2 输出设备
由于虚拟世界和沉浸感是VR体验的关键要素之一,因此输出设备可能是对体验质量影响最大的单个VR硬件。 VR中使用的输出设备可以分为两个领域,即单眼显示器和立体显示器。
在诸如平板计算机显示器之类的单目显示器中,使用3D投影将3D环境投影到2D平面上。 尽管已成功将其用于3D建模和计算机游戏等视觉应用,但该视图在某种程度上等效于一只眼睛闭上眼睛的周围环境,这会降低提供双倍深度信息的双目提示的深度感知质量。 这使用3个自由度或6个自由度的输入设备操纵对象变得更加困难,并且研究表明,与使用立体显示器相比,使用6个自由度的输入设备以3D操纵对象的速度要慢一些[8]。
另一方面,立体显示器为两只眼睛提供了不同的信息,这使得眼睛和人脑可以通过从每只眼睛的角度创建图像来向用户提供深度感知[8]。 立体显示器通过同时向两只眼睛提供图像或在不同时间向两只眼睛提供图像同时阻止彼此的可见性来工作。
主动式快门眼镜是其中两只眼睛在不同时间接收其信息的技术示例之一。 为了实现这一点,眼镜与显示器的刷新率同步,并且在两只眼睛之间交替显示,一次只能让一只眼睛看到显示器。 快门眼镜的一些最重要的缺点是,它们限制了用户的视野(FOV),并且与不使用时相比,它们通常会使图像略微变暗。 其次,为了提供良好的图像质量,用户必须从合适的角度观看显示器,这也降低了它们的实用性。
2.2 相关工作
2.2.1 虚拟装配
定义虚拟装配可能是一项艰巨的任务,因为不同来源之间的定义略有不同。 在谈论VA时,我们指的是Xia等人的以下定义:
利用VR技术,计算机图形学,人工智能,装配理论和方法,构建产品的虚拟模型和装配布局的虚拟环境,然后对产品设计结果和装配操作过程进行交互分析和仿真。 [53]。
尽管将VR用于产品组装的研究已经进行了20多年,但是,尽管已经意识到VR的潜力,并且可以找到包括组装设计在内的多种潜在用例,但实际的工业应用还没有得到广泛应用[19]。 ],组装培训[1、2、5、27、29、33],维护培训和质量控制[33]。
除了可以节省与虚拟培训相关的成本外,多项研究还发现,将受训人员的表现与经过传统培训的受训者的表现进行比较时,VR培训可以更有效[1、11、17、41、54]。 尽管导致性能提高的因素尚不清楚,但是人们认为增强的交互性可以部分归因于增强的交互性和立体显示[41]。 Boud等人[11]和Dwivedi等人[17]也支持使用立体显示器进行沉浸式体验的重要性。 导致非身临其境的VR训练效果较差的一个促成因素也可能是,过去的研究表明,当使用立体显示器时,用户在3D环境中定位对象方面取得了更大的成功[8]。
VA可以大致分为两种常用方法,基于物理的建模(PBM)和基于约束的建模(CBM)[41,53]。 在前一种方法中,对象之间会发生物理交互,并且零件之间的连接是通过零件之间的物理接触形成的。 但是,在CBM中,通过引入物理约束来执行组装,这些约束会减小要操纵的对象之间的自由度,从而限制零件之间的相对运动和旋转。
基于物理的建模尽管基于物理的建模可以提供装配的高精度仿真,但是物理仿真的精度取决于所使用模型的精度。 尽管用于设计模型的计算机辅助设计(CAD)程序可以使用非均匀有理基础样条(NURBS)或样条来准确描述模型的几何特征,但需要对模型进行细分以用于VR仿真。 这会导致模块精度下降,从而导致零件在几何上可能彼此不兼容。
Behandish等人开发了用于虚拟装配的通用有效力模型[6]。 他们的方法利用虚拟物体周围的人工能量场进行零件之间的碰撞检测,并在虚拟装配过程中将零件引导至所需的空间配置。他们的方法的一项重大成就是能够将自由运动和插入到车身的两个阶段统一起来。 单一交互模式有效地消除了两个阶段中每个阶段对不同物理行为的需求。 但是,尽管他们的模型非常适合于传统的孔内钉组装,但它并不能提供一种简单的方法来实现更复杂的连接,例如螺纹连接。
基于约束的建模虽然PBM专注于在零件之间提供逼真的基于物理的交互作用,但CBM牺牲了一些物理精度以获取其他好处,例如增加稳定性,更好的性能,准确性和简单性。 在虚拟装配的情况下,CBM可能特别有用,因为当缺少物理约束时,使用虚拟约束可能对用户有所帮助。 使用基于约束的建模的系统通常分为两类:
第一类使用具有预定义最终零件位置的位置约束。 通常,涉及此类约束的解决方案通常会导致“就地放置”模拟,其中,一旦用户将其移动到目标位置附近,就将零件锁定在它们的位置。 由于位置约束实际上很难实现,因此当对零件之间的相互作用进行建模对应用程序而言不是至关重要时,它们是一种有吸引力的解决方案。 由Noghabaei等人开发的VR平台为识别生产零件中的差异提供了可能性,它还可以作为交互式培训和模拟的平台[33]。 尽管他们的方法是非物理的,并且零件受位置限制而连接到其他零件,但它表明VR装配也可以在大型工业零件上工作。 他们研究的一个与众不同的方面是能够导入3D扫描零件并通过尝试将其连接到其他零件来检查其质量。
CBM中的第二类基于零件的几何特征对零件之间的连接进行建模,其中当满足特定条件(通常是零件之间的距离)时,应用几何约束来限制零件的相对运动。 这些应用程序的基本原理是利用约束求解器来限制对象相对于彼此的移动方式。 尽管已提出了多种解决几何约束系统的方法,但由于限于使用PhysX提供的约束求解器,因此我们不对其进行详细介绍,但是,有关VA中用于约束求解的方法的更多详细信息, 我们建议参考Seth等[41]的详尽评论。
由于其优点,煤层气已被广泛研究,并在以前的研究中得到利用。 Wang等人讨论了约束运动仿真的基础,并提供了在装配仿真中检查和应用约束的方法和算法[50]。 在他们的研究中,他们研究了轴和平面约束组合的分析,并在整个组装过程中保持先前添加的约束。 他们还提出了一种在组装过程中通过视觉显示约束来指导用户的方法。 Murray等人在有关沉浸式装配和维护仿真环境的研究中,开发了一种虚拟环境,用于基于约束的装配和维护任务仿真以及大型机械产品的分析[29]。
除了强制实施几何约束外,某些VA应用程序还执行其他验证(例如碰撞检测),以确保用户的动作与实际情况相对应。 与基于物理的建模相比,碰撞检测的区别在于,在这些VA应用程序中,该应用程序仅检查对象之间是否不相遇,而在基于物理的应用程序中,物理引擎确保对象不会重叠。 Lu等人在他们的基于约束的飞机发动机组装训练系统中,使用了分层边界框方法进行碰撞检测[27]。 尽管虚拟零件之间没有物理响应,但将力反馈设备集成到系统中,以向用户提供适当的反馈。
混合建模除了PBM和CBM,还提出了多种尝试将两种方法的优点结合在一起的混合方法。 通常,这些方法通过在不连接虚拟零件时允许虚拟零件之间的物理交互,并在存在虚拟零件之间的约束时禁用两个对象之间的碰撞来结合物理和约束,从而允许未连接零件之间的物理交互,同时保持性能和准确性。 煤层气的好处。
Tching等人使用了Virtuose触觉设备来构建CAD模型装配的交互式仿真[46]。 除了使用机械关节限制两个零件之间的相对运动外,他们还使用虚拟墙将物体引导到特定的空间配置。 他们还将此概念形式化为插入任务的虚拟约束指导(VCG)。 尽管它们的方法比PBM更接近CBM,但它们允许虚拟零件之间进行物理接触,直到插入任务达到特定状态为止。
Seth等人[40]也使用类似的方式将PBM和CBM结合在一起。 他们将CAD模型数据中的B-Rep实体模型数据用于虚拟零件之间的碰撞检测以及获得几何约束。 他们的应用程序使用了自定义的物理引擎进行仿真,尽管这种方法提供了精确的仿真,但我们尚不知道有任何可用的物理引擎会支持基于B-Rep的碰撞检测。
Gonzalez-Badillo等人开发了触觉装配和制造系统(HAMS),这是一种基于物理和约束的触觉虚拟装配[19]。 在他们的研究中,他们发现与启用了动态约束的系统相比,启用约束时,用户能够始终如一地更快地执行组装任务。 此外,当约束处于活动状态时,他们的用户还认为控件更易于使用,这也使装配变得容易。
3. 系统设计和环境
在本章中,我们描述了应用程序的总体设计,包括硬件和软件选择。 首先,在第3.1节中,我们描述了用作应用程序测试用例的玩具组。 然后,在3.2节中,我们列出了我们为应用程序自己设置的要求。 在3.3节中,我们介绍了整个系统的设计,最后在3.4节中,我们介绍了应用程序所需的硬件设置。
3.1 测试用例
尽管我们的目标是开发虚拟装配的通用应用程序,但我们使用了一组Handy Man的Go-To Caddy玩具块(图3.1)作为该应用程序的测试用例,因此一些设计决策是基于这些功能的 的玩具块。 该套件由72个零件组成,具有19个不同的品种。 尽管这些零件不能准确表示任何现实的装配任务,但它们提供了足够的多样性以证明应用程序的灵活性。
关于玩具套件中零件的一个值得注意的方面是,螺母和螺栓(套件中的紧固件)的尺寸与套件中的其他零件相似。 尽管该套件不包含会需要非常精确地使用手指的微小零件(如微小的螺钉),但大多数早期的VA研究已在更大的物体上进行了操作。 与大多数现有的VA应用程序相比,另一个显着差异是玩具组中的零件相对较小。 虽然最大的部分约为20厘米×10厘米×6厘米,但最小的可抓取体积仅为2毫米厚。
3.2 系统要求
为了创建一个通用的虚拟装配培训应用程序,可以通过引入新的装配零件和装配任务轻松地对其进行扩展,我们对自己设定了以下要求,以便在开发过程中作为指导:
1. 可以使用常规PC进行开发。
2. 可以轻松地将应用程序移植到不同的头戴式显示器。
3. 用户界面未绑定到任何特定设备。 在开发过程中使用Leap Motion时,人机界面仅应处理零件运动,以便将来有可能使用其他系统。
4. 用于装配的零件以模块化方式构建,因此可以轻松添加新零件
5. 在硬件功能方面,应用程序应令人信服且切合实际。 尽管现实价值很难衡量,但我们认为,如果用户可以沉浸在应用程序中,那么该应用程序确实可以满足要求。
6. 应用程序应支持加载不同的组装任务。 组装任务(包括用于组装的虚拟零件)在此项目中作为Unity资产提供,并且将来可能还会支持直接从文件系统加载它们。
7. 应用程序还应该能够考虑组装任务数据中可能存在的错误。 Pham等人使用无监督的工作流提取来从第一人称视频中提取装配任务[37]。 为了支持类似的装配体提取方法,我们的应用程序应该能够根据零件的相对位置和方向来解析连接。
8. 应用程序应支持在组装过程中指导用户,并检测用户所犯的错误。
3.3 系统设计
在本节中,我们分三部分描述整体系统设计。 首先,我们描述如何在应用程序中表示装配体和零件数据。 然后,我们采用了从早期研究中改编的基于约束的建模方法,最后给出了应用程序的模块化结构。
3.3.1 装配数据
过去已经提出了多种表示装配体数据的方法,并且人们将装配体理解为将零件重复连接到其他零件的过程似乎已被广泛接受。 因此,用于表示装配体的一种广泛使用的方法就不足为奇了,将它们视为包含各种可以相互连接的特征的零件的集合(图3.2),这也就不足为奇了。 基于此约定,我们使用以下细分表示虚拟程序集:
4. 执行
本章介绍了已开发的系统。 第4.1节介绍了该应用程序的基本用法。 在第4.2节中,我们介绍了获取零件3D对象的方法,以及用虚拟装配所必需的信息对它们进行注释的过程;在第4.3节中,我们介绍了如何使用这些零件定义来创建装配任务。 之后,在第4.4节中,我们将详细讨论如何在我们的应用程序中处理基于约束的程序集。 然后,在第4.5节中,我们讨论了用于虚拟手和虚拟对象之间交互的方法。 第4.6节包含有关我们用于用户测试的场景设置的信息。 在第4.7节中,我们描述了用于装配验证的方法,然后在第4.8节中描述了装配辅助。 最后,在第4.9节中,我们讨论了在开发过程中观察到的一些未解释的物理行为。
4.1 使用场景
我们应用程序中的基本工作流程如下:启动程序时,用户需要在VR跟踪站的视野中找到一个可以站立和移动双手的地方。 为了最大程度地减少对Leap Motion的干扰,用户不应直指反射表面,并且Leap Motion准则还建议从手中取下手表和其他反射性物体。
为了与应用程序进行交互,用户可以使用语音命令或触摸菜单(图4.1b),可以通过点击连接到用户手腕的按钮来打开该菜单。 用户可以执行的可用操作取决于程序的状态,但是在基本工作流程中,用户必须至少利用以下以下操作:开始启动应用程序,列出以列出可用的组装任务,加载以加载组装任务 ,然后退出以退出该应用程序。 此外,还为用户提供了语音命令,以列出所有可用的语音命令(图4.1b)。
如果在用户戴上头戴式耳机之前启动了该应用程序,则他们可以更新头戴式耳机跟踪并将视口设置为正确的开始位置。一旦准备好开始,用户需要通过启动开始操作来开始仿真。此后,用户将获得有关可用命令的简短的语音应用内介绍。介绍之后,用户应首先列出可用的程序集,然后再加载唯一的可用程序集,即“ Medium”,以加载实际的程序集任务。加载任务后,将向用户显示一个介绍性动画,其中向用户显示他们将要构建的完整装配体,还向用户显示一个动画,该装配体描述了装配体的分解图以展示零件之间的连接(图4.1c)。此后,我们将装配件移动到用户面前的桌子上,以便用户以后需要时可以对其进行检查。动画完成后,我们还将生成用户需要组装到表中的零件,以便用户可以开始组装零件。
4.2 零件定义
我们使用Shapr3D [42]创建玩具积木的3D CAD模型。 尽管任何3D建模软件都可以满足该任务,但是使用CAD软件具有的额外好处是,可以更接近实际情况,即零件在生产前就已经在CAD中进行了设计。 要将对象导入Unity,我们将CAD模型导出为STL文件,并使用Blender [7]将其转换为FBX模型。 尽管Shapr3D可以直接导出与Unity兼容的.obj文件,但是我们需要在Blender中处理模型,以将正确的材质分配给几何并执行UV映射以设置纹理。 由于大多数VR头显需要两次渲染场景,因此每只眼睛一次,因此我们也借此机会对Blender中的模型应用了抽取滤镜,以保持尽可能少的多边形数量,同时仍保持模型的视觉完整性。
为了支持虚拟装配,零件的3D模型需要增加描述零件不同附接点的几何和机械信息。 我们通过构建Unity预制件(充当运行时对象创建模板的预制对象)来做到这一点。 我们的每个虚拟零件预制件都包含一个根对象,该根对象包含一个零件部件,该部件包含有关零件的基本信息,例如名称和质量。 而且,每个部分都包含一个或多个作为子对象提供的附件(图4.2)。
如3.3节所述,我们的应用程序将零件之间的连接作为附件连接处理。 我们将附件实现为继承自Attachment基类的组件(图3.2)。 不同的附件类型用于确定哪些类型的附件能够彼此形成连接并描述附件的形状。 我们为我们的应用共安装了7种不同的附件:箱体,圆柱孔,圆柱轴,管线孔,多面孔,多面轴,带螺纹的圆柱孔和带螺纹的圆柱轴。
为了检测运动对象之间的碰撞,Unity要求这些对象的碰撞器要么是原始碰撞器(盒子,球体或胶囊),要么是凸面网格碰撞器。 此外,凸网格碰撞器中的面和顶点的数量限制为255,这极大地限制了碰撞器形状的复杂性。 但是,当需要更复杂的对撞机来移动对象时,可以从这些简单的形状中创建复合对撞机。 考虑到我们大多数零件都是凹面的,我们也采用这种方法来为对象提供准确的对撞机形状。 方便地,由于每个附件都知道其形状,因此我们使用附件为零件构造复合碰撞体(图4.3)。
尽管可以使用复合对撞机来处理零件中的孔,但在实践中将不可行,因为它将带来高性能影响,从而使该方法不适用于VR。但是,使用基于约束的装配,当两个对象的运动受到限制时,我们可以通过禁用孔所属的对象与进入孔的对象之间的碰撞来模拟孔,以便它们只能沿孔的方向移动。 Tching等人[46]使用的这种方法非常适合于实时VR应用,因为除了已经存在的物理约束之外,它不需要额外的计算,并且实际上可以减少来自物理引擎的压力。因为要执行的碰撞检查较少。但是,此方法的一个小缺点是,当对象不在约束下时,它们不能主动进入孔中,但是可以通过精心设计约束来缓解此问题。
4.3 装配定义
除了提供虚拟零件作为Unity预制件之外,我们还提供目标装配体作为Unity预制件,因为这提供了在Unity编辑器中编写新装配任务的便捷方法。 在我们的应用程序中,我们包括3种不同类型的组装任务:简单,中等和困难,以测试不同级别的复杂性(图4.4)。
在加载装配任务时,我们会自动推断出每个零件之间的连接,而不是依赖于事先指定的连接信息。 这样做的原因是,这种方法允许处理从例如第一人称视频[37]中提取的装配数据,其中通常可以获取两个零件的相对位置和旋转,但其中包含零件如何显示的信息。 连接不可用。
为了解析零件之间的连接,我们对所有附件对执行一个幼稚的循环,并检查它们是否满足与连接所需的每种附件类型相关的特定条件。 例如,在圆柱轴和圆柱孔的情况下,我们计算轴是否穿透孔。
4.4 基于约束的组装
我们主要基于Tching等人[46]的虚拟约束指导(VCG)的概念来实现基于约束的装配。 VCG的主要思想是将引导对象达到特定空间配置的虚拟约束与限制两个部分相对运动的机械关节相结合。 尽管Tching等人专注于传统的孔内组装,但其实现的基本思想足以使自己适合于各种类型的机械连接,例如螺钉连接或什至更复杂的连接。
与Tching等人不同,他使用虚拟壁将钉引导到孔中,并且使用运动学约束来限制连接的零件之间的相对运动,我们不仅使用运动学约束来形成零件之间的连接,而且还使用运动学约束来引导零件进行良好的对齐 -连接所需的时间。 进行此更改的原因是,当两个部分都可以由用户操作时,将虚拟墙连接到带有孔的物体上将是不切实际的。 此外,使用运动学约束作为指导可让我们对不同连接的行为方式进行更多的自定义。
要在我们的仿真中激活引导,用户需要将两个零件放置在空间配置中,其中两个兼容的附件彼此之间在一定距离内,并且它们的相对方向在一定角度阈值内。 为阈值找到合适的值取决于零件的大小和所需的指导水平,但是通过经验测试,我们得出了0.35世界单位的距离阈值(有效地为35厘米)和用于连接的45°角度阈值( 图4.5a)。 激活指南时,我们通过创建可配置关节来限制零件的相对运动,从而引入运动学约束。 在Unity中,可配置关节是一种物理关节,可以在所有可能的关节中实现最高程度的自定义,因此最适合我们的用例。
我们将指导和联系分为两个阶段。 在第一阶段,零件的空间定位不允许形成连接,例如,由于零件之间的碰撞。 在此阶段中,将物理关节配置为通过使用弹簧力将零件主动驱动到第二阶段所需的空间配置。 在第二阶段中,将零件对齐,以便可以通过例如将圆柱轴滑入圆柱孔中来形成零件之间的连接。 一旦两个零件之间的对准满足所需的空间配置,导向器便移至第二阶段,在该阶段中零件的相对对准被锁定,零件之间的相对运动被限制在零件需要接近每个零件的轴上 其他形成连接。
进入第二阶段时,如果有需要能够互相穿透的附件,例如圆柱轴进入圆柱孔,我们也将禁用两个零件之间的某些碰撞。 为此,我们找到孔所属的对撞机,并禁用该对撞机与轴的对撞机之间的碰撞。 与Tching等人禁用两个零件之间的碰撞的方法不同,通过有选择地禁用特定附件之间的碰撞而不是禁用两个零件之间的碰撞,例如,螺栓的头部仍可能与被撞物体碰撞。 被同一螺栓的螺纹穿透。
初始化可配置关节时,需要一些特殊的考虑。 首先,关节轴必须以这样的方式构造:形成连接的滑动运动发生在关节的X轴上,因为某些角关节参数(例如Angular XDrive和Angular YZDrive),Y和Z角的耦合配置 一起运动,同时仍允许单独配置X运动(图4.6)。 此外,在运行时在Unity中创建关节时,在创建关节时必须在目标配置中对齐要关节的对象。
一旦连接达到特定状态(例如轴进入孔),我们就开始考虑要连接的两个零件,此时,我们还将零件的装配合并为一个装配。 同样,当两个零件彼此断开连接时(例如,由于轴从孔中出来),我们使用广度优先搜索来检查装配中零件的连通性,并将装配分为多个不同的子装配。 尽管本应用程序中使用的任何方法均未严格要求组装的概念,但出于大多数实际的原因,我们还是这样做,因为它为我们提供了一种快速简便的方式来跟踪互连零件集的方法。
4.4.1 指南和联系
为了满足创建易于引入新零件的应用程序的设计目标,两个附件之一提供了确定附件是否可以连接到另一个附件的逻辑。 通过将这种高级逻辑与附件耦合在一起,可以轻松地引入能够连接到现有附件的新附件,而无需修改旧附件。 此外,为了促进现有指南和连接的可重用性,与指南和连接有关的逻辑与附件分开,因此附件仅指定可以使用哪种类型的指南和连接将附件连接到另一个附件。
对于我们的测试,我们提供两种连接,轴对孔连接和螺纹轴对螺纹孔连接。 虽然玩具组中的零件可以支持另外三种连接类型,即多面轴到多面孔,箱形轴到箱形孔以及轴到线孔,但由于时间限制,我们选择实现上述连接以供用户测试 确保引入不同连接的能力,并感受螺丝连接的工作原理,而无需支持用手指对物体进行灵巧的操作。
轴对孔连接是在圆柱轴和圆柱孔或带螺纹的圆柱轴和圆柱孔之间形成的传统钉孔连接(图4.5。在轴对孔连接中,轴可以沿主轴沿主轴在孔中自由移动 通过将可配置关节的xMotion设置为受限并锁定yMotion,zMotion,angularYMotion和angularZMotion可以实现此功能;对于带有盖的轴,将xMotion限制为轴的长度还可以在物理求解器中使用 由于物理过程以不连续的时间步长运行,因此零件轴所属的位置可能会穿过孔。
螺纹轴到螺纹孔的连接是在圆柱螺纹轴和圆柱孔之间形成的螺纹连接。为了形成连接,必须满足以下条件:首先,螺纹轴的直径必须与螺纹孔的直径匹配。其次,两个附件中的螺纹的手性必须相同。最后,两个线程的大小必须相同。尽管我们测试对象中的所有螺纹都具有相同的尺寸,直径和手感,但如果需要,也可能希望使用常规的轴对孔连接允许较小的螺纹轴到较大的螺纹孔。与无螺纹的螺纹连接相比,螺纹轴与螺纹孔的连接的显着实现差异是,关节的xMotion设置为锁定,并且我们主动跟踪轴和孔之间的相对旋转,并根据在累积旋转的过程中,轴会根据旋转方向向内拧入孔中,或者从孔向外拧出轴,从而提供类似十字绣的行为。
4.5 手-物体互动
在尝试实现手-物体交互的不同方法时,我们遇到了几个问题。由于Leap Motion仅在看到您的手时才看到您的手,因此很容易意外地使Leap Motion失去对您的手的跟踪,从而导致手再次从一个位置转移到另一位置时出现这种情况。这自然会给仿真增加一些不必要的副作用,例如,可能将手放在另一个物理对象内,而没有机会触发适当的物理响应。此外,由于在使用Leap Motion进行操作时缺乏物理力反馈,因此用户将手放在固体物体内或用手指捏住已抓握的物体是很自然和普遍的,因此,在尝试了不同的手-物体交互方法之后,我们得出了以下结论:得出的结论是,在尝试组装机械约束时,虚拟手与虚拟对象之间发生碰撞的负面影响要大于正面影响。自然地,这一决定限制了我们执行某些动作,例如抓住手指之间的一堆零件(图4.7)或用手指将螺栓紧靠另一零件,同时用另一只手将螺母连接到螺栓。
Oculus开发人员博客建议了以下几种抓握对象的方法:将对象传送到正确的位置,使用物理关节将对象连接到手,将对象直接附着到手,以及将对象保持在相对于对象的正确位置每个框架都用一只手施加力和扭矩以将物体推到所需位置[34]。尽管第一种选择是毫无疑问的,因为将对象彼此连接的物理关节在传送其中一个关节对象时不能很好地发挥作用,而第二种选择也有问题,因为PhysX关节确实可以将物体连接到运动刚体(手)时,其行为不符合预期。当通过育儿直接将物体附着到手上时,也会出现相同的行为,从而也迫使所抓握的物体也被视为运动刚体。尽管第四个也是最后一个方法在开始时给我们带来了可喜的结果,但是当跟随快速的手部移动时,该方法往往会过快,这常常导致附着的物体被迫移到不可能的位置。
当测试多种不同的手-物体交互方法时,我们了解到要使用基于约束的指导,当零件受到虚拟约束的主动约束时,我们需要允许零件在虚拟手指之间略微移动。 这种行为的真实生活对应关系是手指的皮肤变形以及手指的关节根据所握持物体的运动进行调整。 因此,我们根据Oculus Developer博客中的建议从变换匹配中提炼了思想,但不是直接施加计算力,而是使用基于[32]的弹簧阻尼器模型来计算对对象施加的力和扭矩。