基于VRML—JAVA的机器人运动仿真研究
来源:第三维度
作者:杨雨标,何汉武
单位:广东工业大学 机电学院
摘要:随着微机性能的提高,虚拟现实仿真已能在微机上进行。本文对运用VRML—JAVA技术在微机上进行机器人运动仿真进行了研究,提出了运用CAD软件造型来构造虚拟环境,然后用JAVA—EAI接口控制虚拟机器人运动的方法,在此基础上对S700工业机器人进行了建模和运动仿真。结果表明在微机上实现一个跨平台、网络化的仿真平台是完全可行的,这样的系统将可应用于机器人离线规划和编程及可视化教学等领域。
目前,虚拟制造(Virtual Manufacturing)已是制造业中广为接收的新概念,并成为研究应用的热点 。虚拟现实技术是实现虚拟制造的一个重要支撑技术.是进行产品虚拟设计的途径。以往,能实现虚拟现实的都是一些大型专业软件甚至是专用系统。随着JAVA和VRML技术的相继出现以及微机性能的不断提高,在微机上进行虚拟现实仿真已经成为可能 。这种微机上的仿真系统虽然不具备大型系统那样的真实感和浸入感,但它提供了一个低成本,低门槛的应用平台。本文以S700工业机器人为例,介绍了一个基于微机的机器人虚拟仿真原形系统,研究用VRML和JAVA技术实现机器人虚拟现实仿真的方法。
1 VRML及其JAVA接口简介
虚拟现实建模语言(VRML)是一项与多媒体通讯、因特网和虚拟现实等领域密切相关的新技术,其基本目标是创建因特网上的交互式三维多媒体技术和规范。早在1994年.VRML的几个创始人就提出了VRML的国际标准草案,即VRML1.0。能绘制静止三维图形的VRML1.0得到Netscape等浏览器的支持,很快在网上得到应用。
VRML2.0增加了对交互和动画的支持.得到了更大范围的支持和应用并于1997年l2月被正式批准为国际标准(ISO/IEC14772一I:1997,通常称为VRML97)。VRML2.0提供了丰富的节点实现对三维世界的描述,如空间的点、线、面和几何对象提供强大的造型能力;组合节点提供节点组合、重用和建立层次结构的复杂场景的能力;多样化的材料、光照以及贴图大大提高场景的真实感;传感器和内插节点提供基本的动画和交互功能;Script节点实现编程控制能力.PROTO节点提供用户自定义节点的扩充能力。
由于VRML的动画技术是基于关键帧的,单靠VRML能实现的动画和交互功能有限,复杂的动画和交互功能可通过和JAVA技术的结合来实现。JAVA技术由于其跨平台性和对网络编程的强大支持而得到广泛应用.JAVA就是因为JAVA—APPLET在网络上的流行而兴起的。JAVA和VRML这两种和网络密切相关的技术无疑是理想的结合,对它们的综合运用使我们开发的仿真系统同样具有了跨平台性、网络化和完全的可编程控制能力。目前VRML和JAVA广泛应用的有两种接口:SAI(Script Authoring Interface)和EAI(Ex—ternal Authoring Interface) 。SAI通过JAVA Script结合VRML中的脚本和路由节点来实现VRML场景中物体的运动:EAI则是通过JAVA APPLET直接和用户交互从而控制VRML场景中的各个节点。JAVA APPLET更能和HTML、数据库以及其它的媒体进行交互,进行网络控制,从而构成更复杂的系统 。可见EAI接口的功能更强,扩展性更好。
本文利用EAI技术来实现机器人运动的虚拟现实仿真。
2 机器人的三维虚拟环境建模和仿真
VRML的WRL文件格式是一种ASCII文件.通过一般的文件编辑器就能编写VRML场景。但是复杂的形体和大型的场景包含大量点、线、面,不可能单靠手工编写.因此必须要由CAD软件来辅助建模。现在大多数的CAD软件都支持VRML格式的输出.特别是3DMAX 等造型软件,能直接的输出VRML动画。在对机器人的建模中,我们选择了3DMAX作为建模的工具。但由于VRML模型是以面集(IndexedFac—eSet)形式表现形体的,并且在CAD软件的装配中经过了多次的平移、旋转等变换、因此不利于直接进行仿真控制,必须进行必要的词整后才能用于运动仿真。有了适合的VRML模型后我们就可以建立JAVA的EAI程序来实现对模型的控制。总的流程图如图1所示。
图1 虚拟现实仿真系统建构流程
本文仿真的对象是本学院FMS实验室的S700机器人.它属于关节型的工业机器人,由6个转动关节连杆组成,按文献[5]中所介绍的方法建立的连杆坐标系如图2,其D-H参数见表1。
图2 S700机器人连杆坐标系
表1 S700机器人D-H连杆参数
2.1 用3DMAX建立机器人三维模型
3DMAX是一个相当好的流行建模工具,通过对简单几何形体进行并、交、切等布尔运算就能构造出复杂的几何形体 3DMAX还提供如网格和NURBS曲面编辑等高级功能.能构造复杂的型面模型。我们分别建立各个连杆的模型,然后把它们装配起来,然后进行级联(Hiearcy)。这部分工作也可以在其它的CAD软件中进行,但3DMAX 的VRML输出比较好,模型建立后还是应该导人3DMAX进行转换输出 模型建立后也可以直接在3DMAX 里创建VRML动画。但是这样创造出来的动画正如前面所述,是基于关键帧的,其形位、轨迹等都只能是预先设定的.因此只能有简单的交互,选择某些指定的运动动作。因此我们不采用这种方式,而是在装配完成后就通过3DMAX的输出接口直接输出为WRL文件。
图3 调整前连杆2坐标轴 (几何建模时的坐标)
2.2 对VRML模型的修改
输出后的VRML模型文件基本的组织形式如下
DEF joint1 Transform {#连杆1 的节点
translation 24 68 0
rotation 0.5774—0.5774 0.5774-4.I89
children[
Shape 1..... 一} #连杆l的几何形体
DEF joint2 Transform {{}连杆2的节点
translation 3 0—36.29
rotation l 0 O O
children[
Shape}...... · #连杆2的几何形体
DEF joint3 Transform
可以看到,各个连杆已经以层次的形式组织起来,顶层连杆的活动将带动子层连}一起运动。当我们需改变连杆的关节变量d或0时,可通过改变translation、rotation的值来达到 。由于单个关节在建模的时候并非就是按装配后的形态建立模型,装配中形体必定经过平移、旋转等过程。反映到模型上,关节形体的坐标系都已经过平移、旋转,无法使模型绕关节的轴心转动,因此难直接利用CAD输出的模型 。
观察3DMAX的VRML动画输出就能发现这一点,3DMAX中做出的绕关节轴 C、的转动.其实是既有转动又有平移的,其转动轴当然也不是我们要求的轴心 必须把形体坐标原点调整到连杆的转动轴上.使转动轴与坐标轴重合。为此,须通过坐标转换,把表示连杆形体的点的坐标换算成以连杆转轴上的点为原点的坐标系中(图2、3)。凋整后各个关节在初始位置上的ROTATION字段弧度值应为0。
图4 VRML和JAVA的结合原理
2.3 编写仿真控制程序
有了正确的模型后,就可通过JAVA 程序实现对VRML模型的控制仿真了。VRML的EAI接口其实是VRML浏览器带的标准的JAVA对象库,里面包含了用于控制VRML场景的对象。其基本原理就是把VRML场景跟JAVA-APPLET嵌入同一个网页上,通过APPLET和用户交互,由APPLET取得VRML场景中的各个节点,控制这些节点的各个参数值来达到运动仿真的目的。我们在程序中定义一个连杆对象,它包含了对应的VRML 节点(Note)及为从节点中取得和设定参数所必须的两个事件对象EventOutSFRotation和EventInSFRotati0n,还有一个用于保存参数值的数组。
图5 调整后连杆2坐标轴(机器人连杆2的D-H坐标轴)
在机器人D-H坐标系中,转动关节的转一动轴是z轴,但由于VRML坐标系是相对固定的,连杆坐标系的z轴可能对应的是VRML节点坐标系的其它轴线,在图5中,转动轴对应的是VRML坐标系中的 轴。因此还须指出连杆坐标系的z轴所对应的VRML座标系的轴线,让节点绕该轴线旋转,才能得到正确的仿真效果。对其中一些关键的代码举例如下:
class Joint{ //关节对象
Node node: //VRML中对应的节点
EventOutSFRotation Rvalue=null; //获取ROTATION字段值的事件对象。
EventInSFRotation rotation=null; // 把值输出到VRML节点的事件对象
float[]value={1f,0f,0f,Of}; //保存关节变量值的变量,前三个数值表示转轴的方向矢量,最后一个是转过的弧度。
eosbrowser=Browser.getBrowser(this); //取得VRML场景
for(i=0;i<6;i++){
joints[i].node=(Node)cosbrowser.getNode( //取得各个连杆节点
getEventOut("rotation—changed"); // 始化可获取当前的关节变
joints[i].rotation=(EventInSFRotation)joints[i].node.getEventIn(”set— rotation”); //初始化修改关节变量值的事件
setRAxis(joints[il,i+1); //设定各关节的转动轴对应的VRML坐标轴,使关节能绕指定轴旋转。
part=joints[LSpart.getSelectedlndex()];
part.rotation.setValue(part.value); //把用户输入的参数值输出到VRML节点。
程序完成后把VRML文件和编译后的JAVA—APPLET文件嵌入到同一份HTML文件中,用浏览器浏览就能看到仿真的效果(图6)。在右边APPLET窗中直接输入关节的角度或编写位姿表,VRML浏览器中的虚拟机器人模型就能按规划的轨迹运动到指定的位姿。
图6 完成的仿真界面
FaminstanceValueGet(famtable instance+i,famt items+ value); //得到第i个实例/记录的第 个项/70的值
if(value! = PInfo一>value) //如果有一列不匹配
break; //~,U退出小循环
if( == famt— items_mum) //全部列相等,则找到匹配的实例
bFind = true; //赋值bFind为true
InstanceName = (famtable— instance+i)一>name; //获得该实例的名字
If(bFind)break; //如果找到匹配的实例,则退出大循环
AssembleInstance(InstanceName); //装配并显示该实例
3 结束语
使用VRML和JAVA在一般的微机上构造轻量级的仿真平台,已可应用于复杂的虚拟现实仿真。VRML和JAVA的跨平台性、网络化和强大的可编程能力.对于实现网络化机器人仿真是一种简单、廉价而有效的手段,值得进行进一步的研究。目前我们所开发的仿真系统已初步实现了机器人虚拟仿真的基本功能,进一步的深入研究正在进行当中。
[参考文献]
[1] 肖田元,韩向利.张林煊.虚拟制造内涵及其应用研究[J] 系统仿真学报,2001,13(1):118—123
[2] Rohrmeier M.Web based robot simulation using VRML[A].Proceedings of the 2000 Winter Simulation Conference[C],Orlando,America,2000,1525 —1528
[3] Moore K.Dykes J.wood J.Using Java to interact with geo—refer—enced VRML within a virtual field course[J].Computers&GeosciencesfC],1999.25:1125—1136
[4] 朱正强,吴介一,孔竞飞等.基于VRM[ 一JAVA的虚拟现实技术在可视化装配中的应用[J].东南大学学报,2002,32(1)
[5] 熊有伦,唐立新,丁汉等.机器人技术基础[M].武汉:华中理工大学出版社,1996
[6] 汪兴谦,牛燕明,邓谆谆.VRML与JAVA编程实例讲解[M].北京:中国水利水电出版社,2002