一种驾驶模拟器获得交通环境信息的快速截取引擎的制作方法_2

文档序号:8512483阅读:来源:国知局
的句柄写入链表,将不再处于当前网格的被截取仿真对象9的句柄从链表中删除,输出链表中的被截取仿真对象9的句柄,在仿真过程中对链表的读、写保护机制。读、写保护机制是指保证满足以下要求的一系列过程:(I)每一个链表在同一时刻只能有一个被截取仿真对象9的句柄被写入或删除,并且此时不能进行读链表操作;(2)每一个链表在同一时刻可以有多个访问者从中读取被截取仿真对象9的句柄。所述的被截取仿真对象9可以是交通仿真器中的交通仿真车辆、行人、动态信息指示牌等动态对象,也可以是路障、交通标志牌等静态对象。
[0023]仿真对象定位算法模块4,负责为被截取仿真对象9提供一种定位算法,该算法能够根据仿真场景空间划分模块5所划分的网格,以及被截取仿真对象9的轮廓、位置、姿态确定被截取仿真对象9当前所处的网格,该算法执行过程中所需要的被截取仿真对象9的数据由定位服务模块2为该对象所创建的被截取仿真对象数据存储空间7中获得。被截取仿真对象9当前所处的网格是指,利用表示被截取仿真对象二维轮廓的矩形与仿真场景中的正方形网格进行计算机图形学意义上的相交检测计算,所有与上述矩形发生相交的正方形网格,都认为是被截取仿真对象9当前所处的网格,因此被截取仿真对象9当前所处的网格数是I至4个。
[0024]仿真范围截取算法模块6,负责根据仿真场景空间划分模块5所划分的网格,以及调用该模块的驾驶模拟器各子系统10当前设定的位置、截取范围,计算出该截取范围所覆盖的正方形网格,然后从被覆盖的正方形网格所创建的链表中提取被截取仿真对象9在引擎中所对应的被截取仿真对象数据存储空间7的句柄,该算法执行过程中所需要的驾驶模拟器各子系统10的数据由截取服务模块3为驾驶模拟器各子系统10所创建的模拟器子系统数据存储空间8中获得。该仿真范围截取算法模块6可以通过正方形网格所创建的链表中存储的被截取仿真对象9的句柄,访问被截取仿真对象9所对应的被截取仿真对象数据存储空间7,从而获得被截取仿真对象9的仿真参数、仿真结果等信息。调用仿真范围截取算法模块6的驾驶模拟器各子系统10可以是图像显示系统、声响模拟系统,它们通过被覆盖的网格所创建的链表获得截取范围以内交通仿真车辆的显示状态、声响状态等所需状态,并通过驾驶模拟器的成像设备、声响设备、运动模拟设备呈现给驾驶员。同时,调用仿真范围截取算法模块6的也可以是自行开发的交通仿真器中需要进行一定区域内交通车辆信息统计的其他对象,比如每一个交通仿真车辆,通过该算法模块可以获得自己周围一定范围内其他交通仿真车辆的信息,作为自身驾驶决策的输入。截取范围所覆盖的正方形网格,是指利用表示截取范围的简单几何图形(如圆形、矩形、等腰三角形等)与仿真场景中的正方形网格进行计算机图形学意义上的相交检测计算,与上述简单几何图形发生相交的正方形网格,都认为是截取范围所覆盖的正方形网格。
[0025]如图1、2所示,快速截取引擎作为驾驶模拟器与交通仿真器之间的信息传递媒介,省略了对整个场景中的所有交通仿真对象进行遍历的过程,而是只需要进行少量的、简单的相交检测计算就可以获得所需范围的交通仿真对象数据,因此能够大大提高驾驶模拟器中各个子系统从交通仿真器中获得交通仿真对象信息的运行速度,从而达到提高驾驶模拟器与交通仿真器联合仿真的性能的目的。并可以根据不同的情况,为快速截取引擎选择不同的布置方案,本实施例选择如图2所示的a布置方案。
[0026]本实施例采用面向对象的C++语言编程实现,本发明设计了截取引擎类CCullingEngine Class作为快速截取引擎I和仿真场景空间划分模块5的实现对象,该类完成了根据仿真空间的尺寸和划分网格的大小对仿真空间进行网格划分的工作,同时,该类负责创建、管理其他类的实例对象。如图3所示,本发明设计了空间网格类CCell Class作为空间划分后的每一个网格实例对象,空间网格类CCell Class中包括了针对不同类型被截取仿真对象9所建立的链表,链表利用C++标准模板库的list实现,从而实现了对链表的读写保护机制。链表中保存了属于该网格的被截取仿真对象9对应的被截取仿真对象数据存储空间7的句柄,空间网格类CCell Class还提供了向各个链表中写入上述句柄、从各个链表中删除句柄、从各个链表中提取出句柄的成员函数,所有代表网格的空间网格类CCell Class实例构成的二维数组由截取引擎类CCullingEngine Class来管理。
[0027]本实施例设计了被截取对象类CObjectToCull Class,交通仿真器输出的每一个需要被截取的仿真对象在快速截取引擎I中都由一个被截取对象类CObjectToCull Class的实例来代表,被截取对象类CObjectToCull Class的成员变量保存了该交通仿真对象的轮廓、位置、姿态信息,其在空间网格类CCell Class中应该所属的链表信息,以及其当前所属的网格个数、网格的索引值,被截取对象类CObjectToCull Class的成员函数实现了仿真对象定位算法模块4的功能,能够根据仿真对象的轮廓、位置、姿态确定其所处的网格。所有被截取对象类CObjectToCull Class实例,都存储在被截取对象数据存储空间7中。
[0028]如图4所示,本实施例中仿真对象定位算法采用了计算机图形学中的相交检测算法,交通仿真对象的轮廓利用有向包围盒(Oriented Bounding Βοχ,ΟΒΒ)表示,仿真场景空间划分后的网格则用正方形表示,二者之间的求交计算通过计算机图形学中的标准算法实现,所有与OBB发生相交的正方形网格,都认为是交通仿真对象当前所处的网格,图4中发生相交的正方形网格已用网格线纹理标出,图中为清楚表示相交关系,将仿真车辆的尺寸进行了适当的放大。
[0029]如图5所示,被截取对象类CObjectToCull Class实例的数据存储空间由定位服务负责管理,定位服务的注册功能实现类的构造,注销功能实现类的析构,更新功能实现对类成员变量的更新。
[0030]本实施例设计了截取模型类CCullingModel Class,驾驶模拟器中每一个需要对交通仿真对象进行截取的子系统在快速截取引擎中都由一个截取模型类CCullingModelClass实例来代表,截取模型类CCullingModel Class的成员变量保存了该驾驶模拟器子系统所要截取的范围信息、当前所要截取的位置信息、所要截取的交通仿真对象类型信息,截取模型类CCullingModel Class成员函数实现了仿真范围截取算法模块6的功能,能够根据驾驶模拟器子系统的截取范围、当前位置信息确定截取到的网格。
[0031]本实施例中涉及到的驾驶模拟器子系统包括声响系统和图像显示系统,如图6所示,它们的截取范围都用圆形来表示,范围截取算法模块在进行圆形与表示仿真场景空间划分后网格的正方形之间的求交计算时,通过计算机图形学中的标准算法实现,所有与圆形发生相交的正方形网格,都认为是驾驶模拟器子系统需要提取信息的网格。
[0032]如图7所示,截取模型类CCullingModel Class实例的数据存储空间由截取服务负责管理,截取服务的注册功能实现类的构造,注销功能实现类的析构,更新功能实现对类成员变量的更新,反馈功能实现将仿真范围截取算法的计算结果反馈给驾驶模拟器。
[0033]快速截取引擎的工作流程分为以下几步:
[0034]步骤1、仿真程序初始化阶段,利用截取引擎类CCullingEngine Class对仿真空间进行划分,并为每一个划分后的网格创建和初始化一个空间网格类CCelI Class实例,生成空间网格类CCell Class实例的二维数组。
[0035]步骤2、驾驶模拟器中的图像子系统、声响子系统向截取服务提交注册申请,截取服务的注册功能在引擎中为两个子系统分别创建与之对应的截取模型类CCullingModelClass实例,并确定两个子系统的截取范围、分别需要对交通仿真器中的哪些交通仿真对象进行截取,本发明中两个子系统均只需对交通仿真车辆进行截取。
[0036]步骤3、交通仿真器中每一个希望加入到驾驶模拟器场景中的交通仿真对象向定位服务提交注册申请,定位服务为每一个交通仿真对象(本发明只有交通仿真车辆)在引擎中建立与之对应的被截取对象类CObjectToCull Class实例,并初始化类的成员变量。
[0037]步骤4、交通仿真器输出的每一个交通仿真车辆通过定位服务的更新功能为引擎中的被截取对象类CObjectToCulI Class实例更新交通仿真对象的位置、
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1