一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

地图中体素查找方法、装置、计算机设备和存储介质与流程

2022-11-28 14:34:21 来源:中国专利 TAG:


1.本技术涉及数据处理技术领域,特别是涉及一种地图中体素查找方法、装置、计算机设备和存储介质。


背景技术:

2.激光雷达点云地图在对于自主机器人(包括但不仅限于:自动驾驶车辆、机器人、无人飞行器等)感知与运动规划的过程中具有十分重要的作用。现已有多种基于激光雷达进行生成激光点云地图的方法。在已构建的地图中,经常需要查找某个点附近的临近点或者临近区域,由于海量的点云数据不均匀且稀疏地分布在广阔的空间中,这使得查找某个点附近的临近点有点困难。
3.传统的技术方案中,在查找某个点附近的近邻点时,经常是对整块点云地图进行搜索,使得查找效率低下。


技术实现要素:

4.基于此,有必要针对上述技术问题,提供一种地图中体素查找方法、装置、计算机设备和存储介质。
5.一种地图中体素查找方法,方法包括:
6.接收终端发送的当前地图中待查询点的近邻体素的查询请求;
7.根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;
8.根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;
9.将指向信息发送至终端。
10.在其中一个实施例中,上述的地图数据还包括各当前体素的体素参数,各上述的当前体素的体素参数包括根据各当前体素中各点的点云数据确定的键值,上述的地图中体素查找方法还包括:
11.获取当前帧的点云数据,并根据点云数据将对应的点云划分为多个新增体素;
12.根据各新增体素中各点的点云数据确定各新增体素的体素参数,各新增体素的体素参数包括各新增体素的键值;
13.根据各新增体素的键值对各新增体素按照预设规则进行排序,得到第一体素序列;
14.获取当前地图中各当前体素构成的第二体素序列,第二体素序列为根据各当前体素的体素参数按照预设规则进行排序生成的序列;
15.分别从头遍历并比对第一体素序列中的各新增体素与第二体素序列中各当前体素的键值;
16.依次获取各次比对结果中键值较小的体素的体素参数,存入预设的目标内存中;
17.根据目标内存中的各体素参数,得到新的地图。
18.在其中一个实施例中,上述的地图中体素查找方法还包括:
19.对当前地图的各点所在的三维坐标空间进行划分,得到各当前体素;
20.对各当前体素进行划分,得到各高度块;
21.上述的根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,包括:
22.根据待查询点的位置信息以及地图数据中各点所属的当前体素的信息,确定待查询点所属的当前体素的信息;
23.根据待查询点所属的当前体素的信息以及地图数据中各体素所属的高度块的信息,确定待查询点所属的高度块的信息;
24.根据待查询点所属的高度块的信息以及相邻的高度块的信息,确定目标高度块的信息。
25.在其中一个实施例中,上述的地图中体素查找方法还包括:
26.从第一体素序列中获取各高度块对应的子体素序列;
27.根据各高度块对应的当前体素中各个点的坐标值,为各高度块对应的子体素序列创建对应的kdtree;
28.上述的根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息,包括:
29.根据最近邻查找算法对目标高度块对应的kdtree进行k邻域搜索,得到与待查询点对应的近邻体素的指向信息。
30.在其中一个实施例中,各上述的当前体素的体素参数还包括各体素的点数、质心以及协方差,各新增体素的体素参数还包括各新增体素的点数、质心以及协方差,上述的地图中体素查找方法还包括:
31.若比对的结果为新增体素与当前体素键值相同,则对键值相同的当前体素与新增体素的点数进行合并,得到合并体素的点数;
32.根据键值相同的当前体素与新增体素的点数以及质心进行合并,得到合并体素的质心;
33.根据键值相同的当前体素与新增体素的点数以及协方差进行合并,得到合并体素的协方差;
34.将合并体素的点数、质心以及协方差存入目标内存中。
35.在其中一个实施例中,上述的地图中体素查找方法还包括:
36.若合并体素的键值与目标内存中已有的体素的键值相同,则将合并体素的体素参数与目标内存中键值相同的体素的体素参数进行合并,并存入目标内存中。
37.在其中一个实施例中,上述的地图中体素查找方法还包括:
38.当新的地图的大小超过预设阈值时,获取新的地图中的待删除体素;
39.从新的地图中第一个体素利用预设的第一指针以及第二指针开始遍历;
40.若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历;
41.若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指
针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历;
42.循环执行若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历的步骤,以及若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历的步骤;
43.当第一指针遍历到当前地图中的最后一个体素时,删除第二指针所指向的体素之后的所有体素。
44.一种地图中体素的查找装置,包括:
45.接收模块,用于接收终端发送的当前地图中待查询点的近邻体素的查询请求;
46.确定模块,用于根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;
47.查找模块,用于根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;
48.发送模块,用于将指向信息发送至终端。
49.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
50.接收终端发送的当前地图中待查询点的近邻体素的查询请求;
51.根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;
52.根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;
53.将指向信息发送至终端。
54.一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
55.接收终端发送的当前地图中待查询点的近邻体素的查询请求;
56.根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;
57.根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;
58.将指向信息发送至终端。
59.上述地图中体素查找方法、装置、计算机设备和存储介质,通过接收终端发送的当前地图中待查询点的近邻体素的查询请求,当前地图包括多个体素;对各高度块中的体素根据最近邻查找算法进行查找,得到待查询点对应的一个或多个近邻体素的指向信息,各高度块为预先对当前地图中的各体素进行划分得到;将指向信息发送至终端。本技术可以预先对当前地图中的各体素进行划分成多个高度块,基于各高度块进行查找近邻体素,解决了传统技术中对整个点云地图进行搜索所带来的查找效率低下的问题,提高了查找效率。
附图说明
60.图1为一个实施例中地图中体素的查找方法的应用环境图;
61.图2为一个实施例中地图中体素的查找方法的流程示意图;
62.图3为一个实施例中更新当前地图的流程示意图;
63.图4为一个实施例中根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息的细化步骤流程示意图;
64.图5为一个实施例中为各高度块创建kdtree的流程示意图;
65.图6为一个实施例中将新增体素与当前体素进行合并的流程示意图;
66.图7为一个实施例中将新增体素添加到当前地图的示意图;
67.图8为一个实施例中对体素删除的流程示意图;
68.图9为一个实施例中地图中体素的查找装置的结构框图;
69.图10为一个实施例中计算机设备的内部结构图。
具体实施方式
70.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
71.请参考图1,图1为本技术一示例性实施例提供的一种地图中体素查找方法的应用环境示意图。如图1所示,该应用环境中包括服务器100以及终端101,服务器100与终端101之间可以通过网络102实现可通信的连接,以实现本技术的地图中体素查找方法。
72.服务器100用于接收终端101发送的当前地图中待查询点的近邻体素的查询请求;根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;将指向信息发送至终端101。其中,服务器100可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
73.终端101用于向服务器100发送当前地图中待查询点的近邻体素的查询请求,并接收待查询点对应的近邻体素的指向信息。终端101可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。
74.网络102用于实现终端101与服务器100之间的网络连接,具体的,网络102可以包括多种类型的有线或无线网络。
75.在一个实施例中,如图2所示,提供了一种地图中体素查找方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
76.s11、接收终端发送的当前地图中待查询点的近邻体素的查询请求。本技术中,上述的当前地图可以为点云地图。上述的待查询点可以为终端发送的当前地图中的一个点。上述的临近体素可以为待查询点附近预设范围内的体素。本技术中的体素可以为对当前地图中个点所在的三维坐标系空间进行划分得到的立方体单元或者长方体单元。进一步的,本技术中的查询请求可以携带有该待查询点的信息。
77.s12、根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定
待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息。
78.本技术中,上述的待查询点的位置信息可以为待查询点的坐标值信息。上述的地图数据可以为当前地图所包括的各点相关的数据。具体的,该地图数据可以包括当前地图中各点的坐标值、各点所属的当前体素的信息以及各当前体素所属的高度块的信息。其中,当前体素为当前地图中所包括的体素。本技术中,对地图中各点所在的三维坐标系空间进行划分得到多个当前体素,各当前体素可以为长
×

×
高的小立方体或者长方体。各当前体素中可以包括多个点。本技术中,各当前体素的长、宽以及高可以通过用户自定义来设定。本技术为了在计算机上加速,可以各当前体素的长、宽以及高使用以2为底的尺寸,如0.125m、0.25m以及0.5m等。上述的当前体素的信息可以包括当前体素的坐标值信息以及所包含点的个数等。
79.进一步的,本技术对已划分好的各当前体素进一步划分得到各高度块。各高度块中可以包括多个体素。例如,在对各当前体素进行划分时,可以对体素所在的三维空间坐标系按照z轴方向每隔预设距离进行切割得到。上述的高度块的信息可以包括高度块的位置信息、高度块的标识信息,各高度块中所包括的各当前体素的信息等。
80.本技术中,可以将待查询点的位置信息与地图数据进行匹配,根据地图数据中各点与各当前体素之间的所属关系以及各当前体素与各高度块的所属关系,得到与待查询点的位置信息匹配的目标高度块的信息。
81.s13、根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息。
82.本技术中,上述的目标高度块的信息可以包括该目标高度块中所包括的各当前体素的信息,该各当前体素的信息可以包括各当前体素中所包括的各点的坐标值以及分布信息,该分布信息可以为各当前体素中所包括的各点的协方差。上述的最临近查找算法可以为预先为目标高度块建立kdtree,通过该目标高度块的kdtree查找与待查询点对应的近邻体素。其中,kdtree(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。树中存储的是一些k维数据。在一个k维数据集合上构建一棵kdtree代表了对该k维数据集合构成的k维空间的一个划分,即树中的每个结点就对应了一个k维的超矩形区域。
83.上述的指向信息可以为指向与待查询点对应的近邻体素在对应内存中的存储位置的信息。即通过该指向信息可以获取到与待查询点对应的近邻体素存储在对应内存中的数据。
84.s14、将指向信息发送至终端。
85.本技术中,得到指向信息的一种可能的应用场景中,可以根据待查询点的临近体素的信息,确定待查询点所属的体素以及其所属体素的临近体素,进一步可以确定待查询点在地图中的位置。
86.另一种可能的应用场景中,确定待查询点所属的体素以及其所属体素的临近体素之后,可以确定待查询点所在地图的周围环境信息。例如,当要确定a物体的边缘线时,可以根据边缘上的点依次查找其临近点来确定a物体的边缘线的信息。
87.请参考图3,在其中一个实施例中,上述的地图数据还可以包括各当前体素的体素
参数,各当前体素的体素参数包括根据各当前体素中各点的点云数据确定的键值,上述的地图中体素查找方法还可以包括:
88.s31、获取当前帧的点云数据,并根据点云数据将对应的点云划分为多个新增体素;
89.s32、根据各新增体素中各点的点云数据确定各新增体素的体素参数,各新增体素的体素参数包括各新增体素的键值;
90.s33、根据各新增体素的键值对各新增体素按照预设规则进行排序,得到第一体素序列;
91.s34、获取当前地图中各当前体素构成的第二体素序列,第二体素序列为根据各当前体素的体素参数按照预设规则进行排序生成的序列;
92.s35、分别从头遍历并比对第一体素序列中的各新增体素与第二体素序列中各当前体素的键值;
93.s36、依次获取各次比对结果中键值较小的体素的体素参数,存入预设的目标内存中;
94.s37、根据目标内存中的各体素参数,得到新的地图。
95.本技术中,上述的体素参数为用于描述各当前体素的属性的数据。上述的各当前体素的键值可以为当前体素的唯一标识,是根据各当前体素的空间位置计算得到的。由于局部地图空间中的所有体素数量庞大,但是实际应用中存在数据(有用)的体素数量相对少很多,且在空间上是稀疏分布的,所以只存储需要的体素。因此需要有使用key(键值)来索引各当前体素。同理,上述的各新增体素的键值为各新增体素的唯一标识,是根据各新增体素的空间位置计算得到的。体素参数除了包括体素的键值以外还可以包括体素的其他参数,如体素的质心的位置以及体素中所包括的点的个数等。
96.上述的当前帧为新扫描的一帧点云数据,或者当前帧为待新增到当前地图中的一帧点云数据。
97.在计算各新增体素的键值时,可以将各新增体素的x、y以及z坐标移位存储在一个64位整形中作为一个数,可支持4194*4194*16km^3范围。具体的计算公式可以为如下公式:
98.index=x
index
|y
index
<<bit
x
|z
index
<<(bitsy bits
x
)
99.其中,
100.index_offset=[1<<(bits_x-1),1<<(bits_y-1),1<<(bits_z-1)]
[0101]
index即为体素的key(键值),是体素的唯一标识信息,是64位无符号整型。
[0102]
x
index
,y
index
以及z
index
为体素在三个坐标轴上单独的坐标(某一方向上第n个体素)。
[0103]
bit
x
,bity以及bitz为体素三轴坐标在键值中占的位数。
[0104]
index_offset是地图中的原点对应的key,是最“中间”的key。
[0105]
上述的根据各新增体素的键值对各新增体素按照预设规则进行排序,得到第一体素序列,可以为:根据各新增体素的键值对各新增体素按照键值由小到大的顺序进行排序,得到第一体素序列。
[0106]
上述的第二体素序列为根据各当前体素的体素参数按照键值由小到大的顺序进行排序生成的序列。
[0107]
上述的分别从头遍历并比对第一体素序列中的各新增体素与第二体素序列中各当前体素的键值;依次获取各次比对结果中键值较小的体素的体素参数,存入预设的目标内存中,可以包括:
[0108]
比对第一体素序列中的当前体素与第二体素序列中的当前体素,获取当前轮次中键值更小的目标体素的体素参数存入目标内存中;
[0109]
获取目标体素所在体素序列的下一个体素,作为该序列中的当前体素;
[0110]
将该序列的当前体素与另一个序列的当前体素进行比对,获取当前轮次中键值更小的目标体素存入目标内存中;
[0111]
获取当前轮次中键值更小的目标体素所在的体素序列的下一个体素,作为该序列中的当前体素,返回上述的将该序列的当前体素与另一个序列的当前体素进行比对,获取当前轮次中键值更小的目标体素存入目标内存中的步骤,直至上述的获取目标体素所在体素序列的下一个体素,为该体素序列中的最后一个体素。
[0112]
本技术中,上述的当前地图对应的地图数据可以存储于预设的当前内存中,上述的目标内存可以为与当前内存大小相同的孪生内存空间,用于地图的更新和维护。即每次有新的扫描帧即新增体素需要加入当前地图时,需要通过该目标内存进行体素序列的合并,将两个序列合并为一个序列存储于目标内存中,根据该目标内存,对应生成新的地图。本技术可以通过该实施方式实现地图的更新与维护。同时,由于体素在内存空间中是有序排列的,这使得地图在更新时可以提高体素加入的效率,提升地图的更新与维护的效率。
[0113]
在其中一个实施例中,上述的地图中体素查找方法还可以包括:
[0114]
对当前地图的各点所在的三维坐标空间进行划分,得到各当前体素;
[0115]
对各当前体素进行划分,得到各高度块;
[0116]
请参考图4,上述的根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,可以包括:
[0117]
s41、根据待查询点的位置信息以及地图数据中各点所属的当前体素的信息,确定待查询点所属的当前体素的信息;
[0118]
s42、根据待查询点所属的当前体素的信息以及地图数据中各体素所属的高度块的信息,确定待查询点所属的高度块的信息;
[0119]
s43、根据待查询点所属的高度块的信息以及相邻的高度块的信息,确定目标高度块的信息。
[0120]
本技术中,上述的地图数据中包括各高度块的信息、各高度块中所包括的各当前体素的信息以及各当前体素中所包括的各点的信息。其中,各高度块的信息可以包括各高度块的标识信息以及各高度块所在的位置信息等。各当前体素的信息可以包括各当前体素的体素参数,该体素参数可以包括各当前体素的键值、各当前体素中点的分布信息以及位置信息等。各点的信息可以包括各点的位置信息等。本技术可以根据待查询点的位置信息与各当前体素中各点的分布信息以及位置信息进行匹配以确定待查询点所属的当前体素的信息。
[0121]
进一步的,根据待查询点所属的体素的信息与地图数据中各高度块所包括的各当前体素的信息进行匹配,以确定待查询点所属的高度块的信息。上述的目标高度块可以为待查询点所属的高度块和/或待查询点所属的高度块相邻的高度块。上述的目标高度块的
信息可以为目标高度块的标识信息以及位置信息等。
[0122]
本技术通过该实施方式可以对当前地图中的各当前体素进行划分得到各高度块,从各高度块中确定目标高度块,从目标高度块中进行体素的搜索,避免了从整个点云地图来搜索待查询点的临近体素,提高搜索效率。
[0123]
请参考图5,在其中一个实施例中,上述的地图中体素查找方法还可以包括:
[0124]
s51、从第一体素序列中获取各高度块对应的子体素序列;
[0125]
s52、根据各高度块对应的当前体素中各个点的坐标值,为各高度块对应的子体素序列创建对应的kdtree;
[0126]
上述的根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息,包括:
[0127]
根据最近邻查找算法对目标高度块对应的kdtree进行k邻域搜索,得到与待查询点对应的近邻体素的指向信息。
[0128]
本技术中,由于当前地图中各当前体素在内存中是按照键值有序排序的序列,各高度块是根据各当前体素的位置信息进行切分的,故得到的各高度块中各当前体素也是有序排序的。
[0129]
本技术中划分得到各高度块之后,为各高度块创建对应的kdtree。上述的根据最近邻查找算法对目标高度块对应的kdtree进行k邻域搜索,得到与待查询点对应的近邻体素的指向信息步骤中,具体的k邻域搜索可以包括:
[0130]
(1)将查询数据q从根结点开始,按照q与各个结点的比较结果向下访问kd-tree,直至达到叶子结点。
[0131]
其中q与结点的比较指的是将q对应于结点中的k维度上的值与m进行比较,若q(k)《m,则访问左子树,否则访问右子树。达到叶子结点时,计算q与叶子结点上保存的数据之间的距离,记录下最小距离对应的数据点,记为当前“最近邻点”pcur和最小距离dcur。
[0132]
(2)进行回溯操作,该操作是为了找到离q更近的“最近邻点”。即判断未被访问过的分支里是否还有离q更近的点,它们之间的距离小于dcur。
[0133]
如果q与其父结点下的未被访问过的分支之间的距离小于dcur,则认为该分支中存在离p更近的数据,进入该结点,进行(1)步骤一样的查找过程,如果找到更近的数据点,则更新为当前的“最近邻点”pcur,并更新dcur。
[0134]
如果q与其父结点下的未被访问过的分支之间的距离大于dcur,则说明该分支内不存在与q更近的点。
[0135]
回溯的判断过程是从下往上进行的,直到回溯到根结点时已经不存在与p更近的分支为止。
[0136]
本技术通过该实施方式可以将整个当前地图划分为多个高度块,为各高度块创建对应的kdtree,在确定了待查询点对应的目标高度块之后,只需要在目标高度块中利用其kdtree进行k临域搜索,解决了传统技术中对整块点云地图构建kdtree所导致的查找效率低下的问题,提高了查找速度。
[0137]
请参考图6,在其中一个实施例中,各上述的当前体素的体素参数还可以包括各体素的点数、质心以及协方差,各上述的新增体素的体素参数还包括各新增体素的点数、质心以及协方差,上述的地图中体素查找方法还可以包括:
[0138]
s61、若比对的结果为新增体素与当前体素键值相同,则对键值相同的当前体素与新增体素的点数进行合并,得到合并体素的点数;
[0139]
s62、根据键值相同的当前体素与新增体素的点数以及质心进行合并,得到合并体素的质心;
[0140]
s63、根据键值相同的当前体素与新增体素的点数以及协方差进行合并,得到合并体素的协方差;
[0141]
s64、将合并体素的点数、质心以及协方差存入目标内存中。
[0142]
本技术中,上述的体素参数可以支持用户自定义。具体的,用户可以预先设定各当前体素的题述参数中所包括的数据。本技术中,预先设定各当前体素的体素参数中可以包括键值、点数、质心的位置信息以及协方差。该协方差为用于描述各当前体素中各点的分布情况的矩阵。
[0143]
同样的,上述的新增体素的体素参数也包括键值、点数、质心的位置信息以及协方差。本技术中可以根据实际需求对体素参数进行设定,例如,也可以设定为包括常用的几何特征点(如点、线以及面)以及语义特征(如植被、可行驶区域以及建筑等)。本技术的体素参数是存储于预先设定的内存空间的,例如上述的目标内存以及上述的当前内存。其中,当前内存用于存储当前地图对应的各当前体素对应的体素参数。目标内存用于存储当前地图在更新时,上述的第一体素序列与上述的第二体素序列的合并序列中各体素的体素参数。
[0144]
具体的,假设键值相同的当前体素与新增体素分别为体素a以及体素b,得到的合并体素为体素c,且体素a中的点数为m,体素b中的点数为n,体素c中的点数为q,则上述的若比对的结果为新增体素与当前体素键值相同,则对键值相同的当前体素与新增体素的点数进行合并,得到合并体素的点数,具体的合并公式如下:
[0145]
q=m n
[0146]
上述的根据键值相同的当前体素与新增体素的点数以及质心进行合并,得到合并体素的质心,具体的合并公式如下:
[0147][0148]
其中,p
new
为合并体素c的质心的位置信息。n以及m分别为体素a的点数以及体素b的点数,p
old
为旧体素a以及b的质心,p
feature
为合并体素c体素的质心。
[0149]
上述的根据键值相同的当前体素与新增体素的点数以及协方差进行合并,得到合并体素的协方差,具体的合并公式如下:
[0150][0151]
其中,cov
new
为合并体素c的协方差。n以及m分别为体素a的点数以及体素b的点数,p
old
为旧体素a以及b的质心,p
feature
为合并体素c体素的质心。cov
old
为旧体素a以及b的协方差,cov
feature
为合并体素c的协方差。
[0152]
请参考图7,图7为一种实施例中,将新增体素添加到当前地图的示意图。图7中包括第二体素序列71、第二体素序列中的当前体素711、各当前体素的键值712、第一体素序列72以及第一体素序列添加至第二体素序列之后得到的体素序列73。其中,第一体素序列72中包括键值分别为1、2、6、7、11、11以及12的新增体素。第二体素序列71中包括键值分别为
1、2、3、4、5、6、7、8、9以及10的各当前体素。将第一体素序列中各新增体素与第二体素序列中各当前体素进行比对时,可以包括如下步骤:
[0153]
获取第二体素序列71中的第一个体素的键值1,以及第一体素序列72中的第一个体素的键值1,进行比对,发现键值相同,则将该两个体素的体素参数进行合并,将合并后的体素参数存入目标内存;
[0154]
获取第二体素序列71中的第二个体素的键值2,以及第一体素序列72中的第二个体素的键值2,进行比对,发现键值相同,则将该两个体素的体素参数进行合并,将合并后的体素参数存入目标内存;
[0155]
获取第二体素序列71中的第三个体素的键值3,以及第一体素序列72中的第三个体素的键值6,进行比对,获取键值较小的3对应的体素,存入目标内存中;
[0156]
获取第二体素序列71中的第四个体素的键值4与第一体素序列72中的第三个体素的键值6进行比对,获取键值较小的4对应的体素,存入目标内存中;
[0157]
获取第二体素序列71中的第五个体素的键值5与第一体素序列72中的第三个体素的键值6进行比对,获取键值较小的5对应的体素,存入目标内存中;
[0158]
以此类推,每次在键值较小的那个体素序列中获取下一个体素的键值与另一个体素序列的当前体素进行比对,直至比对到最后一个体素,流程终止。
[0159]
最后得到新增后的体素序列73,其具体的键值序列为1、2、3、4、5、6、7、8、9、10、11以及12。
[0160]
本技术中的体素参数支持用户自定义,本技术中自定义的体素参数中包括点数、质心的位置信息以及协方差。本技术通过将体素参数设定为协方差,将体素的协方差存入对应的内存空间,无需存储体素中各点的坐标值,可以节省内存的存储空间。另外,本技术中提供了各种体素参数的合并方案,提供对体素参数的合并,实现将体素新增到当前地图中,实现了地图的实时更新。
[0161]
在其中一个实施例中,上述的地图中体素查找方法还可以包括:
[0162]
当需要更换地图坐标系的情况下,需要同时更新地图坐标系以及更新质心和协方差。
[0163]
具体的,当坐标系原点更换,需要尽可能保证局部地图坐标原点接近0,此时需要更换坐标系。更换坐标系的具体公式如下:
[0164][0165]
为地图的旧坐标到新坐标的变换,为新地图到世界坐标系的变换,为旧地图到世界坐标系的变换。
[0166]
在更换坐标系的情况下,对应的体素的质心的合并具体公式可以如下:
[0167][0168]
其中,为地图的旧坐标到新坐标的变换,p
new
为合并体素的质心的位置信息,p
old
为合并前旧的体素的质心的位置信息。
[0169]
在更换坐标系的情况下,对应的体素的协方差的合并具体公式可以如下:
[0170]
[0171]
其中,和为3x3的旋转矩阵。cov
new
为合并体素的协方差,cov
old
为合并前的旧体素的协方差。
[0172]
本技术针对坐标系需要更换的情况下,也对应提供了质心以及协方差的合并方案,使得方案适用范围更广,更加灵活。
[0173]
在其中一个实施例中,上述的地图中体素查找方法还可以包括:
[0174]
若合并体素的键值与目标内存中已有的体素的键值相同,则将合并体素的体素参数与目标内存中键值相同的体素的体素参数进行合并,并存入目标内存中。
[0175]
本技术中,由于在进行第一体素序列与第二体素序列的比对时,是依次获取各次的比对结果存入目标内存中的,各次的比对结果为键值较小的那个体素的体素参数,因此,若当前比对的结果需要存入目标内存时,也需要与目标内存中已有的体素进行比对,若发现键值相同,也需要进行合并后再存储。具体的合并逻辑与上述的质心、点数以及协方差的合并逻辑相同。
[0176]
在其中一个实施例中,上述的地图中体素查找方法还可以包括:
[0177]
当新的地图的大小超过预设阈值时,获取新的地图中的待删除体素;
[0178]
从新的地图中第一个体素利用预设的第一指针以及第二指针开始遍历;
[0179]
若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历;
[0180]
若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历;
[0181]
循环执行若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历的步骤,以及若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历的步骤;
[0182]
当第一指针遍历到当前地图中的最后一个体素时,删除第二指针所指向的体素之后的所有体素。
[0183]
请参考图8,图8为一种实施例中,对体素删除的流程示意图。在图8中,上述的地图中体素查找方法还可以包括:
[0184]
s81、当新的地图的大小超过预设阈值时,获取新的地图中的待删除体素;
[0185]
s82、从新的地图中第一个体素利用预设的第一指针以及第二指针开始遍历;
[0186]
s83、判断第一指针指向的体素是否为待删除体素;
[0187]
s84、若是,则第二指针不动,第一指针向后遍历;
[0188]
s85、否则,将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历;
[0189]
s86、判断第一指针指向的体素是否为最后一个体素;
[0190]
s87、若是,流程终止,否则,返回上述的判断第一指针指向的体素是否为待删除体素步骤。
[0191]
实际应用中,需要实时维护局部地图的大小,所以会根据车辆位置的变化,不断删除一定范围以外的地图数据,这就涉及到体素的删除。
[0192]
在进行体素删除时,可以根据给定的待删除体素(或者给定判断体素是否需要被删除的方法),使用双指针a,b,从新的地图对应的体素序列的原地开始遍历。具体的,a以及b指针一开始均指向新的地图对应的体素序列的第一个体素,具体方法可以如下:
[0193]
步骤1,若b指向的体素为待删除体素,则a不动,b ;
[0194]
步骤2,若b指向的体素为待保留体素,则将b指向的体素移动到a指向的位置,以替换a的体素(若a==b则不需要腾挪),a ,b ;
[0195]
步骤3,重复上述的步骤1以及步骤2,直到b遍历到新的地图对应的体素序列的最后一个体素;
[0196]
步骤4,删除a之后的所有体素。
[0197]
本技术中,可以通过多层框架来实现。具体的,提供了底层的提速合并逻辑支持(框架层)孪生内存、中层的用户定义层以及上层的地图管理层,用于查找临近体素。
[0198]
其中,框架层提供了上述存储结构的支持,底层体素合并的逻辑定义,会调用用户定义的行为。
[0199]
中层,用于定义体素参数的中所包括的具体数据,如带协方差的特征点体素。同时提供自定义的合并方法,即上述的点数、质心以及协方差的合并方案。
[0200]
上层,用于提供对外接口,如最近邻查找,地图转换(更换坐标系)等。
[0201]
在一个实施例中,如图9所示,提供了一种地图中体素的查找装置,包括:接收模块11、确定模块12、查找模块13以及发送模块14,其中:
[0202]
接收模块11,用于接收终端发送的当前地图中待查询点的近邻体素的查询请求;
[0203]
确定模块12,用于根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;
[0204]
查找模块13,用于根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;
[0205]
发送模块14,用于将指向信息发送至终端。
[0206]
在其中一个实施例中,上述的地图数据还包括各当前体素的体素参数,各上述的当前体素的体素参数包括根据各当前体素中各点的点云数据确定的键值,上述的地图中体素的查找装置还可以包括新增模块(图未示),该新增模块可以获取当前帧的点云数据,并根据点云数据将对应的点云划分为多个新增体素,根据各新增体素中各点的点云数据确定各新增体素的体素参数,各新增体素的体素参数包括各新增体素的键值,根据各新增体素的键值对各新增体素按照预设规则进行排序,得到第一体素序列,获取当前地图中各当前体素构成的第二体素序列,第二体素序列为根据各当前体素的体素参数按照预设规则进行排序生成的序列,分别从头遍历并比对第一体素序列中的各新增体素与第二体素序列中各当前体素的键值,依次获取各次比对结果中键值较小的体素的体素参数,存入预设的目标内存中,根据目标内存中的各体素参数,得到新的地图。
[0207]
在其中一个实施例中,上述的还地图中体素的查找装置还可以包括划分模块(图未示),该划分模块可以对当前地图的各点所在的三维坐标空间进行划分,得到各当前体素,对各当前体素进行划分,得到各高度块,上述的确定模块12可以根据待查询点的位置信息以及地图数据中各点所属的当前体素的信息,确定待查询点所属的当前体素的信息,根据待查询点所属的当前体素的信息以及地图数据中各体素所属的高度块的信息,确定待查询点所属的高度块的信息,根据待查询点所属的高度块的信息以及相邻的高度块的信息,确定目标高度块的信息。
[0208]
在其中一个实施例中,上述的还地图中体素的查找装置还可以包括创建模块(图未示),该创建模块可以从第一体素序列中获取各高度块对应的子体素序列,根据各高度块对应的当前体素中各个点的坐标值,为各高度块对应的子体素序列创建对应的kdtree,上述的查找模块可以根据最近邻查找算法对目标高度块对应的kdtree进行k邻域搜索,得到与待查询点对应的近邻体素的指向信息。
[0209]
在其中一个实施例中,各上述的当前体素的体素参数还包括各体素的点数、质心以及协方差,各上述的新增体素的体素参数还包括各新增体素的点数、质心以及协方差,上述的还地图中体素的查找装置还可以包括第一合并模块(图未示),该第一合并模块可以若比对的结果为新增体素与当前体素键值相同,则对键值相同的当前体素与新增体素的点数进行合并,得到合并体素的点数,根据键值相同的当前体素与新增体素的点数以及质心进行合并,得到合并体素的质心,根据键值相同的当前体素与新增体素的点数以及协方差进行合并,得到合并体素的协方差,将合并体素的点数、质心以及协方差存入目标内存中。
[0210]
在其中一个实施例中,上述的还地图中体素的查找装置还可以包括第二合并模块(图未示),该第二合并模块可以若合并体素的键值与目标内存中已有的体素的键值相同,则将合并体素的体素参数与目标内存中键值相同的体素的体素参数进行合并,并存入目标内存中。
[0211]
在其中一个实施例中,上述的还地图中体素的查找装置还可以包括删除模块(图未示),该删除模块可以当新的地图的大小超过预设阈值时,获取新的地图中的待删除体素,从新的地图中第一个体素利用预设的第一指针以及第二指针开始遍历,若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历,若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历,循环执行若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历的步骤,以及若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历的步骤,当第一指针遍历到当前地图中的最后一个体素时,删除第二指针所指向的体素之后的所有体素。
[0212]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储智能家居设备的运行数据等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现编译虚拟机的资源分配方法。
[0213]
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:接收终端发送的当前地图中待查询点的近邻体素的查询请求;根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;根据目标高度
块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;将指向信息发送至终端。
[0214]
在一个实施例中,上述的地图数据还包括各当前体素的体素参数,各当前体素的体素参数包括根据各当前体素中各点的点云数据确定的键值,处理器执行计算机程序时具体还实现以下步骤:
[0215]
获取当前帧的点云数据,并根据点云数据将对应的点云划分为多个新增体素;
[0216]
根据各新增体素中各点的点云数据确定各新增体素的体素参数,各新增体素的体素参数包括各新增体素的键值;
[0217]
根据各新增体素的键值对各新增体素按照预设规则进行排序,得到第一体素序列;
[0218]
获取当前地图中各当前体素构成的第二体素序列,第二体素序列为根据各当前体素的体素参数按照预设规则进行排序生成的序列;
[0219]
分别从头遍历并比对第一体素序列中的各新增体素与第二体素序列中各当前体素的键值;
[0220]
依次获取各次比对结果中键值较小的体素的体素参数,存入预设的目标内存中;
[0221]
根据目标内存中的各体素参数,得到新的地图。
[0222]
在一个实施例中,处理器执行计算机程序时具体还实现以下步骤:
[0223]
对当前地图的各点所在的三维坐标空间进行划分,得到各当前体素;
[0224]
对各当前体素进行划分,得到各高度块;
[0225]
处理器执行计算机程序实现上述的根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息步骤时,具体实现以下步骤:
[0226]
根据待查询点的位置信息以及地图数据中各点所属的当前体素的信息,确定待查询点所属的当前体素的信息;
[0227]
根据待查询点所属的当前体素的信息以及地图数据中各体素所属的高度块的信息,确定待查询点所属的高度块的信息;
[0228]
根据待查询点所属的高度块的信息以及相邻的高度块的信息,确定目标高度块的信息。
[0229]
在一个实施例中,处理器执行计算机程序时具体还实现以下步骤:
[0230]
从第一体素序列中获取各高度块对应的子体素序列;
[0231]
根据各高度块对应的当前体素中各个点的坐标值,为各高度块对应的子体素序列创建对应的kdtree;
[0232]
处理器执行计算机程序实现上述的根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息步骤时,具体实现以下步骤:
[0233]
根据最近邻查找算法对目标高度块对应的kdtree进行k邻域搜索,得到与待查询点对应的近邻体素的指向信息。
[0234]
在一个实施例中,各上述的当前体素的体素参数还包括各体素的点数、质心以及协方差,各上述的新增体素的体素参数还包括各新增体素的点数、质心以及协方差,处理器执行计算机程序时具体还实现以下步骤:
[0235]
若比对的结果为新增体素与当前体素键值相同,则对键值相同的当前体素与新增体素的点数进行合并,得到合并体素的点数;
[0236]
根据键值相同的当前体素与新增体素的点数以及质心进行合并,得到合并体素的质心;
[0237]
根据键值相同的当前体素与新增体素的点数以及协方差进行合并,得到合并体素的协方差;
[0238]
将合并体素的点数、质心以及协方差存入目标内存中。
[0239]
在一个实施例中,处理器执行计算机程序时具体还实现以下步骤:
[0240]
若合并体素的键值与目标内存中已有的体素的键值相同,则将合并体素的体素参数与目标内存中键值相同的体素的体素参数进行合并,并存入目标内存中。
[0241]
在一个实施例中,处理器执行计算机程序时具体还实现以下步骤:
[0242]
当新的地图的大小超过预设阈值时,获取新的地图中的待删除体素;
[0243]
从新的地图中第一个体素利用预设的第一指针以及第二指针开始遍历;
[0244]
若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历;
[0245]
若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历;
[0246]
循环执行若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历的步骤,以及若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历的步骤;
[0247]
当第一指针遍历到当前地图中的最后一个体素时,删除第二指针所指向的体素之后的所有体素。
[0248]
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:接收终端发送的当前地图中待查询点的近邻体素的查询请求;根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息,地图数据包括当前地图中各点所属的当前体素的信息以及各当前体素所属的高度块的信息;根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息;将指向信息发送至终端。
[0249]
在一个实施例中,上述的地图数据还包括各当前体素的体素参数,各当前体素的体素参数包括根据各当前体素中各点的点云数据确定的键值,计算机程序被处理器执行时具体还实现以下步骤:
[0250]
获取当前帧的点云数据,并根据点云数据将对应的点云划分为多个新增体素;
[0251]
根据各新增体素中各点的点云数据确定各新增体素的体素参数,各新增体素的体素参数包括各新增体素的键值;
[0252]
根据各新增体素的键值对各新增体素按照预设规则进行排序,得到第一体素序列;
[0253]
获取当前地图中各当前体素构成的第二体素序列,第二体素序列为根据各当前体素的体素参数按照预设规则进行排序生成的序列;
[0254]
分别从头遍历并比对第一体素序列中的各新增体素与第二体素序列中各当前体素的键值;
[0255]
依次获取各次比对结果中键值较小的体素的体素参数,存入预设的目标内存中;
[0256]
根据目标内存中的各体素参数,得到新的地图。
[0257]
在一个实施例中,计算机程序被处理器执行时具体还实现以下步骤:
[0258]
对当前地图的各点所在的三维坐标空间进行划分,得到各当前体素;
[0259]
对各当前体素进行划分,得到各高度块;
[0260]
计算机程序被处理器执行实现上述的根据查询请求中的待查询点的位置信息以及当前地图对应的地图数据,确定待查询点对应的目标高度块的信息步骤时,具体实现以下步骤:
[0261]
根据待查询点的位置信息以及地图数据中各点所属的当前体素的信息,确定待查询点所属的当前体素的信息;
[0262]
根据待查询点所属的当前体素的信息以及地图数据中各体素所属的高度块的信息,确定待查询点所属的高度块的信息;
[0263]
根据待查询点所属的高度块的信息以及相邻的高度块的信息,确定目标高度块的信息。
[0264]
在一个实施例中,计算机程序被处理器执行时具体还实现以下步骤:
[0265]
从第一体素序列中获取各高度块对应的子体素序列;
[0266]
根据各高度块对应的当前体素中各个点的坐标值,为各高度块对应的子体素序列创建对应的kdtree;
[0267]
计算机程序被处理器执行实现上述的根据目标高度块的信息,采用最近邻查找算法确定与待查询点对应的近邻体素的指向信息步骤时,具体实现以下步骤:
[0268]
根据最近邻查找算法对目标高度块对应的kdtree进行k邻域搜索,得到与待查询点对应的近邻体素的指向信息。
[0269]
在一个实施例中,各上述的当前体素的体素参数还包括各体素的点数、质心以及协方差,各上述的新增体素的体素参数还包括各新增体素的点数、质心以及协方差,计算机程序被处理器执行时具体还实现以下步骤:
[0270]
若比对的结果为新增体素与当前体素键值相同,则对键值相同的当前体素与新增体素的点数进行合并,得到合并体素的点数;
[0271]
根据键值相同的当前体素与新增体素的点数以及质心进行合并,得到合并体素的质心;
[0272]
根据键值相同的当前体素与新增体素的点数以及协方差进行合并,得到合并体素的协方差;
[0273]
将合并体素的点数、质心以及协方差存入目标内存中。
[0274]
在一个实施例中,计算机程序被处理器执行时具体还实现以下步骤:
[0275]
若合并体素的键值与目标内存中已有的体素的键值相同,则将合并体素的体素参数与目标内存中键值相同的体素的体素参数进行合并,并存入目标内存中。
[0276]
在一个实施例中,计算机程序被处理器执行时具体还实现以下步骤:
[0277]
当新的地图的大小超过预设阈值时,获取新的地图中的待删除体素;
[0278]
从新的地图中第一个体素利用预设的第一指针以及第二指针开始遍历;
[0279]
若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历;
[0280]
若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历;
[0281]
循环执行若第一指针指向的体素为待删除体素时,则第二指针不动,第一指针向后遍历的步骤,以及若第一指针指向的体素为待保留体素时,则将第一指针指向的体素移动到第二指针指向的位置,以替换第二指针原来指向的体素,第一指针向后遍历的步骤;
[0282]
当第一指针遍历到当前地图中的最后一个体素时,删除第二指针所指向的体素之后的所有体素。
[0283]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0284]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0285]
以上实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献