常裕文档网    > 范文大全 > 公文范文 >

基于OSG的作业仿真设计

时间:2022-06-06 13:56:01  浏览次数:

【摘要】随着我国各项经济的发展,人们对主要用于工程建设的——挖掘机的自动化程度、安全性要求越来越高,传统的工作模式已经无法适应。如用于垃圾清理场地、酿酒厂的挖掘机,由于其工作环境的特殊性,仅仅依靠摄像头作为操作人员的操作依据已经远远不够了,此时就需要一种不需要摄像头,又可以为操作人员提供操作依据的仿真技术。本文以VS2008为开发平台,结合OpenSceneGraph(以下简称OSG)技术实现挖掘机的作业过程仿真功能。本文以液式挖掘机为研究对象,构造了详细的挖掘机三维模型,采用一定的方法完成场景组织工作,接下来利用更新、回调技术完成挖掘机作业的仿真。

【关键词】OSG;作业仿真;更新回调

1.挖掘机作业仿真系统体系框架

挖掘机作业仿真系统的构建可以分以下几步完成:

(1)对挖掘机作业环境进行建模,其中主要包括挖掘机、物料及其周围环境等对象的建模。在建模过程中要根据对象类型的特性,选择不同的方法进行分别建模,然后再利用编写的加载模型的函数将其导入到虚拟场景中,最后再根据系统预设的每个模型的位置完成真个虚拟场景组织构建。

(2)获取挖掘机作业情况的运行参数,根据这些实际运动参数,实时绘制场景图形,实现对挖掘机作业过程的仿真。现场挖掘机作业情况的运行参数,如回转支撑、铲斗以及履带等的位置、运行速度、方向等,可以通过软硬件系统的交互接口获取。

(3)通过以上两步就可以实现对挖掘机作业过程的仿真,若要进一步提高虚拟场景的渲染速度,就需要对场景内的不同模型进行合理的组织和管理。另外为了增强虚拟场景的逼真程度,还需要采用碰撞检测等技术来达到此效果。

根据以上分析,绘制了作业仿真设计的体系框架,如图1所示。

图1 系统框架架构图

2.挖掘机作业环境建模

挖掘机作业环境建模就是利用相关技术生产和真实环境形状相似的虚拟场景,这个是实现作业过程的仿真的非常重要任务。虚拟环境一般由三部分构成[3]:内容、几何特性以及动态特性。内容由对象构成,这些对象构成了整个虚拟场景;几何特性包括维度、度量以及和环境的范围或边界;动态特性由对象之间的交互规则组成。环境模型的生成主要有两种方法:基于几何的建模方法和基于图像的建模方法[4]。基于几何的建模方法采用数学几何知识对对象的结构进行描述,并产生相应的图形。本文模型的构建主要采用基于几何的建模方法。

挖掘机模型主要包括下部行走体、上部回转体以及前端工作装置三部分。环境模型主要是指挖掘机作业的周围环境。为了方便实现,把该部分模型部分都作为刚性构件处理,本文采用Solidworks软件来构建这些模型,完成之后将生成的模型导入3DS Max中进行渲染处理,然后再利用相应的插件把模型以*.ive或者*.osg格式的文件导出来,是因为这两个文件格式便于模型的加载和显示。

对于挖掘机下部行走体中的履带,属于柔性构件,可以利用OSG自带的绘图功能进行实时绘制。在虚拟场景中,柔性构件多利用OSG自带的绘图功能实时地绘制柔性构件,如OSG中自带的四棱柱(Box)、圆锥(Cone)、圆柱(Cylinder)、球形(Sphere)、组合型(CompositeShape)以及用更通用的三角面片(TriangleMesh)等来勾勒出几何体等方法来绘制出场景中用到的柔性构件。

3.挖掘机作业仿真设计

3.1 场景模型的组织和管理

在实现的过程中,采用层次建模的方法进行各种模型的管理。层次建模方法利用自上而下的树形结构来表示物体的各个组成部分,可以有效地描述、表示整个虚拟环境中的三维空间关系、场景图绘制与渲染的顺序及属性。

按照场景图理论[5-6],结合实际研究对象,本文设计了一个派生自osg::MatrixTrans form的挖掘机类,使其成为OSG的一个节点类型。然后将该节点直接加入到场景节点中,成为场景根节点的一个子节点;并将环境场景整合在一起之后加入到场景中;另外还有一些辅助节点如灯光、文字节点也要加入场景中。场景组织图如图2所示。图中环境组节点下的省略号表示作业环境中的其他设备、设施等;挖掘机组节点下的省略号表示动臂、回转支撑、泵室、电机以及车轮等。

从图2中可以清楚地了解整个挖掘机作业过程的场景结构设计,整个虚拟场景从场景根节点开始构建,自顶而下一直到最后面的每一个模型节点。在这里场景节点被命名为“sceneRoot”,它是整个场景的根节点,在下面可以利用addChild(Node *child)函数为其添加任意数量的子成员,所以它必须是组节点。在OSG库中,组节点类(osg::Group)是所有可分支节点的基类,它的最主要的功能就是添加任意数量的子节点。同样也可以利用void removeChild(Node* child)方法从相应的场景组节点中去除指定的节点。然后通过调用函数setSceneData(vp_sceneRoot),将其设置为场景数据,在场景的渲染过程中,场景节点的子成员也将被渲染出来。

利用osg::MatrixTransform类设定好节点模型的信息参数,就可以合理地显示虚拟场景内的模型,并且组合成想要的效果。osg::MatrixTransform类可以实现场景模型的缩放、平移和旋转等操作。对虚拟场景内的模型节点进行合适的变换之后,再按照以上方法完成整个场景模型节点的加载,这样就建立了本虚拟监控模块的场景树的结构。

图2 场景组织树图

3.2 场景的更新与回调

虚拟场景中的模型按照一定的组织关系加入到场景中。但虚拟场景中的模型都是静止不动的,为了实现挖掘机作业过程的仿真,就需要通过程序代码设置、调用OSG的内在机制完成。

一个场景图形系统允许程序保存几何体并执行绘图遍历,此时所有保存在场景图形中的几何体均以OpenGL指令的形式发送到相应的硬件设备上。为了实现几何体的动态更新,拣选和高效渲染,场景图形需要经过更新遍历、拣选遍历以及绘制遍历三个过程。

在每一帧的渲染过程中,更新、拣选以及绘制这三个遍历都要被执行。节点的回调类是在更新遍历中被执行,可以利用该特性,实现本虚拟场景的实时更新。本文中通过在程序的帧循环过程中添加控制时间的函数和相应的数据处理函数,然后节点的更新回调类根据数据处理函数计算出的相应的结果,对模型节点进行相应的变换,从而达到监控的目的。其中数据处理函数部分通过接口函数获得挖掘机作业过程信息,然后再做插值处理,最终实现场景模型状态的变换。通过调用cviewer->setSceneData(mainRoot.get())方法,将之前构建的图形设置为场景数据,再调用OSG中的图形渲染系统来输出虚拟场景。

动态数据遍历经过三个遍历过程之后完成了模型几何信息的更新,要实现起重机作业过程的实时监控的话,需要对从交互结构实时获取的起重机运行参数信息进行数据处理,这样就需要自定义一定的运动函数,使模型按照自定义的特性实现运动仿真。可以通过设置Node节点和Drawable对象的回调类来实现运动控制。Node节点在OSG执行更新和拣选遍历的时候进行回调操作,Drawable对象是在拣选和绘制遍历阶段进行回调的。使用节点回调类程序可以按照以下步骤进行:首先从NodeCallback继承一个新的类;然后重载NodeCallback::operator()方法,在这个函数中实现场景模型的动态更新;最后初始化一个回调实例,并关联到相应的对象。

参考文献

[1]魏国前,唐秋华,饶刚,陈定方.起重机物料搬运过程的可视化仿真研究[J].武汉科技大学学报,2006(2).

[2]沈琛林.桥式起重机模拟器系统构建及关键技术研究[D].武汉理工大学,2010.

[3]陈定方,罗亚波.虚拟设计[M].北京:机械工业出版社, 2002.

[4]孙家广,杨长贵.计算机图形学[M].北京:清华大学出版社,1995.

[5]Paul Martz.OpenSceneGraph Quick Start Guide[M].王锐,钱学雷译.

[6]肖鹏,刘更代,徐明亮.OpenSceneGraph三维渲染引擎编程指南[M].清华大学出版社,2010.

推荐访问:作业 仿真 设计 OSG