APP下载

基于Java3D的机械臂三维虚拟场景创建及运动学仿真*

2014-09-15钱小平杨庆华鲍官军

机电工程 2014年1期
关键词:运动学形体建模

钱小平,杨庆华,荀 一,鲍官军

(浙江工业大学特种装备制造与先进加工技术教育部/浙江省重点实验室,浙江杭州310032)

0 引 言

随着网络的飞速发展,在网络上实现虚拟现实系统的研究越来越成为热点。在机械仿真领域中,利用便捷的网络对创建的机械臂三维仿真虚拟环境实现异地共享,与Internet集成后运行在不同平台上,从而实现“一次书写,随处运行”应运而生,而且极大地加快了仿真系统的开发。

1997年,SUN公司推出了跨平台的三维图形开发工具包Java 3D。Java 3D是Java 2SDK的标准扩展,它将OpenGL和DirectX这些底层技术包装在Java接口中,这种全新的设计使3D技术变得不再繁琐并可加入J2SF,J2FF整套架构,保证了Java3D技术强大的扩展性[1]。Java 3D本质是一个交互式的三维图形应用编程接口,因此其可以和普通的Java 2D、Swing、Applet等很好地结合。它支持导入外部3D图形文件。采用Pro/E,3DMAX等建模软件,直观、可视地建立零件模型,并给模型设置材质和贴图,再利用Loader接口将建好的模型导人到Java3D场景中,这样就大大减少了工作量,使设计者能够把更多精力放在人机交互等更深入的研究上。因此,Java3D成为编写三维应用程序的优越工具,在三维动画、机械建筑仿真等领域有着广泛的应用[2-3]。基于Java3D的机械臂三维虚拟场景创建及运动学仿真就是在这种背景下提出来的。

本研究在分析Java3D三维造型原理以及外部模型格式比较基础上,将机械臂各关节造型导入到Java3D场景中进行装配,最终在Java3D中实现四自由度机械臂仿真虚拟场景。最后,采用标准的D-H法对机械臂进行正、逆运动学分析,在Java中完成运动学仿真功能的实现。

1 Java3D三维形体造型技术

Java3D作为Java语言在三维领域的扩展,是纯粹的面向对象结构。其数据结构采用Scene Graph Structure(场景图),这为描绘和渲染场景提供了一个简单、灵活的机制。

Java3D场景图是 DAG(Directed-acyclic Graph),即具有方向性的不对称图形[4]。在Java3D的场景图中,最底层(根部)的节点是Virtual Universe,每一个场景图只能有一个Virtual Universe。在Virtual Universe上面,就是Locale节点,绝大多数程序只有一个Locale,每一个Locale上面拥有一个或多个BranchGroup节点。要想建立三维应用环境,必须建立所需要的形体(Shape),给出外观(Appearance)及几何(Geometry),再把它们摆放在合适位置,这些形体及其摆放位置都建立在BranchGroup节点上,摆放位置通过另一节点TransformGroup设定。另外,安放好形体后,还需设定具体观察位置,用View Platform表示,它也建立在TransformGroup节点之上。场景图结构如图1所示。

在Java3D编程过程中,三维形体是重要的处理对象,可以有3种方式生成需要的三维形体:①利用Java3D提供的用于编写点、线、面的类生成点、线、面对象;②使用Utility里面用来生成基本形体的geometry classes;③通过调用外部其他格式的三维图形文件,生成复杂的三维形体对象。

图1 场景图结构

Java3D提供了基本形体以及编写点、线、面各种对象的应用,这些可用在应用程序之中构造简单的形体,然而复杂的形体则很难实现。可以通过调用其他格式的三维图形文件获得复杂形体,如直接调用VRML2.0、OBJ和 Lightwave格式的三维图形文件,或者通过处理,间接调用DWG,DXF,3DS等格式的三维图形文件。这些格式的三维模型可以很方便地应用在Java3D程序中。

2 机械臂虚拟场景Java3D实现

四自由度机械臂的模型相对比较复杂,主要由基座、腰关节、肩关节、腕关节、肘关节等关节以及各连接手臂组成。复杂的形体一般很难通过编程直接实现建模。VRML和Java3D等建模语言由于受到模型复杂性的限制,一般只适用于建立一些相对比较简单的基本模型或是由这些基本形体组成的规则模型。对于比较复杂的不规则模型(如机械臂模型),工作量相当大,并且难以实现精确建模。为了提高效率,研究者应充分利用在工程设计过程中已经大量存在的各种类型的CAD图形文件。在比较多种格式的基础上,本研究采用Java3D与VRML相结合的方式构建机械臂三维虚拟场景。

2.1 导入图形文件的格式选择

Java3D 支持导入的常见文件格式有:wrl、obj、3ds。3ds文件不易控制模型材质和组件,因而不适合作为模型文件格式。wrl与obj格式比较结果如下:

(1)wrl文件远小于obj文件,wrl文件大小不到obj的1/10,这样大大提高了数据传输率。

(2)wrl文件数据信息完整,obj文件不包含材质信息,而wrl文件数据信息较完整,包含几何模型数据和材质数据。

(3)wrl文件可用VRML语言进行优化。

可见,VRML作为虚拟现实建模语言[5],具有文件体积小、易于编辑、适于网络传送等特点。另外,大多数CAD软件都支持静态的三维零件的VRML格式输出,例如UG、Pro/E等,或者提供了不同文件类型的转换,如3DSMAX可以读入DWG、3DS格式的文件,并把它们转换成VRML2.0格式。因此本研究在对obj、3ds与wrl这3个文件格式进行比较基础上,选择wrl格式作为机械臂各关节模型的保存格式,用以后续导入到Java3D场景中。

2.2 3DSMAX中建立各关节模型

现在比较流行的三维建模软件如 UG、Pro/E、3DSMAX等都提供VRML接口。UG和Pro/E支持VRML2.0格式,但输出的 VRML代码格式不规范。3DSMAX具有强大的建模功能,它提供的VRML97 Exporter可将创建的3D场景经过优化后转换成标准的VRML格式直接加入到最终场景中,转换后的VRML文件较3DS文件大大减小,从而降低了模型文件网络传输时间。

3DSMAX由于其独特的优点,本研究选用3DSMAX作为机械臂关节模型的创建工具。三维模型在最终导入Java3D之前还需要进行相关处理。本研究在3DSMAX里修改零件之间的链接关系,对需要旋转的物体设置好旋转轴,以便设置正确的运动关系,从而建立高质量的虚拟原型,然后输出Vrml97格式,利用Vrml97 Loader导入到Java3D虚拟空间中。

四自由度机械臂主要部件有基座、腰关节、肩关节、肘关节、肘腕关节、腕关节等。各关节在3Dmax8.0中造型时以3DS格式保存,最终输出对应的VRML格式。以基座和二指手关节为例,3DSMAX创建并修改后得到的造型如图2所示。

图2 机械臂关节的3DS模型

2.3 Java3D对Vrml模型文件的导入

Java3D 的 com.Sun.j3d.loaders包中包括 Loader和Scene两个接口,在Java3D中调用不同格式的3D图形文件,应根据这两个接口编写自己的Loader类。在Java3D中使用VRML格式外部模型是通过Vrml97 Loader实现的,需先下载VRML97.jar,并设置好其路径,通常放在“%JAVAHOME%lib”目录中。导入时需要用到VrmlLoader和Scene两个类,其中VrmlLoader提供了用于载入图形文件的方法,Scene则用来容纳载入的图形。当Scene中赋以图形对象后,可使用TransfomGroup对象装载该图形对象中的3D模型,以便后续装配时对其进行方位调整。具体方法如下:

(1)创建形体所在的局部坐标系:

(2)设置VRML文件的导入接口:

(3)将VRML造型添加到场景中:

各关节的导入都基于以上原理,当在一个场景中多次调用外部的VRML文件时,本研究可以把用于处理调用问题的部分提取出来单独作为一个类,以便多次重复使用。以基座和二指手关节为例,机械臂关节模型导入Java3D场景的相关程序运行结果如图3所示,用以后续组合装配成完整机械臂。

图3 机械臂关节的VRML模型导入Java3D场景

2.4 关节模型的组合装配

机械臂作为一个装配体,由各关节零件与手臂装配而成。其中每个关节零件由 VRML造型,通过VRML97Loader转换为对应的BranchGroup对象后被添加到三维场景中;手臂造型则直接采用在Java3D场景中通过生成圆柱体这种基本形体的方法。

当各关节完成建模并导入Java3D场景后,便可利用形体变换类 TransformGroup,Transform3D来组装。本研究对每个单独关节设置一个局部坐标系Trans-formGroup,然后根据各关节位置姿态利用Transform3D的方法将它们进行重组并建立链接关系。组装时最关键的是使每一个部件自身运动对其他部件的影响正确体现出来,并且这些部件能够正确动作。为此,需将动作从属于A的部件B的transformGroupB加入到transformGroupA中,并使各个部件能绕正确的轴心转动。

构建机械臂仿真模型的关键代码如下:

实验室的机械臂实物模型如图4所示。

图4 机械臂实体模型

Java3D构建的机械臂虚拟模型如图5所示。

图5 Java3D机械臂虚拟模型

3 简单人机交互实现

导入VRML造型文件到Java3D场景后,便可利用Java3D非常完善的API进行相关操作,使三维程序实现所需的人机交互行为。

3.1 Java3D动画与交互技术

Java3D中可以利用一系列Interpolator内插器对象与Alpha对象结合来编写各种三维应用动画程序。其中Alpha对象提供了时间控制环节,内插器定义了三维形体如何在空间做运动[6]。

对于虚拟仿真而言,交互是必不可少的,Java3D中可以利用Java事件处理机制实现交互[7],也可通过Behavior类的子类来实现交互。设计者利用Java3D提供的鼠标、键盘交互等技术就可以实现简单的人机交互,也可对Java 3D里已存在的行为类改写[8],以满足自身特定需要,实现进一步的复杂人机交互。

3.2 Java3D实现机械臂简单人机交互

Java3D 中的 MouseZoom、MouseRotate、MouseTranslate、MouseWheelZoom、KeyNavigator类可以实现鼠标、键盘对构建的机械臂运动仿真三维虚拟场景进行漫游,关键代码如下:

4 运动学分析与仿真实现

机械臂的三维运动仿真是以正、逆运动学为基础[9],仿真需要得到机械臂正、逆运动学方程。位置逆解问题是最重要的研究问题,它直接关系到机械臂离线编程、轨迹规划和实时控制等工作。本研究采用标准D-H参数法建立机械臂正运动学模型,用解析法推导出逆运动学模型,为后续仿真奠定基础。

4.1 机械臂正运动学建模

已知各关节角度求末端执行器位置,称为正向运动学[10]。两杆间位姿矩阵是求手部位姿矩阵的基础,从基坐标系到末端连杆坐标系顺序相乘可得到机器人的运动学方程。

D-H法建立两杆间位姿变换矩阵[11]为:

本研究对所研究的四自由度机械臂各关节建立坐标系,并采用简化的线模型表示,机械臂关节坐标如图6所示。

图6 机械臂关节坐标系

本研究根据表1中D-H参数建立相邻关节间变换矩阵,然后相乘,最后得到正运动学方程。

表1 机械臂D-H参数表

正运动学方程为:

4.2 机械臂逆运动学建模

已知机械臂末端位姿求解各关节的角度值θ1,θ2,θ3,θ4,称为运动反解。采用矩阵逆乘法求得机械臂运动学逆解为:

计算出所有可能解后,由于关节运动范围限制,本研究对某些解(甚至所有解)进行剔除,以选取最接近当前操作臂的解[12]。

4.3 运动学仿真功能模块实现

对机械臂的正、逆运动学分析与求解后,即可在Java中实现四自由度机械臂正、逆运动学的相关仿真。采用Java Swing技术开发的运动学仿真界面及本研究具体的运动学仿真模块如图7所示。当机械臂末端位置取值为(800,0,349)时,仿真可得机械臂4个关节角度值分别为0.000,-45.007,-67.229,22.236。

图7 机械臂运动学仿真

正运动学仿真实现的关键代码如下:

逆运动学仿真实现的关键代码如下:

5 结束语

通过应用Java3D可以开发出具有高度视觉真实感的3D图形应用程序。该程序可成为Applet被插入到HTML中用支持Java的网页浏览器进行操作,并在浏览器上实现浏览或交互,以及实现基于Web的特点。它的最大优势在于代码的可传输性,生成的可视化场景由服务器方便地传输给客户端,然后在客户端本地运行。正因为如此,结合VRML文件的通用性和Java3D对三维场景强大的操作性及跨平台性,Java3D被用来在网页上构造动态的三维世界和虚拟现实。构建基于Java3D的网络交互式三维虚拟环境对开发机械臂运动仿真系统具有很大的意义。

下一步,本研究将充分发挥Java 3D在网络三维仿真领域的强大优势,继续深化Java3D机械臂仿真系统的开发。

[1]SUN Inc..Java3D/Tutorial[EB/OL].[2005 - 05 - 07].http://java.sun.com/products/java-media/java 3D.

[2]都志辉.Java3D编程实践 -网络上的三维动画[M].2版.北京:清华大学出版社,2002.

[3]张 杰.Java3D交互式三维图形编程[M].3版.北京:人民邮电出版社,1999.

[4]鲍彦如,任长明.Java3D实现VRML浏览器新途径[J].计算机应用研究,2001,12(2):23-25.

[5]黄铁军,柳 健.VRML国际标准与应用指南[M].北京:电子工业出版社,1999.

[6]李 敏,丁友东.Java图形与动画编程实例[M].北京:清华大学出版社,2003.

[7]王 鹏,何昀峰.Java Swing图形界面开发与案例详解[M].北京:清华大学出版社,2008.

[8]邓文生,马王俊美.Java3D扩展鼠标交互功能的研究与实现[J].计算机仿真,2007,4(3):176-179.

[9]蔡自兴.机器人学[M].北京:清华大学出版社,2000.

[10]王庭树.机器人运动学及动力学[M].西安:西安电子科技大学出版社,1990.

[11]侯国柱,孔庆忠.关节型机械臂运动学分析及雅可比矩阵求解[J].宁夏工程技术,2007,5(4):36-38.

[12]姜宏超,刘士荣,张波涛.六自由度模块化机械臂的逆运动学分析[J].浙江大学学报:工学版,2010,44(7):1348-1354.

猜你喜欢

运动学形体建模
联想等效,拓展建模——以“带电小球在等效场中做圆周运动”为例
基于MATLAB的6R机器人逆运动学求解分析
基于D-H法的5-DOF串并联机床运动学分析
基于PSS/E的风电场建模与动态分析
不对称半桥变换器的建模与仿真
西夏文形体研究述略
鸡霉形体
基于运动学原理的LBI解模糊算法
早期形体训练对产妇产后形体恢复的积极效果
三元组辐射场的建模与仿真