关克平, 江靖楠, 王静波
(上海海事大学 商船学院,上海 201306)
基于OSG的船桥碰撞检测技术仿真
关克平, 江靖楠, 王静波
(上海海事大学 商船学院,上海 201306)
为进一步提高船舶操纵模拟器的真实性,使其更加有效地应用于港航论证和船舶操纵模拟培训中,业界一直致力于研究较为关键的模型碰撞检测技术。在介绍船舶操纵模拟器视景系统、Multigen Creator三维场景建模技术和OSG三维场景渲染技术的基础上,通过分析多种包围盒技术并比较其优劣,在满足精度要求的前提下,选取轴向包围盒技术分别构建船舶和桥体的碰撞检测包围盒,并提出相应的检测算法及优化方案,最后成功应用于船舶操纵模拟器的视景系统中。
水路运输;开源场景图形(OSG);碰撞检测;船桥碰撞;包围盒
随着我国船舶逐渐向大型化方向发展以及交通流密度不断增大,船舶航行对桥梁安全的影响日益显著。船桥碰撞是最常见的事故类型之一,只有安装桥墩防撞预警系统并对驾驶人员进行船舶模拟操纵的培训,才能更有效地降低此类事故的发生率。船舶模拟操纵通过对桥区水域的模拟而较多地应用于通航安全影响论证和通航安全评估中。[1]
船舶操纵模拟器三维视景系统中常见的驱动技术有OpenGVS、Vega Prime(VP) 和OpenSceneGraph(OSG)等,其中OSG是唯一开源的场景图形管理开发库,渲染品质高、可移植性好,为研究提供了很好的技术支持。[2]碰撞检测是船舶操纵模拟器中关键的技术之一,直接影响仿真效果的真实性,同时也是船桥碰撞仿真系统中最重要的一个环节。因此,在OSG的技术环境下,创造性地提出船桥碰撞检测算法及其在复杂环境中的优化方案,在三维视景系统中取得满意的效果。
1.1船舶操纵模拟器
船舶操纵模拟器可以使人参与到系统的仿真运行中去,通过相关仪器设备给出的航行信息,人为地控制航速、航向,使驾驶人员达到训练、通航安全评估和海事分析等的目的。其一般由教练台、主控机、雷达、电子海图和投影系统(投影机和图形计算机)等组成,可实现不同水域、不同风流环境、不同交通会遇状况和不同能见度下的航行、避让、靠离泊训练与评估。[3]
1.2MultigenCreator三维建模技术
Multigen Creator软件能够实时优化OpenFlight数据,可应用于大面积矢量建模、多面形建模和大面积地形精确生成。[3]其与OSG的结合性较好,在视景仿真、模拟训练、城市仿真等实时仿真领域处于世界领先地位。在Creator环境下制作的三维模型通常保存为*.flt文件格式,支持LOD(Levels of Detail)、BSP(Binary Space Partitioning)等多种场景优化组织结构,包含模型层次树信息,不仅便于在OSG中导入,而且可以对其进行读与写。
1.3OSG三维渲染引擎
OSG的相关扩展模块使该项技术功能更加丰富,如OsgEarth,其功能类似于GoogleEarth,具有良好的地形实时生成效率,可生成离线地形或根据高程图与纹理实时生成地形;可实现矢量图渲染、高度测量、距离查询等功能。还有较常用的OsgOcean,是OSG的扩展海洋模块,其特点在于可以逼真地仿真大面积水域,并在其基础上进行二次开发,以完善水域的仿真效果。
在OSG中实现船舶与桥体碰撞检测的流程及桥体模型(见图1和图2)。
图1 船撞桥碰撞检测和响应流程图
模型建好后,在OSG中将其导入,并进行场景驱动渲染,然后对模型进行碰撞检测,最后调用相应的碰撞效果。其中,通过碰撞检测可得出碰撞点的三维世界坐标及该点的法线信息,为碰撞响应算法提供必要的参数信息。因此,在实现船舶与桥墩碰撞的三维仿真中,碰撞检测是最关键的环节。
在虚拟仿真中,检测模型间的碰撞时,通常先检测两个模型的包围盒是否有碰撞,若无碰撞,则两模型之间肯定没有相交;若有碰撞,根据层次结构树原理,自上而下依次检测其枝节节点及叶子节点的包围盒是否相交。若出现相交,则停止检测,返回相交结果;若检测完其叶子节点仍未相交,可判断两者不相交。
图2 Creator中构建的桥体模型及其层次结构图
3.1包围盒技术
包围盒的构建类型有很多,以下列举几种常用的包围盒。[5]
3.1.1包围球(Bounding Sphere)
OSG中,在构建场景树时就已经为每个节点构造了一个包围球,并成为相应节点的属性,而并非在求取时专门构建。[6]需要算法时,可以通过getBound()直接调用。其一般适用于轮廓接近于球体的包围盒的构建,可通过两个包围球的半径之和与两者球心距离的关系,初步判断两个模型是否相交,但是不适用于长方体或条状物包围盒的构建。
3.1.2轴向包围盒AABB(Axis-Aligned Bounding Box)
轴向包围盒的各个方向与坐标轴方向平行,一般是长方体。[7-8]OSG中较常用的包围盒构建类型能满足基本碰撞检测精度的要求。
在进行森林保护工作时,更多的是依靠人工对森林做出相关的保护措施。因此林区保护人员的专业素质就显得非常重要。但是目前我国林区工作人员大多数并非经过专业培训,且在工作中并不能做到科学保护,对于森林中出现的常见问题也不能很好的处理,很有可能会对森林造成二次伤害。林区保护人员的工作水平问题也是森林保护工作发展的一个重要阻碍,必须及时妥善的处理这个问题。
图3为船舶模型的AABB包围盒,分别记录包围盒在X、Y、Z3个轴上投影的最大值和最小值,并保存为3个矩阵,即Mat[0]=[Xmin,Xmax]、Mat[1]=[Ymin,Ymax]和Mat[2]=[Zmin,Zmax],通过组合可以得到包围盒8个顶点的位置信息。船舶在X、Y、Z轴上的投影区间分别为(Xmin,Xmax)、(Ymin,Ymax)和(Zmin,Zmax),若与另一物体的包围盒在3个坐标上的投影区间同时重合,则判断两物体包围盒相交,否则不相交。
3.1.3方向包围盒OBB(Oriented Bounding Box)
方向包围盒是三维空间中能够包围物体的沿任意方向构建的最小长方体包围盒,其紧密性较上述两种包围盒更好。在OSG中可通过改进算法和坐标转换实现,但相交测试较复杂。
图3 船舶模型AABB包围盒及其顶点坐标
3.1.4离散方向多面体包围盒k-DOP(kDirection Orientation Polytopes)
k-DOP[8]是一种多面体包围盒,不仅能够包含该对象,而且其所有面的法向量都取自一个固定的方向(k个向量)集合。k-DOP比其他包围体更紧密地包围原物体,k的取值越大,包围的就越紧密,而计算复杂度越高,求交运算也就越复杂。
由于课题研究对象是船模和桥墩,其结构基本成轴对称且轮廓接近长方体。综合考虑上述各种包围盒的优劣,在保证一定碰撞检测精度的前提下,最终选取AABB轴向包围盒技术。该技术在OSG中实现碰撞检测的算法较其他方法的可行性更高,程序耗费量较低。
3.2OSG碰撞检测算法
3.2.1场景层次树构建
进行碰撞检测之前构建合理的场景层次树,使算法运行时占用较小内存,有利于提高碰撞检测的效率。碰撞检测判断流程见图4,需构建的场景层次结构见图5。
在OSG中建立一个findNodeVisitor 的osg::NodeVisitor的派生类,用于读取*.flt结构树中的用于碰撞检测的节点b_1、b_2、b_3和b_4(见图2),并作为OSG场景树中4个用于碰撞检测的桥墩节点brg_1、brg_2、brg_3和brg_4读入,最后分别添加至brg组节点下。findNodeVisitor类的定义代码在主程序中通过accept()调用即可。
class findNodeVisitor : public osg::NodeVisitor
{
public:
virtual void apply(osg::Node amp;searchNode);//将正在访问的节点名称与搜索节点名称相比较,若相符,则添加至节点列表
图4 碰撞检测判断流程图
图5 船桥碰撞的场景层次结构图
osg::Node* getFirst();//获取第一个与搜索字符串名称相符合的节点
……};
3.2.2碰撞检测模块
该模块建立了一个碰撞检测的类[5,9],主要用于检测包围盒之间是否产生碰撞,其主要代码为:
class DecCallback: public osg::NodeCallback
{public:
virtual void operator()(osg::Node*node,osg::NodeVisitor*nv)
{……//定义相关包围盒访问器;
ship-gt;getParent(0)-gt;accept(boundvisitor1);//建立ship上一级父节点坐标系下的包围盒访问器;
bridge-gt;accept(boundvisitor2); //建立bridge在当前父节点坐标系下的包围盒访问器
………//分别获取船舶的包围盒box_ship和整个桥体的包围盒box_bridge;
collision_sign=box_ship.intersects(box_bridge);//用来标记船舶是否碰撞的bool型变量,碰撞为True,不碰撞为False
if(collision_sign==True)//判断船和整体桥体模型是否碰撞,若碰撞,则进行下列操作:
{……//判断船舶包围盒与四个桥墩的包围盒是否发生碰撞。}}};
上述代码中,分别把船舶和桥体模型作为节点类型读入为ship和bridge,由于它们是gp场景根节点的不同分支,直接求ship包围盒的坐标和bridge包围盒的坐标不在同一个坐标系内,无法进行碰撞检测。因此,只有求出ship在其上一级父节点的坐标系中包围盒的位置,才能与桥体的包围盒一起完成正确的碰撞检测。[7]
在主程序中使用如下代码,可使场景在更新每一帧时调用碰撞检测:
gp-gt;setUpdateCallback(new DecCallback);
该碰撞算法可以实时检测碰撞,且具有一定的碰撞精度。其碰撞检测效果见图6和图7。
图6 船舶未与桥墩碰撞的情况
图7 船模和桥墩碰撞的情况
4.1碰撞检测算法的优化
在碰撞检测算法中,还可利用OSG的IntersectVisitor遍历节点和所有子节点。在OSG中读入节点时,构建它们的k-D树,以便更进一步加快碰撞检测速度。[5]主程序中调用k-D树的代码为
osgDB::Registry::instance()-gt;setBuildKdTreeHint(osgDB::Renderwriter::OPtions::BUILD_KDTREES);
在进行碰撞检测时调用InterseetionVisitor::SetUseKdTreewhenAvailable,可进一步提高碰撞检测效率。
4.2包围盒的优化
仔细观察图8,由于碰撞角度不同,当检测到两包围盒碰撞时,船舶和桥墩可能还未发生碰撞。因此,需进一步优化包围盒的构建方案。图8(左)是前文所构建的包围盒;图8(中)是进一步优化的桥墩包围盒,其下端明显更接近实际桥墩模型,进行碰撞检测的精度也更高。如对碰撞检测要求更高,可对桥墩模型进行分段构建包围盒(见图8(右)),但该方法的碰撞检测算法更为复杂,运算量大。实际应用中可根据需要选择构建包围盒的算法。[10]
图8 桥墩模型的AABB包围盒和Convex hull包围盒
运用OSG技术,通过构建模型的包围盒,对船撞桥时船舶和桥墩的碰撞检测进行初步模拟,并已成功应用到船舶操纵模拟器中。该项技术也可获取碰撞点的世界坐标法线等参数,为后期碰撞响应算法的加入提供技术支持。
[1] 关克平,施朝健,肖英杰,等. 港航设计论证中的三维视景建模技术[J]. 系统仿真学报,2006(S2):436-440.
[2] YUAN Peng, WANG Shujie, ZHANG Jiwei,et al. Virtual Reality Platform Based on Open Sourced Graphics Toolkit Open Scene Graph[A]. Proceedings of 2007 10th IEEE International Conferences on Computer Aided Design and Computer Graphics,2007.
[3] 关克平,陈锦标,施朝健. 基于Creator和Vega的航海模拟器三维视景系统开发[A].2006系统仿真技术及其应用学术交流会论文集,2006.
[4] 於文.基于OSG的航海模拟器视景系统关键技术研究[D].厦门:集美大学,2012.
[5] 辛静.基于增强现实的机械臂运动碰撞检测算法研究[D].北京:北京邮电大学,2011.
[6] FAN Wenshan,WANG Bin,PAUL J C,et al. An Octree-Based Proxy for Collision Detection in Large-Scale Particle Systems[J]. Science China:Information Sciences, 2013(1): 55-64.
[7] 杨晓,廉静静,张新宇. 基于OSG的虚拟场景中包围盒碰撞检测的研究[J]. 计算机技术与发展,2011(9):32-34.
[8] 汪璇. 基于OSG的分布式汽车驾驶模拟器运行仿真及碰撞检测研究[D].武汉:武汉理工大学,2008.
[9] ICCD: Interactive Continuous Collision Detection Between Deformable Models Using Connectivity-Based Culling[J].IEEE Transactions on Visualization and Computer Graphics,2009,15(4):544.
[10] COMING, DANIEL S, STAADT, et al. Velocity-Aligned Discrete Oriented Polytopes for Dynamic Collision Detection[J].IEEE Transactions on Visualization and Computer Graphics, 2008, 14(1):1-12.
SimulationonShip-BridgeCollisionDetectionTechnologyBasedonOSG
GUANKeping,JIANGJingnan,WANGJingbo
(Merchant Marine College, Shanghai Maritime University, Shanghai 201306, China)
In order to improve the facticity of simulation, simulator developers turn attention to three-dimensional collision detection technology, which is one of the key technologies for that purpose. The visual system of the ship handling simulator, the three dimensional modeling technology based on Multigen Creator and the rendering technology of 3D scene based on Open Scene Graph(OSG) are introduced, and the different bounding boxes algorithms are compared. The Axis-aligned bounding box algorithm is chosen for the collision detection, and corresponding detection technology and optimization approaches are presented. The model has been successfully used in the visual system of a ship handling simulator.
waterway transportation; Open Scene Graph(OSG); collision detection; ship-bridge collision; bounding box
2014-02-10
国家自然科学基金(51149001);上海市教育委员会科研创新项目(11CX49);上海海事大学研究生物创新基金(2013ycx032)
关克平(1978-),男,福建宁德人,副教授,研究方向为港航安全论证、航海仿真技术等。E-mail:kpguan@shmtu.edu.cn.
1000-4653(2014)02-0035-04
U666.158
A