西安门式起重机虚拟拆卸系统设计及关键技术(二)

- 2019-04-01-

2.2交互式拆卸关键技术

  1)自动拆卸模块

  自动拆卸功能的主要包含运动设计和键盘交互两方面,西安门式起重机首先要完成动画设计,即零件拆卸动画路径以及序列的安排;然后,通过事件适配器完成交互操作,让使用者可以控制设备自动拆卸过程,切换观看角度以更好地了解设备结构。

  ①复合运动

  在虚拟拆卸场景中,实现自动拆卸的无碰撞路径设计主要通过动画路径规划方法。动画的本质是虚拟物体的空间坐标变换,具体来说就是物体顶点坐标经过位置变换,完成物体的移动。三维空间中的运动都可以通过平移、缩放、旋转等运动形式表示出来,也就是复合运动。

  在自动拆卸过程中,主要涉及的运动方式有两种,一种是位移,另外一种是位移与旋转的复合运动。复合运动是通过平移、旋转、缩放矩阵的级联完成的。在拆卸中常见的螺钉,螺钉的运动就是位移与旋转的级联。首先将位移变换矩阵与旋转变换矩阵级联成一个变换矩阵,而不需要分别完成两次变换,极大地提高了变换效率。



  ②键盘交互

  OSG提供的图形用户接口(Graphics User Interface,GUI)封装了大部分常用操作系统的交互动作捕捉接口函数。为了避开系统底层复杂的交互定义,OSG提供了一种适配机制,能将系统底层的交互定义统一到OSG交互定义中来,这就是事件适配器。在这里,通过重载osgGA库中的事件处理函数handle()开发具体的交互功能。通过GUIEventAdapter类下的getKey()函数以及getEventType()函数获取按键类型以及事件类型,进而通过switch函数实现不同情况下的对应功能。

  上述复合运动与键盘交互分别是自动拆卸的两个关键问题,通过平移、旋转、缩放变换对目标对象进行坐标变换,控制设备模型的运动,而键盘交互是用户控制拆卸进程的方式,以达到具有交互功能的自动拆卸。

  2)手动拆卸模块

  ①拖曳器

  拖曳器是用户通过鼠标将虚拟场景中被选中的对象进行移动、旋转操作的工具。OSG中的拖曳器并不是直接对目标物体的坐标进行修改,而是基于OSG的节点场景管理方式,将一节点设置为目标物体的父节点,然后对父节点进行矩阵变换操作,进而表现为目标物体的位移、旋转、缩放操作。

  OSG提供了平面拖曳器、平面轨迹球拖曳器、轨迹球拖曳器、平移拖曳器、盒式拖曳器等多种类型的拖曳器。机械设备在设计时为了方便拆装,拆卸方向一般比较固定,故为了可以自由设定设备拆卸的约束方向,选择设置3个一维平移拖曳器实现设备X、Y、Z方向的拖曳拆卸。手动拆卸通过单击拖曳器并拖动实现,在Windows系统环境下,用户使用鼠标单击左键,系统将此事件封装后放入消息队列中等待响应。

  其主要原理是:单击鼠标左键时,触发GUIEventAdapter方法下的Push事件,再用LineSegment Intersector创建线段交集检测函数,事件适配器ea通过get方法得到左键单击事件发生的坐标位置,检测是否与某一虚拟物体的X、Y坐标一致,如果一致则选中拖曳器,完成拖曳操作。

  ②物体高亮

  目前,大多数桌面式虚拟拆卸系统因计算机显示器分辨率限制对类似于西安门式起重机的大型设备不能做到小零件的快速选择,为了解决这一问题,本文使用了一种基于线框显示的辅助对象选择方法。

  通过设备模型的线框显示,用户可以更方便快捷地选取目标零件,避免误操作的发生,提升了拆卸训练的效率。



  3)辅助功能模块

  ①场景漫游

  在虚拟拆卸场景中,场景漫游是通过设置漫游器实现的,漫游器其实就是改变观察者(相机)的坐标位置和观察角度。OSG图形引擎根据用户的不同需求提供了多种漫游方式:轨迹球漫游、飞行漫游、驾驶漫游等。

  交互式场景漫游器就是通过事件响应完成相机窗口的矩阵变换,从而达到操作者通过键盘鼠标等外部输入控制视角的目的。漫游器的场景更新原理。

  在进行漫游时,场景核心管理器Viewer中使用SetCameraManipulator自定义一个单独的场景漫游操作器,当收到外部键盘/鼠标输入后,EventHandle启动事件响应机制,调用handle函数,之后根据用户按键相机位置发生变化,至于场景漫游器的灵敏度,可以通过设置移动、旋转步长进行控制,最后Viewer在帧绘制时获取到已经改变的视口位置矩阵并更新相机位置。

  ②相机路径记录

  为了更好地通过虚拟拆卸系统观察自动拆卸过程,设置路径记录与回放功能,在拆卸进行时按下“R”或“r”键开始记录。在拆卸进行完毕后,再次点击该按键即可对记录拆卸过程进行回放。手动拆卸过程中的路径记录可记录拆卸过程,方便后期对于拆卸操作的评价以及纠错。

  相机路径记录的原理是使用Animation Path Manipulator类的insert()函数将相机在某一时间段内的关键点信息保存到一个PATH文件内,主要包括时间、位置以及运动方式信息等。计算机依据这些信息,对关键点进行基于插值算法的平滑连接过度,形成流畅的动画效果,实现拆卸过程的回放。

  ③工具库

  在实际拆卸过程中,不同的零件需要不同的拆卸工具,为了更好地提升虚拟拆卸系统的实用性,建立拆卸工具库,在工具库中存放一定数量的常用工具(两用扳手、螺丝刀等)。在虚拟拆卸过程中,需要特定工具时,如果操作者没有选择对应拆卸工具,则通过非模态窗口进行错误操作提示。

  ④立体显示

  立体显示可分为眼睛和头盔显示技术、自动分光立体显示技术和体三维立体显示技术等。本文所用硬件设备为立体眼镜,通过立体眼镜实现三维显示的方法主要有分时、分色和分光等。本文使用OSG图形引擎实现虚拟拆卸系统的立体显示功能,立体显示主要包括互补色、水平分割、水平交错、垂直分割、垂直交错以及左右眼显示等模式,通过设置按键响应设计了显示模式的交互切换功能。虚拟拆卸环境中的立体显示效果。

  2.3 MFC与OSG的结合

  系统使用MFC作为交互界面开发工具,实现的关键是完成OSG与MFC之间的结合。OSG是一套基于C++平台的应用程序接口,而MFC是微软开发的基础类库,它基于C++封装了多个Windows API,专门用于图形界面开发。MFC通过线程机制可以创建两种不同的线程,分别为工作者线程和用户界面线程。工作线程不具备消息机制,不参与程序运行过程中相关任务的维护,只作为后台执行相关的计算任务。用户界面线程有完整的消息循环和处理机制,用于处理用户输入和响应界面交互。二者都是基于C++语言的,都是基于线程工作的,使MFC与OSG的结合成为可能。

  实现结合的关键是OSG如何在指定的窗口渲染场景图形,实现原理MFC程序在处理培训人员单击事件时,响应函数里会运行_beginthread线程创建函数,函数里的第一个参数指向新线程的起始地址,即新线程是对OSG场景进行渲染。场景渲染包括场景拣选、场景更新和场景绘制,在渲染之前,OSG线程会处理来自MFC主线程传递来的事件,从而实现交互的功能。

  3.系统实现

  应用MFC开发虚拟拆卸系统交互界面,打开后可根据自身需求选择不同拆卸模式。系统主要模块包括交互式自动拆卸、手动拆卸以及操作手册等3部分,每个模式都包含西安门式起重机起升机构、运行机构、回转机构、变幅机构的典型设备零部件。

  为了达到起重机拆卸训练和学习的目的,面向西安门式起重机的虚拟拆卸系统设置了用于用户学习的自动拆卸模块,用户可通过键盘控制拆卸过程的进行,使用场景漫游全面的观察设备结构,配合文字提示快速熟悉设备结构;手动拆卸需要用户自主选择拆卸目标零件,由于起重机体积庞大,而部分零件相对较小,通过高亮显示的选择辅助可方便快捷地选中目标零件,提高效率,立体显示功能配合三维眼镜还可进一步提升场景的视觉体验。

  4.结束语

  针对西安门式起重机工况复杂,设备维修、维护拆卸频率相对较高的问题,搭建了包括起升机构、运行机构、回转机构、变幅机构的西安门式起重机虚拟拆卸系统,通过图形引擎OSG完成了虚拟拆卸系统自动拆卸、手动拆卸功能的开发,为提升系统的实用性添加了一系列辅助功能。最后,结合MFC完成了系统交互界面的开发,实现了系统的集成,对实际拆卸培训、教学等工作具有一定的指导意义。