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

2009-9-25 作者: 孙亮 马江 阮晓刚 来源: 万方数据

关键字: 机械臂 MFC OpenGI 运动仿真 运动学分析 

针对六自由度链式机械臂,为了解决运动学分析结果不易验证以及在实际本体上试验成本较高的问题,开发了一套六自由度机械臂不维仿真软件.该仿真软件是在vc+斗6.0开发平台上.基于MFC框架类和OpenGL的图形库进行开发的.仿真软件有效地验证r机械臂数学模型以及正、逆运动学求解工程的正确性,并且对4种轨迹规划方式的效果做了直观的比较.结果表明开发出来的仿真软件对机械竹的研究与教学起了相应的作用。

  引言

  机器人的仿真研究已经成为机器人学中一个引人瞩目的领域,而机械臂三维运动仿真是机器人仿真研究中一个很重要的组成部分。机械臂仿真有各种方式,比如可以用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里的每个控件编写事件处理函数,包括按钮、静态编辑框和滚动条等,完成与视窗类的数据交换。下面是分窗口的核心代码:

  2.2仿真实体的绘制

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

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





<<首页 <上一页  1  2  3  下一页>  末页>>  
责任编辑:熊东旭