DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1156|回复: 0
打印 上一主题 下一主题

[待整理] 基于OpenGL的工业机器人三维仿真设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 23:32:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1引言
       
        随着机器人技术的运用与发展,机器人编程技术成为一个很重要的问题。机器人离线编程(OIP,OffLineProgram)具有不需要停止机器人工作和可以通过图形仿真来避免实际机器人运动中的碰撞等优点。目前国内基本没有针对机器人仿真的成型工具,国外有一些商品软件如RoboCAD,ROTSY,Evision等系统,但是RoboCAD价格比较昂贵,不能够普遍推广;ROTSY是基于Motoman机器人的一套仿真系统,但是他的普遍性不强而且价格也比较高。本文以江苏省“十五”攻关项目网络化焊接机器人研制课题为背景,设计了基于OpenGL的工业机器人三维仿真机离线软件RobotM,完成了对于Couma机器人的离线仿真程序开发。
       
        OpenGL是与图形硬件无关的程序设计接口,而且OpenGL的类库完成三维图形的底层操作,同时又具有建模方便、实时三维仿真、真实感强、平台独立性、真实性强、对于系统的要求并不是很高等优点。所以RobotM利用OpenGL和微软的VC+开发工具以及MFC类库作为底层的图形库接口实现仿真设计。离线仿真原理如图1所示。
         
       
        2系统结构详述
       
        系统模块图如图2所示。
         
       
        图2说明了RobotM采用了分层次结构设计的方法,将整体程序设计成为3层结构,每一层的设计都相对独立,从而提高了程序的可移植性并且减轻了程序的维护难度。
       
        2.1模型层设计
       
        模型层利用OpenGL和MFC类库,构建了一系列底层的类对象,RobotM利用这些封装好的类对象来构建场景以及完成场景和用户的交互。在RobotM设计中增加了空间实体、空间模型、机器人模型的概念。
       
        空间实体就是单个的最简单的部件,而空间模型是若干个实体按照一定方式的组合。由于机器人仿真具有一定的特殊性,把机器人设定为一个实体或者一个模型显然是不合适的,所以可以把机器人以每一个转轴为界限分割成若干部分,而把分割好的各个部分都作为空间模型,从而形成了若干空间实体一空间模型,若干空间模型一机器人模型的组合方式。
       
        利用这种分层次的组合方式可以很容易控制仿真程序的显示和交互,例如利用RobotM仿真一个汽车焊接生产线时,用一个空间模型对象来描述汽车对象可以很容易地控制这个汽车对象。RobotM对于每种空间实体类型都利用OpenGI提供的GlgenList/glCallList函数实现了一套构建/绘制的函数,利用空间实体一空间模型一机器人模型的组织方式和C++面向对象技术中的多态性,最终把机器人模型和空间模型的绘制工作都归结为空间实体对象的绘制。
       
        RobotM把仿真内容保存为流文件。文件是按照分层结构且以相对路径存储并设计的,即工作区、机器人模型、空间模型、路径等文件如图2所示,用户通过打开工作区文件从而搜索并获取其他类型文件的信息以建立场景对象。机器人、模型、路径文件都可以为其他的工程所用,具有比较良好的重用性;相对路径使得用户即使改变了工程目录存放的位置也不会影响文件的获取,增加了RobotM的健壮性。
       
        2.2场景层设计
       
        场景层主要功能是完成场景中对象的建立、保存、绘制以及交互。作为模型层和示教层的中间层,场景层是机器人仿真系统中的连接部分。场景层从文件建立的过程如图3所示。
         
       
        由图3可以看出场景的建立是一个从若干文件到仿真程序的空间实体对象的转换过程,RobotM把用户选取的工作区和其他一系列的文件转化为RobotM可以识别的数据结构对象;同样的,把RobotM中的数据结构对象根据一定规则写入文件完成了保存过程。场景的绘制是仿真程序的重要部分。场景层利用模型层的实体绘制的接口,通过场景一(机器人)一空间模型一空间实体的方式调用各自的绘制函数,RobotM需要在屏幕上显示动画来表示仿真结果,所以程序的绘制效率十分重要。
       
        除了运用普通的OpenGL绘制的各种增加效率的方式之外,本文为提高绘图效率,在RobotM中提出了“必要重构”的方法。即利用几个BOOI量做为场景的各个部分(包括机器人模型、空间模型等部分)的重构标志(重构是指利用OpenGL提供的glGenIist函数将需要绘制的内容保存在内存区域中,每次绘制时直接从中提取,而不需要再次组织)。RobotM在绘制的每一帧都只重构改变过位置或者旋转角度的对象(机器人模型和空间模型对象包括在内),而对于没有改变的对象则直接调用glCallList将对象绘制出来。这样每一帧的绘制效率有很大提高,在程序仿真的时候不会出现显示打顿的现象。
       
        基于OpenGL的工业机器人三雏仿真设计与实现场景的交互提供给用户比较便捷的操作功能。用户根据自己的需要可以修改观察和控制整个场景的方式(如旋转、平移、改变光照等),还可以直接用鼠标在场景中选取目标点或者空间实体。
       
        2.3示教层设计
       
        示教层主要是完成离线编程设计。上2层已经为示教层的设计打下了良好的基础。机器人离线编程的关键内容是能够根据用户的输入确定仿真程序中机器人的运动方式和机器人运动位置,这种关系与实际机器人和示教盒之间的关系相类似。RobotM通过保存各个位置点和各个点之间的运动方式来描述机器人运动的轨迹来实现仿真。
       
        RobotM有一个小型解释器,他能够实现机器人编程语言和RobotM能够识别的运动文件格式的相互转换。由于机器人编程实现的运动程序编译器有自己的语法和语义,所以RobotM必须能够实现控制柜运行的机器人控制文件和RobotM设计的程序相互转换。
       
        RobotM提供了2种确定机器人仿真运动末端点的方式:即转角运动和定点运动。转角运动如同实际机器人运动中的示教盒示教,能够通过用户输入在仿真程序中,使得指定的机器人各个关节部分运动,从而实现机器人的转角运动;而定点运动是RobotM中相对来说比较重要的同时也是转角运动无法做到的。利用场景层提供的接口,用glLoadName给场景中的每个需要确定位置的空间实体/空间模型/机器人模型创建惟一标示的ID,在用户鼠标选取空间中的点时利用ID来确定用户所选取的对象,在获取对象之后利用OpenGI的glUnProjeet函数获取鼠标点击位置在空间中的“世界”坐标系下的位置,完成鼠标平面坐标一空间坐标的转换,利用仿真机器人的运动方法使仿真机器人末端点运动到该空间坐标,从而确定机器人需要运动到的某个点的位置。
       
        通过若干步的上述2种过程的重复,完成这一系列点的设置,可以创建出路径文件。路径文件可以用来仿真也可以下传到机器人控制柜。
       
        2.4辅助模块设计
       
        机器人仿真程序还有其他一些独立模块并没有归结到上述3层结构中。但是这些模块和上述3层之间有着紧密联系。
       
        2.4.1算法模块
       
        考虑到机器人仿真程序需要对路径进行仿真,所以必须提供相应的机器人的正逆解算法以及关节插补、直线插补、圆弧插补等算法。由于对于不同的机器人有不同的正逆解,所以在仿真系统中,实现一个通用的上述算法比较困难,所以尝试用文件来描述机器人的各项参数,取得了比较好的效果。
       
        2.4.2其他模型模块
       
        仿真程序提供了不同的构建模型的方式,分别为Mdl,3DS,Obj文件格式。也就是说提供了不同的文件接口,通过这些文件接口可以在场景中实现不同的构建模型方式。
       
        2.4.3通信模块
       
        把机器人仿真程序产生的文件下传到控制柜或者读取控制柜中的文件,利用RS232/BSC实现了文件的上下传。
       
        RobotM系统实现如图4所示,首先构建了SIASUN机器人模型。
         
         
         
        3结语
       
        本文介绍了作者开发的机器人离线编程系统RobotM,描述了系统的主要功能及其原理。而今后的主要工作是添加路径规划和碰撞检测模块的设计。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-25 00:35 , 耗时 0.086503 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表