0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用OpenGL图形系统建立六自由度机器手的三维模型

电子设计 作者:电子设计 2018-10-02 01:15 次阅读

机器手三维建模仿真机器人各项仿真中的一个重要组成部分,对于机器手的运动轨迹仿真有重要的指导意义。LabWindows/ CVI(以下简称CVI) 是美国NI 公司推出的交互式C 语言开发平台。其集成化开发环境、交互式编程方法、函数面板和丰富的库函数大大增强了语言的功能,为熟悉C 语言的开发人员提供了一个理想的软件开发平台。由于在CVI 中已经集成了OpenGL 图形标准,并且OpenGL编程类似于C 编程,实际接口就是C,相对基于Visual C++基础类库MFC 和OpenGL 开发的三维仿真平台,在CVI 中利用可视化技术,开发基于OpenGL 的三维图形更方便快捷,同时可在此三维模型平台上方便地进行轨迹规划和控制算法等方面的仿真研究。

1 OpenGL的简介和基本操作过程

1.1 OpenGL简介

OpenGL图形系统是图形硬件的一种软件接口。OpenGL是SGI公司开发的开放式三维图形标准,它实质上就是一个三维图形和模型库,具有高度的可移植性,可以在多种操作系统平台上运行,例如各种版本的Windows、Unix/ Linux 和Mac OS等,具有非常快的渲染速度。它可以对计算机图形技术进行控制,产生逼真的图像或者虚构出现实世界没有的图像,是高性能图形和交互式场景处理的工业标准[2]。OpenGL 是一种高性能的开放式图形库,它的图形API以函数形式提供了115个核心库函数、43个实用库函数GLU、31个编程辅助库函数GLAUX以及若干个X-Windows/MS-Windows专用库函数GLX/WGL。OpenGL提供了多种三维图形的绘制方法,包括线框绘制方式、深度优先方式、反走样方式、平面明暗处理方式、光滑明暗处理方式、阴影和纹理方式、运动模糊方式、大气环境效果、深度域效果[3]。OpenGL的这些功能可以实现逼真的三维绘制效果,创建交互性三维场景和视景动画。

1.2 OpenGL的基本操作过程

OpenGL对三维图形操作可以归纳为:场景描述、设置光照、观察场景、光栅化,这个过程与人们观察世界的过程是一致的,其具体操作步骤如下:

(1) 根据基本图形建立景物模型,并对所建立的模型进行数学描述;

(2)把景物模型放在三维空间中合适的位置,并设置视点(Viewpoint),以观察场景;

(3) 计算模型中所有物体的色彩,同时确定光照条件、纹理映射方式等;

(4) 把景物模型的数学描述及其色彩信息转化至屏幕上的像素,即光栅化(RasterizATIon)。在这些步骤的执行过程中,OpenGL 还可能执行其他操作,如图1所示。

程序从图1的左侧进入,经过一系列的运算处理,将几何顶点数据和图像像素数据加工后生成待显示的帧。另外,景物光栅化之后被送入帧缓存前,还可以根据需要对像素进行操作。

2 在LabWindows/CVI中配置OpenGL

在CVI开发环境中使用OpenGL开发三维仿真图形的关键是如何配置CVI和OpenGL的图形接口。

2.1 添加与OpenGL相关的头文件和库文件

在CVI下创建一个新的工程文件:OGLHand.prj,在OGLHand.c文件首部添加4个头文件:

#include

#include//基本库

#include//实用库

#include//辅助库

在CVI编辑器的主菜单“edit”中选取“Add Files to Project”下的“Library”,在弹出的对话框里选取CVIsdklib中的3个库文件:glu32.lib、glaux.lib和opengl32.lib并添加到当前工程中。

2.2 设置CVI与OpenGL图形接口

虽然OpenGL已经内嵌在CVI中,但是要让CVI控件显示OpenGL图形,必须把CVI的picture控件转换成OpenGL控件。需要在工程中添加函数cviogl.fp,其路径为:CVItoolslibcustctrl。并在OGLHand.c文件首部添加:#include'cviogl.h'。

在主函数main()里调用函数将CVI的picture控件转换成OpenGL控件并返回控件句柄OGLCtrl,再调用InitControl()函数初始化OpenGL属性,最后调用int OGLRefreshGraph(int Panel_Handle,int OGL_Control_Id)函数及时更新OpenGL控件图形的场景和图形属性。

3 基于LabWindows/CVI和OpenGL的机器手三维建模

3.1建立OpenGL光照、视图及透视模式

视图决定模型在场景中的位置,同时要选择一个有利的观察点来观察场景。通过定义光照、视图及透视模式就能在二维屏幕上显示出立体的三维图形,这些都放在InitControl()函数中定义,包括初始化系统光照和初始化视图位置。

// 初始化系统光照

OGLSetCtrlAttribute(hPanel,this->hControl,

OGLATTR_LIGHTING_ENABLE, 1);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_LIGHT_SELECT, 1);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_LIGHT_ENABLE, 1);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_LIGHT_DISTANCE, 2.0);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_LIGHT_LATITUDE, 30.0);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_LIGHT_LONGITUDE, 150.0);

// 初始化系统视图位置

OGLSetCtrlAttribute(hPanel,this->hControl,

GLATTR_PROJECTION_TYPE,OGLVAL_PERSPE CTIVE);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_VIEW_DIRECTION,OGLVAL_ USER_DEFINED);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_VIEW_CENTERX, 0.0);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_VIEW_CENTERY, 0.0);

OGLSetCtrlAttribute(hPanel, this->hControl,

OGLATTR_VIEW_CENTERZ, 1.0);

3.2 建立渲染描述表

渲染图像就是计算机根据模型创建图像的过程,即三维图形的显示过程。要把一个物体的三维坐标变换为屏幕上的像素坐标,最终使图形在屏幕上显示。

OpenGL坐标变换包括:几何变换、投影变换、剪取变换和视区变换,三维图形的显示流程如图2所示。

视区变换矩阵:GLViewport(x,y,width,height);其中,参数x,y是视区在屏幕窗口坐标系中的左上角坐标,width和height分别为视区的高度和宽度。注意变换只对其后的一系列操作产生影响,如在此之前屏幕上已有图形,则变换对其不产生影响。变换后如交换缓存,则可形成动画,否则只在平面上作图。

3.3 建立六自由度机器手模型

OpenGL提供对二维和三维图形的基本操作,但是并不提供描述复杂几何物体及建立复杂物体模型的手段,因而必须寻找自身的三维建模方法。对不太复杂的模型直接利用OpenGL的基本三维图元(点、线、面)来构造,既方便又快捷,易于对模型进行操作和控制,缺点是建模的灵活度不大,不过对于建造本系统的三维模型已足够[4]。

对实物进行一定简化后建立的模型是由一些圆柱体、长方体和球体组合而成。采用顺序描述各个子体的方法来建立六自由度机器手模型。gluCylinder()用来绘制一个中空的二次柱面作为底座。gluDisk()用来绘制一个垂直于Z轴的圆盘。gluSphere()用来绘制一个球体作为关节。glRotatef()表示把当前矩阵与一个表示旋转的物体的矩阵相乘,以逆时针的方向绕着从原点到目标点的直线旋转。参数Rotation指定了旋转的度数。glTranslatef()把当前矩阵与一个表示移动物体的矩阵相乘,这个移动矩阵由函数的参数指定,经过平移的矩阵成为当前的变换矩阵。由于在OpenGL里描述下一个物体都是在前一个物体的基础上,因此每次都需要对新坐标中心进行定位。例如当创建好机器人手臂的第一段后,为了创建手臂的第二段,需要使用函数glTranslate()把局部坐标系统移动到下一个节点。

模型的构建过程采用分层结构,即在相应的关节坐标系中构建各个模块,这样可以实现独立控制,使其能够绕着各自的坐标轴旋转。两只机器手的三维图形如图3所示。

3.4 机器手可视化仿真

机器人仿真的研究已经成为机器人学中一个引人瞩目的领域,对于验证机器人工作原理、工作空间及进行运动学研究等都具有非常重要的指导意义。而机器手作为机器人不可缺少的部分,对其进行三维可视化仿真可以使研究者对机器人运动方式有一个感性的认识,可以帮助研究人员对机器人身体各个部分的位置关系建立正确的方程,可用于检验轨迹规划和作业规则的正确性和合理性,可为离线编程技术的研究提供一种有效的验证手段。显然,采用可视化仿真技术的好处在于:

(1)从上位机的图形上就可以看到机器手的运动情况,增加了视觉效果;

(2)对于机器手在危险环境或者远距离工作,而人又无法到达现场时,采用此项技术的意义是明显的,它可以保证人在上位机系统进行实时监控机器手的工作状况,以便发出新的控制指令。

3.4.1实现控制机器手仿真界面

在仿真界面上设置了机器手的观察者位置、肩关节、肘关节位置变换旋钮,以及机器手爪子的分合选项,左右手控制选项,镜头距离拉近,退出选项。如图4所示。

3.4.2 实现机器手的动画

为了实现平滑的动画效果,OpenGL采用双缓存技术,双缓存是指位平面被分为前台缓存(显示缓存)和后台缓存(内存缓存)。后台缓存计算场景、生成动画,前台缓存显示后台缓存已经画好的画面。所以只有前台缓存才被显示。

因此当完整的画面在后台缓存中画出以后,就调用SwapBuffers()函数,使其成为为前台可见。这样循环往复,隐藏了画图的过程,视频图像可以在人眼觉察不到的时间间隔交替出现,于是看起来所有的画面都是连续的。所以通过仿真界面可以控制机器手的运动轨迹。

利用CVI 和OpenGL的接口以及OpenGL 在三维图形中的卓越表现,建立了机器手的模型,设计了基于LabWindows/CVI 和OpenGL 的六自由度机器手三维仿真系统,能够直观、正确、快捷地模拟现实机器手的运动情况。作为进一步的研究,在此基础上,可以进行机器手视觉的仿真研究。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    4082

    浏览量

    133599
  • WINDOWS
    +关注

    关注

    3

    文章

    3545

    浏览量

    88688
  • 机器
    +关注

    关注

    0

    文章

    782

    浏览量

    40727
收藏 人收藏

    评论

    相关推荐

    基于FPGA EtherCAT的自由度机器人视觉伺服控制设计

    和增强系统处理图像的实时性,本文提出了一种伊瑟特的自由度机器人视觉伺服控制系统,将摄像头集成到基于 Zynq的伊瑟特主站上,提高了视觉伺服
    发表于 05-29 16:17

    基于OpenGL 的汽车转向三维模型设计

    基于OpenGL 的汽车转向三维模型设计摘 要: 汽车转向过程轨迹的计算比较复杂,需要使用汽车动力学诸多公式进行复杂的数学建模。汽车3D 虚拟系统实时性要求较高,因此对汽车转向
    发表于 05-17 11:53

    基于OpenGL的3DS图形文件中模型数据的获取

    ,然后在OpenGL绘图环境中读入构造出的模型,再利用OpenGL的交互控制优势达到理想的三维效果。因此,了解3DS文件结构,熟悉3DS文件
    发表于 03-07 11:53

    基于STM32、以太网、Labview的自由度Stewart并联运动平台模型

    自由度Stewart并联运动平台模型-X,Y,Z平移、旋转测试自由度Stewart并联运动平台-Z向旋转正弦波复现
    发表于 04-16 23:25

    怎么用LabVIEW定义一个导弹的自由度弹道仿真界面

    怎么用LabVIEW自定义一个导弹(飞行器)的自由度弹道仿真界面,使其能够和simulink进行联合仿真,并且能够在界面中显示导弹打击目标的三维运动曲线,有没有做过的或者这方面比较牛的人给一些指点,我是新手,LabVIEW不太
    发表于 12-20 21:40

    基于Matlab的开源自由度协作机器人实验平台

    一前言针对机器人相关专业的教学需求,商飞信息科技开发出此开源自由度协作机器人实验平台。该平台有以下几大特色机器人本体采用自主设计的3Kg负
    发表于 09-07 07:10

    基于OpenGL 的汽车转向三维模型设计

    基于OpenGL 的汽车转向三维模型设计: 摘 要: 汽车转向过程轨迹的计算比较复杂,需要使用汽车动力学诸多公式进行复杂的数学建模。汽车3D 虚拟系统实时性要求较高,因此对
    发表于 05-16 15:44 29次下载

    基于MFC和OpenGL三维图形的开发

    本文介绍了OpenGL 的基本概念,通过对三维动态球体模型的具体分析,详细讨论了如何利用OpenGL 函数库在MFC 中实现
    发表于 09-07 10:11 47次下载

    三自由度气动机械的PLC控制

    三自由度气动机械的PLC控制 一、实验目的:通过对一个三自由度气动机械的控制程序的设计,熟悉基于PLC的
    发表于 09-23 08:19 3672次阅读

    超声波在自由度测量定位系统中的应用

    系统三维坐标采用3点7次测量法获得数据,用单片机对数据进行实时处理,实验结果表明,该系统精度能满足实际需要,宜于进行手工操作,并易移植到其它需要
    发表于 12-16 14:43 45次下载
    超声波在<b class='flag-5'>六</b><b class='flag-5'>自由度</b>测量定位<b class='flag-5'>系统</b>中的应用

    基于OpenGL与3DS Max的三维场景建模

    通过降低OpenGL建立复杂三维模型的难度,减少建模的工作量。通过利用专业建模软件3DS Max的优点,较快地
    发表于 01-10 17:21 47次下载

    基于OpenGL三维模型显示研究与实现边栓成

    基于OpenGL三维模型显示研究与实现_边栓成
    发表于 03-17 08:00 1次下载

    使用SimMechanics实现自由度的机械臂仿真研究

    ,仿真功能强大,可以在模型中通过改变结构,优化系统参数,在仿真环境中分析结果。利用 SimMechanics 的上述优点,以工业自由度机械
    发表于 11-12 08:00 1次下载
    使用SimMechanics实现<b class='flag-5'>六</b><b class='flag-5'>自由度</b>的机械臂仿真研究

    自由度视觉定位

    基于三维模型的视觉定位通过在查询图像和三维模型建立 2D-3D 对应关系,估计相机
    的头像 发表于 04-20 10:07 1153次阅读

    基于Simulink的汽车2自由度模型

    本期采用Simulink建立汽车2自由度动力学模型。为了便于掌握汽车稳定性的基本特性,对汽车简化为线性二自由度的汽车模型,忽略转向
    发表于 06-28 16:39 2554次阅读
    基于Simulink的汽车2<b class='flag-5'>自由度</b><b class='flag-5'>模型</b>