我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>行业知识

基于OpenGL的六自由度机械臂三维仿真工具的设计

文章来源:第三维度 作者: 发布时间:2012年02月15日 点击数: 字号:

    来源:第三维度
    作者:孙亮 马江 阮晓刚
    单位:北京工业大学 电子控制工程学院 人工智能与机器人研究所

     引言

  机器人的仿真研究已经成为机器人学中一个引人瞩目的领域,而机械臂三维运动仿真是机器人仿真研究中一个很重要的组成部分。机械臂仿真有各种方式,比如可以用MATLAB,ADAMS等这些平台进行运动仿真,都能达到一定的效果。文献[1]在MATLAB平台下开发了ROBOTICS工具箱,能够通过函数实现简单的运动学仿真。文献[2]基千ADAMS软件对机械臂进行运动学仿真。文献[3]基于OpenGL图形库开发了一套机械臂仿真系统,实现了机械臂的正、逆运动学仿真。文献[4]利用文献[3]的方法,且通过定时器,不断刷新视图,达到了动画的效果。文献[1]和文献[2]都是基于MATLAB开发平台的,想在机械臂仿真平台上扩展些新功能不如在VC平台上方便,而且显示效果也不是很好,文献[3]和文献[4]只是针对正逆运动学设计,并没有阐述具体轨迹规划算法的实现。综合上文文献工作中的优缺点,本文采用在VC什6.0开发平台上,基于MFC框架类和OpenGL的函数库来开发仿真软件。

  1、Windows对OpenGL的支持

  OpenGL是在SGI等多家著名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。它是一种与硬件、窗口系统和操作系统相独立的一系列API。当前,Microsoft公司开发的面向对象的可视化软件开发工具VisualC++6.0中已经集成OPenGL图形标准,在加上OpenGL具有编程建模、容易实现高度清晰感的实时三维仿真等优点,逐渐被广泛应用于机器臂的设计和运动仿真中。

  Windows是用GDI绘图的,在Window下GDI二维绘图是在设备描述表(Device Contexts简写DC)中进行的。在所有的Windows图形程序中都需要申请一个DC,并在DC中完成各种绘图操作。而OpenGL是用绘制描述表(Rendering Contexts简写RC)绘图的,而且使用特殊的像素格式。Windows下的窗口和设备描述表支持“位图格式”属性,和RC有着位图结构上的一致。只要在创建RC时与一个DC建立联系,OpenGL的函数就可以通过RC对应的DC画到相应的显示设备上。为了有效地完成基于Windows的应用程序开发,可以利用微软提供的基础类库MFC,它是一套面向对象的函数库,以类的方式提供给用户使用。

  2、仿真软件的设计

  2.1仿真软件框架的设计

  为了能够实时地观察到六自由度链式(6R)机械臂的运动过程,把软件分为控制而板和图像显示两部分。上面边用干控制和输出,下面用于显示图像。

  实现步骤包括:(1)利用MFC AppWizrd建立一个单文档应用程序。(2)用CspliterWnd类把窗口分成两部分。在资源管理器中插人控制面板对话框,建立一个基于CFormView类的CFommandView类,在CMainFrame类的定义中声明一个CSpItterWnd类的对象m-wndSplitter,完成CMainFrame类的OnCreateClient事件处理程序,从而生成控制面板类CFormCommandView和视窗类CarmView。(3)在控制面板类CFormCommandView里的每个控件编写事件处理函数,包括按钮、静态编辑框和滚动条等,完成与视窗类的数据交换。下面是分窗口的核心代码:

基于OpenGL的六自由度机械臂三维仿真工具的设计

  2.2仿真实体的绘制

  对于结构简单而控制要求较复杂的机械臂,可直接使用OpenGL提供的三维建模函数完成绘制。对6R机械臂各轴的位置,角度、比例的调整,可以使用函数glTranslatef(),glRotatef(),glScalef()来完成,为使绘制出来的各轴形象逼真,可对各轴进行相应的材质、光照设置。旋转关节绘制时将旋转值设为一个变量,改变其值,可以改变机械臂的位姿。为使仿真显示的图形变化连续,使用OpenGL提供的缓存交换函数auxSwapBuffers()来实现双缓存绘制。6R机械臂的建模效果如图1所示。

基于OpenGL的六自由度机械臂三维仿真工具的设计

  实现步骤包括:(1)在CAnnView类中添加WM_ CREATE消息,然后编写OnCreate事件处理程序来设置像素格式并创建OpenGL绘制描述表。(2)在类CArmView的成员函数OnDraw中,添加6R机械臂绘制程序。包括机械臂的建模,材质、光源位置、背景色、视角程序等。(3)在CArmView类中添加键盘WM_KEYDOWN消息,然后编写OnKeyDown事件处理程序,通过键盘来控制视角、比例等设置。(4)在 CArmView类中添加定时器WMJIMER消息,然后编写OnTimer事件处理程序。使用SetTimer()函数设置定时器的序号和记时周期.一个周期执行OnTimer()函数一次,各关节变量的变化实时反馈到视窗中,视窗通过函数Invalidate(FALSE)不断重绘,为了避免显示动画时闪动,采用双缓存技术,通过SwapBuffers()函数来实现。下面是设置像素格式的核心代码:

基于OpenGL的六自由度机械臂三维仿真工具的设计

基于OpenGL的六自由度机械臂三维仿真工具的设计

    2.3 运动学算法的实现

  6R机器臂是具有6个关节的空间机构,为描述末端执行器在空间的位置和姿态,可以在每个关节上建立一个坐标系,利用坐标系之间的关系来描述末端执行器的位置。其结构如图2所示。

基于OpenGL的六自由度机械臂三维仿真工具的设计

   运动学分析包括正运动学、逆运动学以及运动规划三大部分。

  (1)正运动学的求解过程是根据已知关节变量·1, ·2 , ·3. ·4,·5. ·6求末端抓持器相对于参考坐标系的位姿的过程。将参考坐标系设在6R机械臂的基座上,从基座开始变换到第一关节,然后到第二关节……,最后到未端抓持器。那么6R机器臂的基座和末端抓持器之问的总变换为7个齐次变换矩阵相乘,软件中通过成员函数CArmView::GetArmPos()来实现。

  下面是正运动学的核心代码:

基于OpenGL的六自由度机械臂三维仿真工具的设计

基于OpenGL的六自由度机械臂三维仿真工具的设计

  (2)逆运动学的求解过程是根据已知的末端抓持器相对于参考坐标系的位姿,求关节变量·1, ·2 , ·3. ·4,·5. ·6的过程,在相同的位姿下可能存在2*2*2种关节转角组合,这里选择功率最省的标准来确定唯一组合。软件中通过“go”按钮的事件处理函数CFormCommandView::OnButton2()来实现算法。

  下面是逆运动学的核心代码:

基于OpenGL的六自由度机械臂三维仿真工具的设计

  然后是求逆解算法,由于篇幅限制在这省略。

  (3)运动规划包括路径规划和轨迹规划。路径与时间无关,表示机械臂空间位姿的连续序列。轨迹是机械臂位姿关于时间的函数。路径规划目标是在两个作业点之间生成一条无碰撞路径。轨迹规划是给出一条无冲突路径,求出沿这条路径(使指定的性能指标达到最小)机械臂位置和姿势的时间经历。轨迹规划既可以在关节空间也可以在直角空间中进行。在CArmView类中添加4个定时器WM_ TIMER消息,然后编写各个OnTimer事件处理程序,程序中包括在关节空间用三次多项式和五次多项式时间函数规划轨迹算法,以及在直角坐标空间用直线插补和圆弧插补路径点算法。可以通过选择控制面板中的复选框,来实现不同的轨迹规划方法。图3表示在直角坐标空间中用直线插补,在关节空间用五次多项式时间函数来规划轨迹。

基于OpenGL的六自由度机械臂三维仿真工具的设计

   由于篇幅限制只给出三次多项式时间函数算法的核心代码:

基于OpenGL的六自由度机械臂三维仿真工具的设计

基于OpenGL的六自由度机械臂三维仿真工具的设计

基于OpenGL的六自由度机械臂三维仿真工具的设计

基于OpenGL的六自由度机械臂三维仿真工具的设计

     3、仿真软件的功能

  六自由度机械臂三维仿真界面如图4所示。上面为控制面板部分,下面为图像显示部分。控制面板从左到右分别为正运动学仿真、逆运动学仿真、抓小球仿真模块。

  3.1正运动学仿真模块

  如图5所示,当在关节角对应的静态编辑框中输入角度值或者单击滚动条时,末端抓持器的位姿所对应的静态编辑框里面的数值随之变化,三维6R机械臂视图也随之运动。末端抓持器的姿态是用通过RPY(滚动角、俯仰角和偏航角)旋转给出的。

基于OpenGL的六自由度机械臂三维仿真工具的设计

  3.2 逆运动学仿真模块

  如图5所示,当在末端抓持器的位姿所对应的静态编辑框里面输人位置和姿态数值时,然后单击按钮“go",关节角对应的静态编辑框里面的数值随之变化,三维6R机械臂视图也随之运动。

  3.3 抓小球仿真模块

基于OpenGL的六自由度机械臂三维仿真工具的设计

基于OpenGL的六自由度机械臂三维仿真工具的设计

  如图6在小球位置对应的静态编辑框里面输人位置坐标,然后单击“设定”按钮,小球便在输人的位置处显示出来,如图7所示,小球位置代表目标点,末端抓持器代表起始点,其姿态在逆运动学仿真模块中给出,然后选择复选框五次多项式和圆弧插补。单击“go”按钮,6R机械便按照给定步长的圆弧插补的方式,在每个路径点采用五次多项式插值时间函数抓取小球。

  4、结论

  本文首先对机械臂仿真的几种方法进行了比较,对比之后阐述了OpenGL在三维仿真中的优势,以及Windows对OpenGL的支持。然后从软件框架的设计、仿真实体的绘制以及运动学算法的实现3个部分较为详细地介绍了6R机械臂三维运动仿真软件的设计。最后从正运动学仿真、逆运动学仿真以及抓小球仿真3个模块介绍了软件的实现。仿真软件有效地验证了机械臂数学模型以及正、逆运动学解分析的正确性,并且对4种轨迹规划方式的效果做了直观的比较。结果表明开发出来的仿真软件对机械臂研究与教学起了很大的作用。

  参考文献:

  [1] Corke PI.A robotics toolbox for MA11,AB.[J].IEEE Robotics and Automation Magazine,1996,3(1 ):24-32.

  [2] 曹春芳,孔庆忠,基于ADAMS的五自由度机械手运动学仿真[J].机械,2007,12(34):71-73

  [3] Kim S H, Kim Y H.Realization of a Virtual Simulator System on Window 981NT [J].Industrial Electronic,2001,1:216-220.

  [4]严勇杰,朱齐丹,蒋玉基于OpenGL的机械臂控制系统仿真平台研究P].计算机仿真,2006, 08(23):252-257.

  [5] 邓启文,韦庆,杨乐平.机械储绝对定位精度测[J].计算机测量与控制,2007,15.(3):305-307.

  [6]乔林,费广正.OpenGL程序设计[M].北京:清华大学出版社,2000.

  [7] Niku SB.机器人学导论—分析、系统及应用[M].孙福春,朱纪洪,刘国栋,等,译.北京:电子工业出版社,2004

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料