摘 要:布局问题是一个NP问题,采用纯数学方法难以求解。本文在一般优化方法的基础上,采用计算机图形学技术和C++Builer6.0开发工具,开发了一个布局三维仿真系统,为人机交互的布局设计提供了有效途径。
关键词:布局 三维仿真 虚拟现实 OpenGL
一、引言
布局就是如何在一个有限的空间内按一定要求摆放多个具有一定几何形状的物体。布局问题在很多方面都存在应用,如生活小区内建筑物的布局、城市里供排水管管道的布局、港口设备建筑的布局、航天器仓的布局、工厂厂房和车间内机器设备的布局等。
在工业生产领域,布局问题显得尤为突出。在制造企业中,多台生产单元就构成了一个生产制造系统,如何确定制造单元的相互关系和摆放位置,即车间布局问题是一个首先要解决的问题。一个好的车间布局不仅可以提高物流效率、降低物料搬运成本,而且可以通过改善人机环境而大幅提高生产效率。试验表明,在一个多生产单元的生产制造系统中,过优化的车间布局与物料搬运设计则可降低企业总生产成本的10%~30%。
本文基于敏捷制造和虚拟制造的理念,研究用于柔性生产的布局三维仿真系统,通过一定的算法和虚拟仿真,使布局者能参与布局过程并将布局结果逼真地呈现在管理和技术人员面前,为车间布局提供参考。
二、布局三维仿真的研究
系统仿真是近30年在系统科学、控制理论、计算技术等多种技术基础上发展起来的一门综合性很强的新兴技术。计算机系统仿真就是以计算机为工具,以相似原理、仿真技术、系统技术及其应用领域有关的专业技术为基础,利用系统模型对实际或设想的系统进行试验研究的一门综合性技术[1]。
由于车间布局问题属于NP问题,且布局过程中的许多要求是一种主观的判断和模糊的要求,如布局美观、安全等,直接采用计算机算法求解布局方案具有很大难度,因此采用虚拟现实的仿真系统来实现布局者的亲身参与布局过程,以达到人机接合的目的。
1.OpenGL技术
对计算机可视化及仿真技术的研究已经历了一个很长的历程,而且形成了许多可视化工具;其中SGI公司推出的OpenGL三维图形库表现突出,易于使用而且功能强大。利用OpenGL开发出来的三维应用软件颇受许多专业技术人员的喜爱,这些三维应用软件已涉及建筑、医学、产品设计、地球科学等领域。OpenGL被认为是高性能图形和交互式视景处理的标准,目前包括ATT公司UNIX软件实验室、IBM等大公司都采用了OpenGL图形标准。
OpenGL提供直观的三维图形开发环境,实际上是一种图形与硬件的接口,包括120个图形函数。开发者可以用这些函数来建立三维模型和进行三维实时交互。OpenGL强有力的图形函数不要求开发者把三维物体模型数据写成固定数据格式,这样开发者可以利用其他不同格式的数据源并获得许多软件的支持。这样就极大地提高了三维图形软件开发的效率。2.三维建模技术
OpenGL提供了120个图形函数用于绘制各种点、直线和多边形等基本图元。如果直接利用OpenGL的绘图指令建立三维实体模型是非常繁杂的一个过程,在本文研究中采用3DS Max软件来建立机床的模型;通过3DS Max软件强大的画基本几何体,三维方向的分段调整,三维实体的布尔运算,NURBS曲线调整及壳变换等功能,可以方便的建立出较为逼真的三维机床模型;导出为.3ds格式的文件。然后使用Deep Exploration这个软件,可以直接将.3ds格式的文件转换为OpenGL显示列表格式的文件;这种建模转换方式的效率很高。
3.各种优化技术
OpenGL中的优化技术包括双缓冲技术、反走样技术、背面消隐、多重纹理影射等。双缓冲技术是指OpenGL支持显示缓冲和非显示缓冲,缺省的情况是所有的OpenGL绘制命令在非显示缓冲中绘制,绘制完成后再将其内容拷贝到显示缓冲区中;双缓冲使图象转换更平滑,屏幕无闪烁。反走样技术就是OpenGL中利用混合技术,消除由于以离散点生成图形和曲线所带来的锯齿现象,提高了画面质量。
三、系统开发
本研究开发的系统是一个布局三维仿真系统,开发过程中要考虑到车间布局的各种相关因素,对布局流程进行分析、构思、规划和设计,通过对车间设备的布局来满足优化目标,使得车间物流效率得到优化。
C++ Builder程序设计语言是一种可视化编程语言,它是集开发、编译、发布为一体的集成开发环境,基础语言为面向对象的C++语言,并提供了强大的RAD(Rapid Application Development,快速应用程序开发)功能,使得开发者可以节约大量设计界面和实现程序底层支持功能的时间,将精力主要用于程序核心逻辑的设计上。
本软件充分利用C++ Builder程序面向对象易于开发的优点,实现了车间设备布局的计算机辅助设计,对于提高车间设备布局设计的效率、缩短设计周期和提高布局设计质量均具有社会价值和经济价值。
1.C++Builer 下的OpenGL编程框架
由于C++ Builder对Windows的消息机制进行了一定程度上的封装,在C++ Builder下进行OpenGL编程与其他C++环境下有较大区别;在C++ Builder中采用OpenGL编程的基本框架如下所述,用于本研究中车间布局仿真程序的开发[3]。
(1)在头文件中增加变量、函数声明和包含OpenGL头文件的语句;
(2)在窗体OnCreate()事件过程中初始化OpenGL;
(3)在窗体OnPaint()事件过程中绘制图形,调用自己编写的绘图函数;
(4)在窗体OnSize()事件过程中控制图形的显示视口;
(5)在窗体OnClose()事件中释放OpenGL设备句柄。
2.布局过程的可视化