一种三维移动对象索引方法及装置的制造方法

文档序号:10569963阅读:193来源:国知局
一种三维移动对象索引方法及装置的制造方法
【专利摘要】本发明公开了一种三维移动对象索引方法及装置,该方法包括:将移动对象添加到松散八叉树结构中;在移动对象所处的当前节点的索引信息中,记录移动对象的标识;满足预设条件时,判断移动对象是否还处于当前节点;如果移动对象还处于当前节点,则保持索引信息;如果移动对象不处于所述当前节点,则查询移动对象当前移动到的目标节点,并在目标节点的索引信息中记录移动对象的标识。本发明提供的方法及装置,用以解决现有技术采用八叉树结构索引规模较大的移动对象时,存在的更新量巨大,难以满足实时处理需求的技术问题。实现了减少了索引更新开销,在保持索引准确性的基础上,提高了索引效率的技术效果。
【专利说明】
一种三维移动对象索引方法及装置
技术领域
[0001] 本发明涉及计算机技术领域,尤其涉及一种三维移动对象索引方法及装置。
【背景技术】
[0002] 20世纪90年代以来,随着计算机硬件及信息系统和网络技术的不断发展和日益成 熟,移动对象数据不断应用在现实生活中。尤其是空间中的3D移动对象的广泛应用,比如流 量监控,人群拥挤,道路管理和游戏等场景下,相应的车载导航,地理信息系统不断出现,使 得移动对象数据组织成为最近的研究热点之一。由于应用的不断扩展,移动对象规模的不 断增大,运动形式的多样性,导致对移动对象的索引和查询变得越来低效。如何能够高效的 组织众多的移动对象,以及如何能够高效地实现索引和查询操作变得越来越重要。寻找合 适的空间索引结构已经变成了迫切需求。
[0003] 在大规模移动对象频繁更新场景中,主要存在由于移动对象数量巨大且更新频繁 而造成高昂的计算和维护开销的问题。而目前在国内外,八叉树结构是索引空间移动对象 的主要空间索引结构之一。八叉树结构的概念是由Hunter博士于1978年在他的博士论文中 提出的数据结构。它是基于四叉树结构推广到三维空间而形成的一种三维空间数据结构, 其树形的结构在空间上具有很强的优势,因而得到广泛的应用。在八叉树结构中,根节点表 示整个三维空间区域。将此区域分成8个大小相同的区域,并用其8个子女表示。对于每一个 分割的区域,继续将其分成8个更小的区域。按此规则一直分割到不再需要分割或者达到规 定的层次为止。因此八叉树结构广泛的应用在空间的场景管理中,如索引移动对象位置和 侦测冲突等。
[0004] 八叉树结构的特点是与移动对象的位置和大小有关系,且关联的更多是移动对象 的位置,因而一次微小的移动也会产生更新,即随着移动对象的每一次运动,都会产生一次 更新,这样可以精确的索引移动对象的位置状态信息。但是对于当前移动对象规模巨大且 频繁更新的场景,采用八叉树结构会产生巨大的更新量,且计算开销很大,难以满足实时处 理需求。
[0005] 也就是说,现有技术中采用八叉树结构索引规模较大的移动对象时,存在更新量 巨大,成本大且难以满足实时处理需求的技术问题。

【发明内容】

[0006] 本发明通过提供一种三维移动对象索引方法及装置,解决了现有技术中采用八叉 树结构索引规模较大的移动对象时,存在的更新量巨大,成本大且难以满足实时处理需求 的技术问题。
[0007] -方面,为解决上述技术问题,本发明提供了如下技术方案:
[0008] 一种三维移动对象索引方法,包括:
[0009] 将移动对象添加到松散八叉树结构中;所述松散八叉树结构包括N个节点;N为大 于1的正整数;
[0010]在所述移动对象所处的当前节点的索引信息中,记录所述移动对象的标识;
[0011]满足预设条件时,判断所述移动对象是否还处于所述当前节点;
[0012] 如果所述移动对象还处于所述当前节点,则保持所述索引信息;
[0013] 如果所述移动对象不处于所述当前节点,则查询所述移动对象当前移动到的目标 节点,并在所述目标节点的索引信息中记录所述移动对象的标识。
[0014] 可选的,所述满足预设条件时,判断所述移动对象是否还处于所述当前节点,具体 为:从存储所述当前节点的节点信息时起,计时达到预设时长时,判断所述移动对象是否还 处于所述当前节点;或接收到触发信号时,判断所述移动对象是否还处于所述当前节点。
[0015] 可选的,所述松散八叉树结构通过经典八叉树结构扩展获得;所述松散八叉树结 构的节点的宽度为W* (1 +p);其中,W为所述松散八叉树结构对应的经典八叉树结构的节点 宽度;P为预设的扩展因子。
[0016] 可选的,所述判断所述移动对象是否还处于所述当前节点,具体为:判断所述移动 对象的中心是否处于所述当前节点的非扩展区;所述非扩展区为所述当前节点与当前经典 节点重合的区域;所述当前经典节点为所述经典八叉树结构中用于扩展获得所述当前节点 的节点;当所述移动对象的中心处于所述当前节点的非扩展区时,确定所述移动对象还处 于所述当前节点。
[0017] 可选的,所述判断所述移动对象的中心是否处于所述当前节点的非扩展区之后, 还包括:当所述移动对象的中心不处于所述当前节点的非扩展区时,判断所述移动对象是 否全部处于所述当前节点;如果所述移动对象全部处于所述当前节点,则确定所述移动对 象还处于所述当前节点;如果所述移动对象不是全部处于所述当前节点,则确定所述移动 对象移动到目标节点;其中,所述移动对象的中心处于所述目标节点的非扩展区。
[0018] 可选的,所述索引信息的存储结构为标签结构;所述标签结构中的标签记录有:所 述移动对象的标识、节点的标签值和所述移动对象的废弃的标签的数目。
[0019] 可选的,所述在所述移动对象所处的当前节点的索引信息中,记录所述移动对象 的标识,具体为:在所述索引信息中建立当前标签;所述当前标签记录有:所述移动对象的 标识、所述当前节点的标签值和所述移动对象的废弃的标签的当前数目;
[0020] 所述在所述目标节点的索引信息中记录所述移动对象的标识,具体为:在所述索 引信息中建立目标标签;所述目标标签记录有:所述移动对象的标识、所述目标节点的标签 值和所述移动对象的废弃的标签的更新数目;其中,所述更新数目等于所述当前数目加1。
[0021] 可选的,在所述索引信息中记录所述移动对象当前移动到的目标节点的节点信息 之后,还包括:判断所述更新数目是否大于预设阈值;如果所述更新数目大于预设阈值,则 删除所述索引信息中的历史标签;所述历史标签为记录的数目小于所述更新数目的标签。
[0022] 可选的,所述松散八叉树结构和所述索引信息均拆分为元素,以作为数组存储,从 而使所述方法能应用于图形处理器的并行计算架构平台。
[0023]另一方面,提供一种三维移动对象索引装置,包括:
[0024] 添加模块,用于将移动对象添加到松散八叉树结构中;所述松散八叉树结构包括N 个节点;N为大于1的正整数;
[0025] 记录模块,用于在所述移动对象所处的当前节点的索引信息中,记录所述移动对 象的标识;
[0026] 判定模块,用于满足预设条件时,判断所述移动对象是否还处于所述当前节点;
[0027] 更新模块,用于如果所述移动对象还处于所述当前节点,则保持所述索引信息;如 果所述移动对象不处于所述当前节点,则查询所述移动对象当前移动到的目标节点,并在 所述目标节点的索引信息中记录所述移动对象的标识。
[0028] 本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0029] 1、本申请实施例提供的方法及装置,采用松散八叉树结构作为索引结构,在使得 节点间相互重叠,节点宽度增加的基础上,将移动对象和索引节点相关联,充分考虑移动不 确定性,只有移动对象移动出当前的索引格子即节点范围,才会导致更新操作,可以避免大 量微小移动而导致的更新,减少了索引更新开销,在保持索引准确性的基础上,提高了索引 效率。
[0030] 2、本申请实施例提供的方法及装置,采用标签结构来存储索引信息,可以根据标 签记录的数目确定出所述移动对象所处的最新的节点,这样废弃的历史标签和最新的更新 标签同时存在,故不用在每次更新移动对象的位置信息时,都执行对历史信息的删除操作, 提高了处理效率;进一步,设置在移动对象对应的标签数量达到一定规模时,才统一的删除 存储的历史标签,进一步加快了更新操作的处理效率。
[0031] 3、本申请实施例提供的方法及装置,借助GPU(Graphic Processing Unit,图形处 理器)平台上的CUDA(Compute Unified Device Architecture,并行计算架构)平台,实现 所述方法。由于GPU平台巨大的运算吞吐量,大大提高了所述方法的执行能力,减少了处理 时间,更加能够满足处理大规模移动对象频繁更新场景实时处理的需求。
【附图说明】
[0032] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领 域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的 附图。
[0033] 图1为本申请实施例中三维移动对象索引方法的流程图;
[0034] 图2为本申请实施例中松散八叉树结构示意图;
[0035] 图3为本申请实施例中扩展区与非扩展区示意图;
[0036] 图4为本申请实施例中松散八叉树结构建立示意图;
[0037] 图5为本申请实施例中索引移动对象的总体流程图;
[0038] 图6为本申请实施例中更新移动对象索引信息的处理流程图;
[0039] 图7为本申请实施例中三维移动对象索引装置结构示意图。
【具体实施方式】
[0040] 本申请实施例通过提供一种三维移动对象索引方法及装置,解决了现有技术中采 用八叉树结构索引规模较大的移动对象时,存在的更新量巨大,成本大且难以满足实时处 理需求的技术问题。实现了减少了索引更新开销,在保持索引准确性的基础上,提高了索引 效率的技术效果。
[0041 ]为解决上述技术问题,本申请实施例提供技术方案的总体思路如下:
[0042] 本申请提供一种三维移动对象索引方法,包括:
[0043] 将移动对象添加到松散八叉树结构中;所述松散八叉树结构包括N个节点;N为大 于1的正整数;
[0044] 在所述移动对象所处的当前节点的索引信息中,记录所述移动对象的标识;
[0045] 满足预设条件时,判断所述移动对象是否还处于所述当前节点;
[0046] 如果所述移动对象还处于所述当前节点,则保持所述索引信息;
[0047] 如果所述移动对象不处于所述当前节点,则查询所述移动对象当前移动到的目标 节点,并在所述目标节点的索引信息中记录所述移动对象的标识。
[0048] 本申请实施例提供的方法及装置,采用松散八叉树结构作为索引结构,在使得节 点间相互重叠,节点宽度增加的基础上,将移动对象和索引节点相关联,充分考虑移动不确 定性,只有移动对象移动出当前的索引格子即节点范围,才会导致更新操作,可以避免大量 微小移动而导致的更新,减少了索引更新开销,在保持索引准确性的基础上,提高了索引效 率。
[0049] 为了更好的理解上述技术方案,下面将结合具体的实施方式对上述技术方案进行 详细说明,应当理解本发明实施例以及实施例中的具体特征是对本申请技术方案的详细的 说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的 技术特征可以相互组合。
[0050] 实施例一
[0051 ]在本实施例中,提供了 一种三维移动对象索引方法,请参考图1,图1为本申请实施 例中三维移动对象索引方法的流程图,如图1所示,所述方法包括:
[0052]步骤S101,将移动对象添加到松散八叉树结构中;所述松散八叉树结构包括N个节 点;N为大于1的正整数;
[0053]步骤S102,在所述移动对象所处的当前节点的索引信息中,记录所述移动对象的 标识;
[0054]步骤S103,满足预设条件时,判断所述移动对象是否还处于所述当前节点;
[0055]步骤S104,如果所述移动对象还处于所述当前节点,则保持所述索引信息;
[0056]步骤S105,如果所述移动对象不处于所述当前节点,则查询所述移动对象当前移 动到的目标节点,并在所述目标节点的索引信息中记录所述移动对象的标识。
[0057]下面对所述三维移动对象索引方法进行详细说明:
[0058]在执行步骤S101之前,需要先建立移动对象的模型。
[0059] 现实场景中移动对象的种类很多,比如车辆、行人、飞机或轮船等等,它们有各自 的质量、半径、位置、速度和加速度等信息,同样移动对象的模型也有多种,N体(N-body)仿 真为一种常用的移动对象模型的建立方法。
[0060] N体仿真系统描述的是一组具有相互作用力的N个粒子运行轨迹计算过程的动力 系统,广泛应用在物理学,静电学和漩涡流体动力学等领域中。在模型中,每个粒子代表一 个移动对象,具有相应的质量,半径,位置,速度和加速度,从而更好地达到模拟效果。
[0061] 影响粒子运动的主要因素是受力情况,N体仿真粒子最常用的算法是PP (particle-particle)算法,对于包含N个粒子的仿真系统,对于第i个粒子受力计算时,直 接计算N-1个粒子对它的引力相加,得到粒子所受的总力,并以此计算重力加速度,从而得 到物体新的位置和速度。并且不断循环,能够得到所有粒子的运动轨迹。PP算法的时间复杂 度是〇(N2),因此当N非常大时,模拟系统的运行速度明显减慢,并不能满足实际工程的需 要。早期也研究通过分级方法来提高N体仿真系统的运行性能,主要是基于算法:BH (Barnes - Hut)算法,BH算法的时间复杂度是O(NlogN)。
[0062]在建立了移动对象的模型后,执行步骤S101,即将移动对象添加到松散八叉树结 构中;所述松散八叉树结构包括N个节点;N为大于1的正整数。
[0063]具体来讲,经典八叉树结构是一种用于描述三维空间的树状数据结构。经典八叉 树结构的每个节点表示一个正方体的体积元素,每个节点有八个子节点,将八个子节点所 表示的体积元素加在一起就等于父节点的体积。如图2所示,松散八叉树结构201是通过扩 展因子P扩大经典八叉树结构202节点的区域,使得原来的节点相互重叠在一起,使之变得 "松散"。假设经典八叉树结构202的节点宽度为W,对于给定的扩展因子p,那么对应的松散 八叉树结构201节点宽度变为W*(l+p),这样,松散八叉树结构201的节点就会和原来经典八 叉树结构202的兄弟节点部分重合在一起。
[0064]较优的,扩展因子p,经典八叉树结构202的节点宽度W和所述移动对象的半径r满 足下述关系时,能在保证索引精确度的同时,提尚索引效率。
[0066] 接下来,执行步骤S102,在所述移动对象所处的当前节点的索引信息中,记录所述 移动对象的标识。
[0067] 在本申请实施例中,所述索引信息的存储结构为标签结构;所述标签结构中的标 签记录有:所述移动对象的标识、节点的标签值和所述移动对象的废弃的标签的数目。
[0068] 在松散八叉树结构中,每个节点上存储着索引信息,索引信息以条目的形式存在, 标签结构是记录每个移动对象最新索引条目的结构,它的存在形式是(〇id,Slastest, Nold)
[0069] 具体来讲,对于每一个叶子节点的条目将会被分配一个标签,标签的值可以由一 个单调增加的计数器决定。这样,每一个条目的标签值将会是全局独一无二的。标签值是条 目和叶子节点一个暂时的关系,标签值小的条目总是比标签值大的条目先建立。这样每个 条目的结构是form(oid,stamp),其中form是条目;oid是移动对象的标识;stamp是对应标 签的值,即所述节点的标签值。根据stamp可以确定到松散八叉树结构中一个唯一的节点。
[0070] 在本申请实施例中,在所述移动对象所处的当前节点的索引信息中,记录所述移 动对象的标识,具体为:在所述索引信息中建立当前标签;所述当前标签记录有:所述移动 对象的标识、所述当前节点的标签值和所述移动对象的废弃的标签的当前数目。
[0071 ]具体来讲,对于每个所述移动对象,都有对应的标签。标签的结构是Memo (oid, Slastest,Nold),其中,Slastest是移动对象所处最新节点的标签值,oid是移动对象的标 识;Nold代表废弃条目的数目,也就是说,Nold是建立该标签时已有的所述移动对象对应的 标签的数目。
[0072] 例如,一个标签条目是Memo(099,900,2),表示对于移动对象099来说,最新处于标 签值为900的节点位置上,已经存在2个099对应的废弃条目。需要注意的是,当一个移动对 象没有对应的标签条目时,表示它的No Id为0,即没有已经存在废弃节点。为了加速标签结 构中的查找过程,将根据移动对象oid建立哈希表。
[0073]接下来,执行步骤S103,即满足预设条件时,判断所述移动对象是否还处于所述当 前节点。
[0074] 在本申请实施例中,所述满足预设条件时,判断所述移动对象是否还处于所述当 前节点,具体为:
[0075] 从记录所述移动对象的标识时起,计时达到预设时长时,判断所述移动对象是否 还处于所述当前节点;或
[0076] 接收到触发信号时,判断所述移动对象是否还处于所述当前节点。
[0077] 具体来讲,可以每隔一定的时间步长,进行一次对移动对象位置的判断;也可以 是,根据工作人员的更新指令来进行对移动对象位置的判断,在此不做限制。
[0078] 在本申请实施例中,所述判断所述移动对象是否还处于所述当前节点,具体为:
[0079] 判断所述移动对象的中心是否处于所述当前节点的非扩展区;所述非扩展区为所 述当前节点与当前经典节点重合的区域;所述当前经典节点为所述经典八叉树结构中用于 扩展获得所述当前节点的节点;
[0080] 当所述移动对象的中心处于所述当前节点的非扩展区时,确定所述移动对象还处 于所述当前节点。
[0081] 进一步,所述判断所述移动对象的中心是否处于所述当前节点的非扩展区之后, 还包括:
[0082] 当所述移动对象的中心不处于所述当前节点的非扩展区时,判断所述移动对象是 否全部处于所述当前节点;
[0083] 如果所述移动对象全部处于所述当前节点,则确定所述移动对象还处于所述当前 节点;
[0084] 如果所述移动对象不是全部处于所述当前节点,则确定所述移动对象移动到目标 节点;其中,所述移动对象的中心处于所述目标节点的非扩展区。
[0085] 具体来讲,松散八叉树结构的每个节点均是从与之对应的经典八叉树的节点扩展 而来,所述松散八叉树结构的每个节点均可以分为扩展区和非扩展区,如图3所示,所述非 扩展区为该节点与该节点对应的经典八叉树结构的经典节点的重合区域,即图3中的粗线 条阴影区域301;所述扩展区,为该节点与对应的经典节点的兄弟节点的重合区域,即该节 点拓展出其对应的经典节点的区域,即图3中的细线条阴影区域302。
[0086] 具体来讲,松散八叉树索引方法产生较少更新成本的原因是:当移动对象〇移动一 个时间步长以后,〇的中心处于它之前所处节点的非扩展区则不会产生更新;其次,若〇的中 心已经移出之前所处节点的非扩展区,则只要移动对象〇的全部均包含在之前所处节点的 扩展区和非扩展区中,〇所处的节点就不需要更新,确定〇还处于所述当前节点。
[0087] 再下来,根据步骤S103的判断结果,选择执行步骤S104,如果所述移动对象还处于 所述当前节点,则保持所述索引信息;或步骤S105,如果所述移动对象不处于所述当前节 点,则查询所述移动对象当前移动到的目标节点,并在所述目标节点的索引信息中记录所 述移动对象的标识。
[0088]在本申请实施例中,所述在所述目标节点的索引信息中记录所述移动对象的标 识,具体为:在所述索引信息中建立目标标签;所述目标标签记录有:所述移动对象的标识、 所述目标节点的标签值和所述移动对象的废弃的标签的更新数目;其中,所述更新数目等 于所述当前数目加1。此时,因为之前建立的当前标签成为所述移动对象的废弃标签,增加 了 一个废弃标签,故更新数目等于所述当前数目加1。
[0089] 例如,一个标签条目是Memo(099,900,2),表示对于移动对象099来说,最新处于标 签值为900的节点位置上,移动对象099已经存在2个099对应的废弃条目。
[0090] 当所述移动对象099移动到标签值为700的节点位置上时,则在所述索引信息中建 立一个标签条目Memo (099,700,3) 〇
[0091]当需要查找移动对象099的位置时,只需要查找oid为099中Nold最大的标签,该标 签中的Slastest即为099最新处于的节点,从而快速确定移动对象099的位置。
[0092]进一步,当前已经存在的移动对象位置更新方法,对于一个确定的移动对象,一般 是先在索引结构上查找和删除旧的位置信息,之后再查找到新的位置并更新。这种更新方 法中包含着删除和插入操作,且每个操作中都有查找操作,这会导致更新过程效率低,很 慢。为了进一步加快更新过程,本申请提供方法使用了标签结构来存储移动对象所处节点 信息,标签结构可以使得更新过程中旧的节点信息不被删除,节省删除操作,这将会降低至 少一半的时间开销,因此能够大大增加更新过程的处理效率。然而,考虑到标签结构只是用 来存储移动对象所处的最新节点信息,而不是全部的节点信息,标签结构的大小必须被控 制在较小的范围,故:
[0093] 在所述索引信息中记录所述移动对象当前移动到的目标节点的节点信息之后,还 包括:
[0094] 判断所述更新数目是否大于预设阈值;
[0095] 如果所述更新数目大于预设阈值,则删除所述索引信息中的历史标签;所述历史 标签为记录的数目小于所述更新数目的标签。
[0096] 在具体实施过程中,也可以:
[0097] 判断标签结构是否大于预设阈值
[0098] 如果所述标签结构大于预设的阈值,则删除所有移动对象已存在的历史索引条 目,并将标签结构置为开始状态。
[0099] 具体来讲,为了限制标签结构的大小,将会使用废弃删除过程。废弃删除过程的特 点是有延时性和统一性。有延时是表明这个删除的过程不是马上发生的,即标签结构的大 小到达规定的界限的时候才会发生。其次,统一性表明删除的时候是将废弃条目按批次,在 同一个过程中统一删除。删除方法可以是:确定一个令牌,从松散八叉树结构的根节点开 始,依次遍历所有标签。并通过将本标签中的数目值和标签中的最新数目值对比,决定该标 签是否为需要废弃的历史标签,再决定是否删除。为了加快速度,也可以设置多个令牌,快 速遍历。
[0100] 在具体实施过程中,可以是判断所述更新数目,即废弃的条目数,是否大于预设阈 值,即在移动对象对应的历史标签数目达到预设值时,删除废弃的历史标签,也可以是判断 整个标签结构,即整个索引信息的大小,当所述标签结构大于预设大小时,删除历史标签, 在此不做限制。
[0101]优选的,所述松散八叉树结构和所述索引信息均拆分为元素,以作为数组存储,从 而使所述方法能应用于图形处理器的并行计算架构平台。
[0102] 具体来讲,由于GPU平台上特殊的计算方式,无法建立像串行平台上复杂的数据结 构,且所有的数据都必须适用于并行计算,而数组是最适合与存储计算的,所以所有涉及到 的数据包含:移动对象的属性,标签结构和松散八叉树结构等这些数据或结构体都被拆分 成单个元素并以数组的方式存储起来,便于计算和存储。
[0103] 将松散八叉树结构以数组的方式建立起来的步骤如下:
[0104] 首先,声明一个长度足够的数组,作为树的存储结构,并将根节点的序号设为1,存 储在数组的最后一个元素中;
[0105] 然后,按照八叉树结构的建立方式,依次得到松散八叉树结构上的节点,通过原子 操作将每一个新得到的节点表明一个全局性序号值,并在数组中以从后往前存的顺序存储 在数组中。如图4所示,保证树结构中子节点在数组的存储位置一定在父节点之前,子节点 的标签值一定大于父节点。
[0106] 最好,用数值保存当前最后一个得到的松散八叉树结构的节点,遍历的时候按照 下往上的结构遍历,即在数组中的位置是从最后一个得到的节点按照从前往后的顺序遍历 数组。
[0107] 具体来讲,重新设计算法执行模式使得所述方法可以在GPU平台上顺利执行。GPU 平台巨大的运算吞吐量,大大提高了所述方法的执行能力,减少了处理时间,使所述方法更 加能够满足处理大规模移动对象频繁更新场景实时处理的需求。
[0108] 为了帮助理解,下面结合图5和图6,以具体实例来说明本申请提供的方法:
[0109] 图5为本申请实施例中索引移动对象的总体流程图,如图5所示,首先通过随机函 数产生目标数量的移动对象,移动对象的参数(包含质量,位置,速度等信息)都被控制在合 理的范围内。当移动对象产生后,以仿真空间为根节点,建立松散八叉树结构划分整个仿真 空间,并把所有的移动对象插入松散八叉树结构,建立索引。接下来,仿真过程开始。根据时 间步长,移动对象按原本的速度移动,得到该时间步长内最终的坐标,其次根据相互之间作 用力计算方法,计算它们的加速度,并得到最终速度。接着,依次检查每个移动对象的索引 是否需要更新,得到最新的索引信息。在完成索引更新后,检查仿真步数是否达到要求,再 决定继续仿真。在仿真模拟结束后将数据信息输出,用于统计。
[0110] 在索引移动对象的总体流程中,更新移动对象索引信息的处理流程如图6所示:
[0111] 步骤S601,从移动对象的队列中,选取第一个移动对象0;
[0112]步骤S602,判断当前移动对象0是否运动出了当前节点,若是执行步骤S603,若否 则执行步骤S606;
[0113] 步骤S603,若当前的移动对象0是第一次出现的,则需要在Memo结构中建立属于当 前移动对象〇的记录,若不是第一次出现就直接执行步骤S604;
[0114] 步骤S604,更新当前移动对象的索引信息,建立新标签;
[0115] 步骤S605,比较标签结构和设定的标签大小阀值,若超过了,需要执行废弃条目删 除操作;
[0116] 步骤S606,判断是否检查完了所有的移动对象,若没有则指向下一个移动对象并 转入步骤S602;若检查完则进入步骤S607;
[0117] 步骤S607,更新过程结束。
[0118] 上述插入和更新过程的伪代码如下: 输入:给定的移动对象0 过程: 1.根据0的oid属性查询标签结构,即0对应的memo__0 :2.根据标签计数器得到_ 0的最新标签值s 3.if (memo-0=二N U L L) 4 f 0是已经存在的移动对象
[0119] 在标签中插入 memo_0 (oid, s.,1.) 6. End 7 Else 8.. 存在,.將标屢值设为最新_的§,废弃节点教.〇1壯1 9 End 10,在ML-Oetree上鲞询造合0插入的最新位置 I丨.将0插入ML-Octree上合适的位置 12. Return
[0120] 具体来讲,更新和插入操作的处理过程基本一致。如上述伪代码所示,初始化查询 移动对象0在标签结构中对应的标签条目。如果在标签结构中没有0对应的记录,则存在两 种可能的情况。第一情况是移动对象〇已经在松散八叉树结构上存在,则在标签结构上添加 0的记录。如果是第二种情况,则移动对象0是第一次出现在索引空间中,不需要在标签上记 录,执行插入操作,将移动对象0插入松散八叉树结构中对应的位置。
[0121] 通过对1万~10万个移动对象的仿真模拟实验表明,在索引过程中,采用松散八叉 树结构完成每个时间步长的更新效率比经典八叉树结构快12.9倍,减少了索引更新开销, 在保持索引准确性的基础上,提高了索引效率。
[0122] 基于同一发明构思,本申请还提供了实施例一中方法对应的装置,详见实施例二。
[0123] 实施例二
[0124] 在本实施例中,提供了一种三维移动对象索引装置,请参考图7,如图7所示,所述 装置包括:
[0125] 添加模块701,用于将移动对象添加到松散八叉树结构中;所述松散八叉树结构包 括N个节点;N为大于1的正整数;
[0126] 记录模块702,用于在所述移动对象所处的当前节点的索引信息中,记录所述移动 对象的标识;
[0127] 判定模块703,用于满足预设条件时,判断所述移动对象是否还处于所述当前节 占.
[0128] 更新模块704,用于如果所述移动对象还处于所述当前节点,则保持所述索引信 息;如果所述移动对象不处于所述当前节点,则查询所述移动对象当前移动到的目标节点, 并在所述目标节点的索引信息中记录所述移动对象的标识。
[0129] 本实施例中装置的工作原理,在实施例一中已经详细说明,为了说明书的简洁,在 此就不再累述了。
[0130] 上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:
[0131] 1、本申请实施例提供的方法及装置,采用松散八叉树结构作为索引结构,在使得 节点间相互重叠,节点宽度增加的基础上,将移动对象和索引节点相关联,充分考虑移动不 确定性,只有移动对象移动出当前的索引格子即节点范围,才会导致更新操作,可以避免大 量微小移动而导致的更新,减少了索引更新开销,在保持索引准确性的基础上,提高了索引 效率。
[0132] 2、本申请实施例提供的方法及装置,采用标签结构来存储索引信息,可以根据标 签记录的数目确定出所述移动对象所处的最新的节点,这样废弃的历史标签和最新的更新 标签同时存在,故不用在每次更新移动对象的位置信息时,都执行对历史信息的删除操作, 提高了处理效率;进一步,设置在移动对象对应的标签数量达到一定规模时,才统一的删除 存储的历史标签,进一步加快了更新操作的处理效率。
[0133] 3、本申请实施例提供的方法及装置,借助GPU平台上的CUDA平台,实现所述方法。 由于GPU平台巨大的运算吞吐量,大大提高了所述方法的执行能力,减少了处理时间,更加 能够满足处理大规模移动对象频繁更新场景实时处理的需求。
[0134] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造 性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优 选实施例以及落入本发明范围的所有变更和修改。
[0135] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围 之内,则本发明也意图包含这些改动和变型在内。
【主权项】
1. 一种三维移动对象索引方法,其特征在于,所述方法包括: 将移动对象添加到松散八叉树结构中;所述松散八叉树结构包括N个节点;N为大于1的 正整数; 在所述移动对象所处的当前节点的索引信息中,记录所述移动对象的标识; 满足预设条件时,判断所述移动对象是否还处于所述当前节点; 如果所述移动对象还处于所述当前节点,则保持所述索引信息; 如果所述移动对象不处于所述当前节点,则查询所述移动对象当前移动到的目标节 点,并在所述目标节点的索引信息中记录所述移动对象的标识。2. 如权利要求1所述的方法,其特征在于,所述满足预设条件时,判断所述移动对象是 否还处于所述当前节点,具体为: 从记录所述移动对象的标识时起,计时达到预设时长时,判断所述移动对象是否还处 于所述当前节点;或 接收到触发信号时,判断所述移动对象是否还处于所述当前节点。3. 如权利要求1所述的方法,其特征在于: 所述松散八叉树结构通过经典八叉树结构扩展获得;所述松散八叉树结构的节点的宽 度为W* (1+p);其中,W为所述松散八叉树结构对应的经典八叉树结构的节点宽度;p为预设 的扩展因子。4. 如权利要求3所述的方法,其特征在于,所述判断所述移动对象是否还处于所述当前 节点,具体为: 判断所述移动对象的中心是否处于所述当前节点的非扩展区;所述非扩展区为所述当 前节点与当前经典节点重合的区域;所述当前经典节点为所述经典八叉树结构中用于扩展 获得所述当前节点的节点; 当所述移动对象的中心处于所述当前节点的非扩展区时,确定所述移动对象还处于所 述当前节点。5. 如权利要求4所述的方法,其特征在于,所述判断所述移动对象的中心是否处于所述 当前节点的非扩展区之后,还包括: 当所述移动对象的中心不处于所述当前节点的非扩展区时,判断所述移动对象是否全 部处于所述当前节点; 如果所述移动对象全部处于所述当前节点,则确定所述移动对象还处于所述当前节 占 . 如果所述移动对象不是全部处于所述当前节点,则确定所述移动对象移动到目标节 点;其中,所述移动对象的中心处于所述目标节点的非扩展区。6. 如权利要求1所述的方法,其特征在于: 所述索引信息的存储结构为标签结构;所述标签结构中的标签记录有:所述移动对象 的标识、节点的标签值和所述移动对象的废弃的标签的数目。7. 如权利要求6所述的方法,其特征在于: 所述在所述移动对象所处的当前节点的索引信息中,记录所述移动对象的标识,具体 为:在所述索引信息中建立当前标签;所述当前标签记录有:所述移动对象的标识、所述当 前节点的标签值和所述移动对象的废弃的标签的当前数目; 所述在所述目标节点的索引信息中记录所述移动对象的标识,具体为:在所述索引信 息中建立目标标签;所述目标标签记录有:所述移动对象的标识、所述目标节点的标签值和 所述移动对象的废弃的标签的更新数目;其中,所述更新数目等于所述当前数目加1。8. 如权利要求7所述的方法,其特征在于,在所述索引信息中记录所述移动对象当前移 动到的目标节点的节点信息之后,还包括: 判断所述更新数目是否大于预设阈值; 如果所述更新数目大于预设阈值,则删除所述索引信息中的历史标签;所述历史标签 为记录的数目小于所述更新数目的标签。9. 如权利要求1-8任一所述的方法,其特征在于,所述松散八叉树结构和所述索引信息 均拆分为元素,以作为数组存储,从而使所述方法能应用于图形处理器的并行计算架构平 台。10. -种三维移动对象索引装置,其特征在于,所述装置包括: 添加模块,用于将移动对象添加到松散八叉树结构中;所述松散八叉树结构包括N个节 点;N为大于1的正整数; 记录模块,用于在所述移动对象所处的当前节点的索引信息中,记录所述移动对象的 标识; 判定模块,用于满足预设条件时,判断所述移动对象是否还处于所述当前节点; 更新模块,用于如果所述移动对象还处于所述当前节点,则保持所述索引信息;如果所 述移动对象不处于所述当前节点,则查询所述移动对象当前移动到的目标节点,并在所述 目标节点的索引信息中记录所述移动对象的标识。
【文档编号】G06F17/30GK105930394SQ201610235242
【公开日】2016年9月7日
【申请日】2016年4月15日
【发明人】邓泽, 韩伟, 陈云亮, 朱静, 陈小岛, 王力哲
【申请人】中国地质大学(武汉)
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1