一种三维地图显示方法及移动终端
技术领域
本申请涉及三维图像领域,尤其涉及一种三维地图显示方法及移动终端。
背景技术
目前视觉即时定位与地图构建(Vision Simultaneous localization andmapping,VSLAM)在机器人领域、智能驾驶领域应用越来越广泛,基于视觉的建图技术也越来越成熟。其中,开源库OctoMap的使用广泛。OctoMap库实现了一种填充3D栅格的构图方式,并提供了相应的数据结构和构图算法,可根据八叉树的数据结构解析三维地图。
目前,在移动终端上尚未对三维概率地图进行可视化显示。而移动终端(比如智能手机)携带方便,功能多样,在人们生活中广泛使用,人们迫切需要基于移动终端的能够实时接收解析并查看三维概率地图的方法。
发明内容
本申请实施例提供了三维地图显示方法及移动终端,实现了实时接收解析并显示三维概率地图的方法。
第一方面,本申请实施例提供了一种三维地图显示方法,包括:
接收服务器发送的三维点云概率地图数据的二进制数据流,将二进制数据流每8字节为一数据段进行划分,得到N个数据段,其中N为大于1的整数;
根据递归算法,利用八叉树的数据结构,依次遍历N个数据段,根据每个数据段中的八个数据单元信息解析每个数据段的节点信息;
根据三维点云概率地图的显示级别,获取与显示级别对应的八叉树节点信息;
根据获取到的节点信息在用户界面显示三维地图。
可选的,根据每个数据段中的八个数据单元信息解析每个数据段的节点信息,具体包括:
获取八叉树中每层第一节点的八个数据单元信息,根据八个数据单元信息中的有效比特位得到第一节点的颜色信息及第一节点的子节点信息;
若第一节点的子节点信息指示第一节点存在子节点,则获取第一节点下一层子节点的信息;若第一节点的子节点信息指示第一节点不存在子节点,则获取第一节点所在层数的第二节点信息。
可选的,节点信息,包括:
节点的层数、节点的三维坐标、节点的颜色信息以及节点下层节点的信息。
可选的,根据三维点云概率地图的显示级别,获取与显示级别对应的八叉树节点信息之前,还包括:
根据用户的输入,确定三维点云概率地图的显示级别。
第二方面,本申请实施例提供的一种移动终端,包括:
接收模块,用于接收服务器发送的三维点云概率地图数据的二进制数据流;
处理模块,用于将二进制数据流每8字节为一数据段进行划分,得到N个数据段,其中N为大于1的整数;以及根据递归算法,利用八叉树的数据结构,依次遍历N个数据段,根据每个数据段中的八个数据单元信息解析每个数据段的节点信息;以及根据三维点云概率地图的显示级别,获取与显示级别对应的八叉树节点信息;
显示模块,用于根据获取到的节点信息在用户界面显示三维地图。
可选的,处理模块,具体用于:
获取八叉树中每层第一节点的八个数据单元信息,根据八个数据单元信息中的有效比特位得到第一节点的颜色信息及第一节点的子节点信息;
若第一节点的子节点信息指示第一节点存在子节点,则获取第一节点下一层子节点的信息;若第一节点的子节点信息指示第一节点不存在子节点,则获取第一节点所在层数的第二节点信息。
可选的,节点信息,包括:
节点的层数、节点的三维坐标、节点的颜色信息以及节点下层节点的信息。
可选的,处理模块,还用于:
根据三维点云概率地图的显示级别,获取与显示级别对应的八叉树节点信息之前,根据用户的输入,确定三维点云概率地图的显示级别。
第三方面,本申请实施例提供一种移动终端,包括:处理器和存储器;
存储器,与处理器连接,配置为存储计算机指令;处理器,与存储器连接,配置为执行计算机指令以使得移动终端执行第一方面中任一项的方法。
第四方面,本申请实施例提供了一种计算机存储介质,计算机存储介质中存储有计算机程序指令,当指令在计算机上运行时,使得计算机执行上述第一方面中任一项的方法。
本申请上述实施例中,应用于移动终端的三维地图显示方法,可通过网络实时接收解析基于八叉树格式的三维概率地图并在移动终端进行同步显示。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示例性示出了本申请实施例提供的三维地图显示的应用场景架构图;
图2示例性示出了本申请实施例提供的八叉树结构图;
图3示例性示出了本申请实施例提供的三维地图显示方法的流程图;
图4示例性示出了本申请实施例提供的八叉树中每个节点的二进制比特流图;
图5示例性示出了本申请实施例提供的三维地图解析方法的原理图;
图6示例性示出了本申请实施例提供的一种移动终端结构图;
图7示例性示出了本申请实施例提供的移动终端100的三维地图显示效果图。
具体实施方式
本申请实施例提供一种三维地图显示方法及移动终端,移动终端可通过网络实时接收解析基于八叉树格式的三维概率地图并在移动终端进行三维地图的同步显示。
为使本申请示例性实施例的目的、技术方案和优点更加清楚,下面将结合本申请示例性实施例中的附图,对本申请示例性实施例中的技术方案进行清楚、完整地描述。
图1示例性示出了本申请实施例提供的三维地图显示的应用场景架构图。如图1所示,包括:终端100、网络200、服务器300。
其中,终端100可为安卓平台的智能手机、平板电脑、车载终端、可穿戴设备等,可在显示屏中实时显示三维地图,还可以允许用户通过触屏操作选择三维地图的显示效果。
网络200可为因特网、局域网、互联网等,用于连接终端100与服务器300的间的数据通信。
服务器300可以为常见的web服务器、企业级服务器等,用于实时发送的三维点云概率地图数据的二进制数据流。
为清楚描述本申请的实施例,下面将对八叉树进行详细的描述。图2示例性示出了本申请实施例提供的八叉树结构图。
如图2所示,将三维空间建模分割成许多的小方块,如果将每个小方块的每个面切成两片,那么这个小方块就会变成同样大小的八个小方块。将该步骤不断重复,直到最后的方块大小达到建模的最高精度。在该过程中,将“从一个节点展开成八个子节点”,那么,整个空间从最大空间细分到最小空间的过程,就是一棵八叉树。整个大方块可以看成是根节点,而最小的块可以看作是“叶子节点”。于是在八叉树中,当由上一层节点往下走一层时,地图的体积就缩小为原来的八倍。
举例来说,如果叶子节点的方块大小为1平方厘米,那么当限制八叉树为10层时,总共能建模的体积大约为8的10次幂立方厘米,也就是1073平方米。由于体积与深度呈指数关系,所以当用更大的深度时,建模的体积会增长的非常快。
在八叉树中,节点中存储了该节点是否被占据的信息。当某个方块的所有子节点都被占据或都不被占据时,就没必要展开这个节点。比如,一开始地图为空白时,就只需要一个根节点,而不需要完整的树。当向地图中添加信息时,由于实际的物体经常连在一起,空白的地方也会连在一起,所以大多数八叉树节点都无须展开到叶子层面。
以八叉树的形式存储的不同分辨率的八叉树地图,是很多个小方块组成的,当分辨率较高时,方块很小;分辨率较低时,方块很大。分辨率越大说明解析层数越大。
在八叉树中,节点的以RGB格式存储颜色信息。
图3示例性示出了本申请实施例提供的三维地图显示方法的流程图,该流程包括以下几步:
S301:移动终端接收服务器发送的三维点云概率地图数据的二进制数据流。
该步骤中,服务器可采用机器人操作系统(Robot Operating System,ROS)中的基于OctoMap的功能包创建的三维点云概率地图以Topic的形式发送给移动终端。移动终端通过应用程序订阅三维点云概率地图数据,得到三维点云概率地图数据的二进制数据流。
S302:移动终端将接收到的二进制数据流每8字节为一数据段进行划分,得到N个数据段,其中N为大于1的整数。
S303:移动终端根据递归算法,利用八叉树的数据结构,依次遍历N个数据段,根据每个数据段中的八个数据单元信息解析每个数据段的节点信息。
该步骤中,根据每个数据段中的八个数据单元信息解析每个数据段的节点信息,具体包括:
获取八叉树中每层第一节点的八个数据单元信息,根据八个数据单元信息中的有效比特位得到第一节点的颜色信息及第一节点的子节点信息;
若第一节点的子节点信息指示第一节点存在子节点,则获取第一节点下一层子节点的信息;若第一节点的子节点信息指示第一节点不存在子节点,则获取第一节点所在层数的第二节点信息。
S304:移动终端根据三维点云概率地图的显示级别,获取与显示级别对应的八叉树节点信息。
该步骤中,八叉树的节点信息包括的节点的层数、节点的三维坐标、节点的颜色信息以及节点下层节点的信息。通过八叉树的数据结构分析可知,若节点存在子节点,则子节点的大小为上一级节点大小的1/2,即可根据上一级节点的坐标、大小及层数确定下一级子节点的坐标、大小及层数。
举例来说,若根节点的大小为1,根节点的层数为1,根节点的立方体中心为三维坐标原点(0,0,0),则根节点的八个字节点的大小为1/2,根节点的八个字节点的层数为2,根节点的八个字节点的三维坐标分别为(0.25,0.25,0.25)、(0,25,-0.25,0.25)、(0.25,-0.25,-0.25)、(0.25,0.25,-0.25)、(-0.25,-0.25,-0.25)、(-0.25,-0.25,0.25)、(-0.25,0.25,-0.25)、(-0.25,0.25,0.25),依次类推,每个子节点的八个字节点的坐标也可以算出来。
具体的,假设该级节点的中心坐标为(x,y,z,),边长为length,层数为rank,则该级节点的八个字节点边长为length/2,层数为rank+1,坐标分别为:
(x+length/4,y+length/4,z+length/4);
(x-length/4,y+length/4,z+length/4);
(x+length/4,y-length/4,z+length/4);
(x-length/4,y-length/4,z+length/4);
(x+length/4,y+length/4,z-length/4);
(x-length/4,y+length/4,z-length/4);
(x+length/4,y-length/4,z-length/4);
(x-length/4,y-length/4,z-length/4)。
S305:移动终端根据获取到的节点信息在用户界面显示三维地图。
根据上述流程,在一些实施例中,用户可通过移动终端的显示屏输入地图显示的层数;相应地,在S304中,移动终端可根据用户输入的层数获取该级的节点信息,包括节点的大小、颜色、坐标等信息;根据该级的节点信息,绘制三维点云概率地图并显示在屏幕上。其中,用户输入的层数越大,获取的节点数越多,地图显示的越清晰,即用户可通过输入的层数调节三维点云概率地图的显示效果。
举例来说,八叉树的最大深度为16(即八叉树从上之下包括16个层级),显示级别包括16个级别,则显示级别与八叉树深度之间的关系可以如表1所示:
表1、地图显示级别与八叉树深度之间的关系
显示级别 |
八叉树层级数量 |
对应的节点 |
1 |
1 |
八叉树第1层节点(根节点) |
2 |
2 |
八叉树第2层节点 |
3 |
3 |
八叉树第3层节点 |
…… |
…… |
…… |
根据表1,一个显示级别可对应一个层级数量,显示级别越高则对应的层级数量越多。以显示级别3为例,对应于三层节点,即对应于八叉树的第三层节点。
本申请实施例中,移动终端通过网络实时接收解析并显示三维点云概率地图,提高了用户实时查看三维地图效果的便捷性,同时用户可通过显示屏调整三维地图显示的效果,提高了用户的可操作性。
图4示例性示出了本申请实施例提供的八叉树中每个节点的二进制比特流图。如图4所示,二进制数据流中每8个字节代表一个节点,第25比特位和后24比特位和最后8比特位为有效数据位,第25位比特数为1时表示该节点未被占据,为0时表示被占据,该节点可以继续分割,后24比特位代表该节点的RGB颜色信息,最后8比特位中的每一位表示是否有子节点。
为清楚说明本申请实施例的三维地图显示方法,图5示例性示出了本申请实施例提供的三维地图解析方法的原理图。移动终端以八叉树数据结构解析接收的三维点云数据的二进制数据流,可采用递归算法获取每一级子节点的立方体空间。
以八叉树数据格式解析二进制数据流,包括:
步骤1:设定八叉树的子节点的最大层数,即八叉树的最大深度;
步骤2:根据接收的二进制数据流得到三维地图的最大尺寸,确定八叉树根节点的立方体空间的大小;
步骤3:依次读取数据流中的数据段,依序储到八叉树中以根节点为起始节点且没有子节点的立方体中;
步骤4:确定节点的层数是否达到八叉树的最大深度,若达到,则停止节点的分割,若没有达到,则将该节点再分割为子节点,子节点等分该节点立方体空间大小。
在步骤4中,可根据子节点的第25位比特数判断该子节点是否被占据将该节点再分割为子节点,根据子节点的最后8位比特数确定子节点的下一层子节点数。
以遍历八叉树第二层节点为例,首先读取第二层的第一节点,判断该节点的第25比特位是否为0,为0说明该节点存在子节点,然后根据该节点的后24比特位获取该节点的颜色信息,最后根据最后8比特位的获取该节点的子节点数,若存在子节点,则依序遍历该节点的下一层子节点,此时深度值增加1,即节点的层数增加1,以此类推,直至深度值等于设定的最大深度值时在读取第二层的第二节点。循环上述过程,遍历二进制数据流的每一数据段。
基于相同的技术构思,本申请实施例还提供了一种移动终端。该移动终端执行上述实施例中的方法。
图6示例性示出了本申请实施例提供的一种移动终端系统结构。如图6所示,包括:接收模块101、处理模块102、显示模块103。
接收模块101,用于接收服务器发送的三维点云概率地图数据的二进制数据流;
处理模块102,用于将所述二进制数据流每8字节为一数据段进行划分,得到N个数据段,其中N为大于1的整数;以及根据递归算法,利用八叉树的数据结构,依次遍历N个数据段,根据每个数据段中的八个数据单元信息解析每个数据段的节点信息;以及根据三维点云概率地图的显示级别,获取与所述显示级别对应的八叉树节点信息;
显示模块103,用于根据获取到的节点信息在用户界面显示三维地图。
可选的,处理模块,具体用于:
获取八叉树中每层第一节点的八个数据单元信息,根据八个数据单元信息中的有效比特位得到第一节点的颜色信息及第一节点的子节点信息;
若第一节点的子节点信息指示所述第一节点存在子节点,则获取第一节点下一层子节点的信息;若第一节点的子节点信息指示所述第一节点不存在子节点,则获取第一节点所在层数的第二节点信息。
可选的,节点信息,包括节点的层数、节点的三维坐标、节点的颜色信息以及节点下层节点的信息。
图7示例性示出了本申请实施例提供的移动终端100的三维地图显示效果图。如图7所示,在移动终端100的显示屏上显示了三维地图的显示效果701,放大功能键703、缩小功能键704、撤销功能键705、刷新功能键706可通过功能键702进行折叠,三维地图的显示效果可通过代表节点层数的滑动条707进行调整,其中滑动条的数字代表了八叉树的节点层数。
举例来说,当用户第一次触碰功能键702时,在显示屏右侧菜单栏显示隐藏的放大功能键703、缩小功能键704、撤销功能键705、刷新功能键706,当用户第二次触碰功能键702时,在显示屏右侧菜单栏收起放大功能键703、缩小功能键704、撤销功能键705、刷新功能键706。其中用户可通过撤销功能键705撤销最新的一次操作,通过刷新功能键706回到首次三维地图显示的初始效果图。用户还可通过滑动条707输入八叉树节点的层数调整地图的显示效果,输入的层数越大,获取的节点数越多,三维地图的显示效果越清晰。
可选的,用户还可以直接触碰显示屏进行地图的放大、缩小或者地图区域的选择。
本申请实施例还提供一种计算机存储介质,用于存储一些指令,这些指令被执行时,可以完成前述实施例的方法。
本申请实施例还提供一种计算机程序产品,用于存储计算机程序,该计算机程序用于执行前述实施例的方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。