发明内容
本申请提供了一种基于八叉树的体素地图生成方法、装置、存储介质及设备,用于解决利用CPU对点云数据进行八叉树编码时,耗时较长,编码效率较低的问题。所述技术方案如下:
一方面,提供了一种基于八叉树的体素地图生成方法,用于无人驾驶车辆中的图形处理器GPU中,所述方法包括:
在第i个处理周期内,接收所述无人驾驶车辆中的中央处理器CPU发送的第i个点云片段,所述第i个点云片段是所述CPU对所述无人驾驶车辆中的各个传感器发送的点云数据进行第i次划分后得到的,所述点云数据是所述传感器对周围的环境状态进行采样得到的,i为大于或等于3的正整数;
在所述第i个处理周期内,利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息;
在所述第i个处理周期内,获取在所述第i-1处理周期内对第i-2个点云片段进行编码后得到的第i-2个编码信息,将所述第i-2个编码信息作为所述第i个处理周期的体素地图发送给所述CPU。
在一种可能的实现方式中,所述利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息,包括:
在所述第i个处理周期之前生成的历史编码信息中,筛选出按照时间顺序排列的最后n个历史编码信息,n为正整数;
在利用八叉树编码方式进行编码时,基于所述n个历史编码信息确定所述第i-1个点云片段所投影的多个体素中的待编码体素;
对所述待编码体素进行编码,得到第i-1个编码信息。
在一种可能的实现方式中,所述基于所述n个历史编码信息确定所述第i-1个点云片段所投影的多个体素中的待编码体素,包括:
对于所述第i-1个点云片段所投影的每个体素,若根据所述n个历史编码信息中的属性信息确定所述体素在历史时刻不存在投影的点云数据,或者,若根据所述n个历史编码信息确定所述体素在当前时刻的颗粒度相对于前一时刻的颗粒度发生了变化,则将所述体素确定为待编码体素。
在一种可能的实现方式中,所述方法还包括:
获取所述体素在所述n个历史编码信息中的属性信息的数值;
若所述属性信息的数值为第一数值,则确定所述体素在历史时刻不存在投影的点云数据;
若所述属性信息的数值为第二数值,则确定所述体素在历史时刻存在投影的点云数据。
在一种可能的实现方式中,所述方法还包括:
获取所述体素在当前时刻与所述无人驾驶车辆之间的第一距离,以及在前一时刻与所述无人驾驶车辆之间的第二距离;
若所述第一距离和所述第二距离所对应的颗粒度不同,则确定所述体素在当前时刻的颗粒度相对于前一时刻的颗粒度发生了变化;
若所述第一距离和所述第二距离所对应的颗粒度相同,则确定所述体素在当前时刻的颗粒度相对于前一时刻的颗粒度未发生变化;
其中,每种颗粒度对应于一个距离范围。
一方面,提供了一种基于八叉树的体素地图生成装置,用于无人驾驶车辆中的图形处理器GPU中,所述装置包括:
接收模块,用于在第i个处理周期内,接收所述无人驾驶车辆中的中央处理器CPU发送的第i个点云片段,所述第i个点云片段是所述CPU对所述无人驾驶车辆中的各个传感器发送的点云数据进行第i次划分后得到的,所述点云数据是所述传感器对周围的环境状态进行采样得到的,i为大于或等于3的正整数;
编码模块,用于在所述第i个处理周期内,利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息;
发送模块,用于在所述第i个处理周期内,获取在所述第i-1处理周期内对第i-2个点云片段进行编码后得到的第i-2个编码信息,将所述第i-2个编码信息作为所述第i个处理周期的体素地图发送给所述CPU。
在一种可能的实现方式中,所述编码模块,还用于:
在所述第i个处理周期之前生成的历史编码信息中,筛选出按照时间顺序排列的最后n个历史编码信息,n为正整数;
在利用八叉树编码方式进行编码时,基于所述n个历史编码信息确定所述第i-1个点云片段所投影的多个体素中的待编码体素;
对所述待编码体素进行编码,得到第i-1个编码信息。
在一种可能的实现方式中,所述编码模块,还用于:
对于所述第i-1个点云片段所投影的每个体素,若根据所述n个历史编码信息中的属性信息确定所述体素在历史时刻不存在投影的点云数据,或者,若根据所述n个历史编码信息确定所述体素在当前时刻的颗粒度相对于前一时刻的颗粒度发生了变化,则将所述体素确定为待编码体素。
一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如上所述的基于八叉树的体素地图生成方法。
一方面,提供了一种计算机设备,所述计算机设备包括中央处理器CPU、图形处理器GPU和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的基于八叉树的体素地图生成方法。
本申请提供的技术方案的有益效果至少包括:
在第i个处理周期内,既可以接收无人驾驶车辆中的CPU发送的第i个点云片段,也可以利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息;还可以对第i-2个点云片段进行编码后得到的第i-2个编码信息,将第i-2个编码信息作为第i个处理周期的体素地图发送给CPU,这样,GPU可以采用流水线的方式对观测到的所有点云数据进行并行编码,相比于CPU采用串行方式对点云数据进行编码来说,可以减少编码时的耗时,大幅提升编码效率。
在利用八叉树编码方式进行编码时,先基于所述n个历史编码信息确定所述第i-1个点云片段所投影的多个体素中的待编码体素;再对所述待编码体素进行编码,得到第i-1个编码信息,这样,GPU可以只对未编码的体素或颗粒度发生变化的体素进行编码,避免对已编码的体素进行编码,从而利用点云数据的稀疏特性,使用八叉树编码去除重复和相似的点云数据,将数据量控制在GPU可接受的算力范围内,从而以较低算力和耗时成本,在线建立高实时性的点云地图供无人驾驶车辆使用。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
请参考图1,其示出了本申请一个实施例提供的基于八叉树的体素地图生成方法的方法流程图,该基于八叉树的体素地图生成方法可以应用于计算机设备中的GPU(Graphics Processing Unit,图形处理器)中。该基于八叉树的体素地图生成方法,可以包括:
步骤101,在第i个处理周期内,接收无人驾驶车辆中的CPU发送的第i个点云片段,第i个点云片段是CPU对无人驾驶车辆中的各个传感器发送的点云数据进行第i次划分后得到的,点云数据是传感器对周围的环境状态进行采样得到的,i为大于或等于3的正整数。
无人驾驶车辆中安装有CPU、GPU和多个传感器,这些传感器负责对车辆周围的环境状态进行采样得到点云数据,并将点云数据发送给CPU,CPU将点云数据发送给GPU,GPU对点云数据进行编码,并将得到的编码信息作为体素地图发送给CPU,CPU可以直接使用体素地图规划无人驾驶车辆的行驶路径,或者,CPU可以将体素地图与离线的点云地图进行融合,并根据得到的融合地图规划无人驾驶车辆的行驶路径,本实施例中不限制体素地图的使用方式。
本实施例中,GPU可以将点云数据的处理流程拆分成接收、编码和反馈这三个操作,并采用流水线的方式并行执行这三个操作。简单来说,若以处理周期来划分,则在第i个处理周期内,GPU需要同时执行步骤101-103。
由于点云数据是实时采样得到的数据流,所以,CPU可以先将点云数据划分成点云片段,再将点云片段发送给GPU,本实施例中将在第i个处理周期内传输的点云片段称为第i个点云片段。
步骤102,在第i个处理周期内,利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息。
在接收第i个点云片段的同时,GPU还需要对第i-1个点云片段进行编码,第i-1个点云片段是在第i-1个处理周期内接收到的点云片段。
步骤103,在第i个处理周期内,获取在第i-1处理周期内对第i-2个点云片段进行编码后得到的第i-2个编码信息,将第i-2个编码信息作为第i个处理周期的体素地图发送给CPU。
在接收第i个点云片段,编码第i-1个点云片段的同时,GPU还需要将第i-2个编码信息作为当前的体素地图发送给CPU,第i-2个编码信息是对第i-2个点云片段进行编码得到的,第i-2个点云片段是在第i-2个处理周期内接收到的点云片段。
需要补充说明的是,GPU还需要对第i-2个编码信息进行存储,以便在后续的处理周期中,将第i-2个编码信息作为历史编码信息进行使用。
本实施例中,当i=1时,GPU只接收CPU发送的第1个点云片段;当i=2时,GPU接收CPU发送的第2个点云片段,同时对第1个点云片段进行编码;当i≥3时,GPU执行步骤101-103。
综上所述,本申请实施例提供的基于八叉树的体素地图生成方法,在第i个处理周期内,既可以接收无人驾驶车辆中的CPU发送的第i个点云片段,也可以利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息;还可以对第i-2个点云片段进行编码后得到的第i-2个编码信息,将第i-2个编码信息作为第i个处理周期的体素地图发送给CPU,这样,GPU可以采用流水线的方式对观测到的所有点云数据进行并行编码,相比于CPU采用串行方式对点云数据进行编码来说,可以减少编码时的耗时,大幅提升编码效率。
请参考图2,其示出了本申请一个实施例提供的基于八叉树的体素地图生成方法的方法流程图,该基于八叉树的体素地图生成方法可以应用于计算机设备中的GPU中。该基于八叉树的体素地图生成方法,可以包括:
步骤201,在第i个处理周期内,接收无人驾驶车辆中的CPU发送的第i个点云片段,第i个点云片段是CPU对无人驾驶车辆中的各个传感器发送的点云数据进行第i次划分后得到的,点云数据是传感器对周围的环境状态进行采样得到的,i为大于或等于3的正整数。
无人驾驶车辆中安装有CPU、GPU和多个传感器,这些传感器负责对车辆周围的环境状态进行采样得到点云数据,并将点云数据发送给CPU,CPU将点云数据发送给GPU,GPU对点云数据进行编码,并将得到的编码信息作为体素地图发送给CPU,CPU可以直接使用体素地图规划无人驾驶车辆的行驶路径,或者,CPU可以将体素地图与离线的点云地图进行融合,并根据得到的融合地图规划无人驾驶车辆的行驶路径,本实施例中不限制体素地图的使用方式。
本实施例中,GPU可以将点云数据的处理流程拆分成接收、编码和反馈这三个操作,并采用流水线的方式并行执行这三个操作。简单来说,若以处理周期来划分,则在第i个处理周期内,GPU需要同时执行步骤101-103。
由于点云数据是实时采样得到的数据流,所以,CPU可以先将点云数据划分成点云片段,再将点云片段发送给GPU,本实施例中将在第i个处理周期内传输的点云片段称为第i个点云片段。
步骤202,在第i个处理周期内,在第i个处理周期之前生成的历史编码信息中,筛选出按照时间顺序排列的最后n个历史编码信息,n为正整数。
在接收第i个点云片段的同时,GPU还需要对第i-1个点云片段进行编码,即执行步骤202-204,第i-1个点云片段是在第i-1个处理周期内接收到的点云片段。
GPU可以对所有的点云数据进行编码,然而,部分点云数据已在之前的处理周期中编码过,所以,基于点云数据的稀疏特性,GPU可以只对未编码的体素或颗粒度发生变化的体素进行编码,避免对已编码的体素进行编码,从而利用点云数据的稀疏特性,使用八叉树编码去除重复和相似的点云数据,将数据量控制在GPU可接受的算力范围内,从而以较低算力和耗时成本,在线建立高实时性的点云地图供无人驾驶车辆使用。
GPU可以筛选出与第i个点云片段相关联的历史编码信息,并基于历史编码信息来筛选待编码的体素,历史编码信息是在第i个处理周期之前生成的编码信息,且历史编码信息可以按照生成顺序进行排序。
具体的,GPU可以根据预设的经验值n,从历史编码信息中筛选出按照时间顺序排列的最后n个历史编码信息。
步骤203,在利用八叉树编码方式进行编码时,基于n个历史编码信息确定第i-1个点云片段所投影的多个体素中的待编码体素。
GPU可以先将第i个点云片段中的点云数据映射到对应的体素中,再判断该体素是否是待编码体素。其中,待编码体素包括两种,第一种是在第i个处理周期之前未编码过的体素,第二种是在第i个处理周期时的颗粒度发生变化的体素。
对于第一种体素,由于未编码过的体素中不存在投影的点云数据,且体素中是否存在投影的点云数据可以根据属性信息的数值来判断,所以,GPU可以获取体素在n个历史编码信息中的属性信息的数值;若属性信息的数值为第一数值,则确定该体素在历史时刻不存在投影的点云数据;若属性信息的数值为第二数值,则确定该体素在历史时刻存在投影的点云数据。对应的,对于第i-1个点云片段所投影的每个体素,若根据n个历史编码信息中的属性信息确定该体素在历史时刻不存在投影的点云数据,则将该体素确定为待编码体素。
本实施例中,每种颗粒度对应于一个距离范围。通常来说,距离范围越小,即点云数据距离无人驾驶车辆越近,则其所投影的体素的颗粒度越小,以便更好地描述障碍物的细节;距离范围越大,即点云数据距离无人驾驶车辆越远,则其所投影的体素的颗粒度越大,所以,当点云数据投影的体素的颗粒度发生变化时,需要进行重新编码。
假设距离范围为50米,且在50米内的颗粒度为0.5米,在50米外的颗粒度为1米,若在第i-1个处理周期时点云数据与无人驾驶车辆之间的距离为100米,则其所投影的体素的颗粒度为1米;若在第i个处理周期时该点云数据与无人驾驶车辆之间的距离为40米,则其所投影的体素的颗粒度为0.5米,此时需要对该点云数据所投影的体素进行编码。
基于上述规则,对于第二种体素,GPU可以获取体素在当前时刻与无人驾驶车辆之间的第一距离,以及在前一时刻与无人驾驶车辆之间的第二距离;若第一距离和第二距离所对应的颗粒度不同,则确定体素在当前时刻的颗粒度相对于前一时刻的颗粒度发生了变化;若第一距离和第二距离所对应的颗粒度相同,则确定体素在当前时刻的颗粒度相对于前一时刻的颗粒度未发生变化。对应的,对于第i-1个点云片段所投影的每个体素,若根据n个历史编码信息确定体素在当前时刻的颗粒度相对于前一时刻的颗粒度发生了变化,则将体素确定为待编码体素。
步骤204,对待编码体素进行编码,得到第i-1个编码信息。
对于需要编码的每个体素,GPU可以根据其中投影的点云数据与无人驾驶车辆之间的距离确定其对应的颗粒度信息、生成该体素的坐标信息、生成内容为第二数值的属性信息,即可得到第i-1个编码信息。
步骤205,在第i个处理周期内,获取在第i-1处理周期内对第i-2个点云片段进行编码后得到的第i-2个编码信息,将第i-2个编码信息作为第i个处理周期的体素地图发送给CPU。
在接收第i个点云片段,编码第i-1个点云片段的同时,GPU还需要将第i-2个编码信息作为当前的体素地图发送给CPU,第i-2个编码信息是对第i-2个点云片段进行编码得到的,第i-2个点云片段是在第i-2个处理周期内接收到的点云片段。
需要补充说明的是,GPU还需要对第i-2个编码信息进行存储,以便在后续的处理周期中,将第i-2个编码信息作为历史编码信息进行使用。
本实施例中,当i=1时,GPU只接收CPU发送的第1个点云片段;当i=2时,GPU接收CPU发送的第2个点云片段,同时对第1个点云片段进行编码;当i≥3时,GPU执行步骤201-205。
综上所述,本申请实施例提供的基于八叉树的体素地图生成方法,在第i个处理周期内,既可以接收无人驾驶车辆中的CPU发送的第i个点云片段,也可以利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息;还可以对第i-2个点云片段进行编码后得到的第i-2个编码信息,将第i-2个编码信息作为第i个处理周期的体素地图发送给CPU,这样,GPU可以采用流水线的方式对观测到的所有点云数据进行并行编码,相比于CPU采用串行方式对点云数据进行编码来说,可以减少编码时的耗时,大幅提升编码效率。
在利用八叉树编码方式进行编码时,先基于所述n个历史编码信息确定所述第i-1个点云片段所投影的多个体素中的待编码体素;再对所述待编码体素进行编码,得到第i-1个编码信息,这样,GPU可以只对未编码的体素或颗粒度发生变化的体素进行编码,避免对已编码的体素进行编码,从而利用点云数据的稀疏特性,使用八叉树编码去除重复和相似的点云数据,将数据量控制在GPU可接受的算力范围内,从而以较低算力和耗时成本,在线建立高实时性的点云地图供无人驾驶车辆使用。
请参考图3,其示出了本申请一个实施例提供的基于八叉树的体素地图生成装置的结构框图,该基于八叉树的体素地图生成装置可以应用于计算机设备中的GPU中。该基于八叉树的体素地图生成装置,可以包括:
接收模块310,用于在第i个处理周期内,接收无人驾驶车辆中的中央处理器CPU发送的第i个点云片段,第i个点云片段是CPU对无人驾驶车辆中的各个传感器发送的点云数据进行第i次划分后得到的,点云数据是传感器对周围的环境状态进行采样得到的,i为大于或等于3的正整数;
编码模块320,用于在第i个处理周期内,利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息;
发送模块330,用于在第i个处理周期内,获取在第i-1处理周期内对第i-2个点云片段进行编码后得到的第i-2个编码信息,将第i-2个编码信息作为第i个处理周期的体素地图发送给CPU。
在一个可选的实施例中,编码模块320,还用于:
在第i个处理周期之前生成的历史编码信息中,筛选出按照时间顺序排列的最后n个历史编码信息,n为正整数;
在利用八叉树编码方式进行编码时,基于n个历史编码信息确定第i-1个点云片段所投影的多个体素中的待编码体素;
对待编码体素进行编码,得到第i-1个编码信息。
在一个可选的实施例中,编码模块320,还用于:
对于第i-1个点云片段所投影的每个体素,若根据n个历史编码信息中的属性信息确定体素在历史时刻不存在投影的点云数据,或者,若根据n个历史编码信息确定体素在当前时刻的颗粒度相对于前一时刻的颗粒度发生了变化,则将体素确定为待编码体素。
在一个可选的实施例中,该装置还包括:
第一获取模块,用于获取体素在n个历史编码信息中的属性信息的数值;
第一确定模块,用于若属性信息的数值为第一数值,则确定体素在历史时刻不存在投影的点云数据;若属性信息的数值为第二数值,则确定体素在历史时刻存在投影的点云数据。
在一个可选的实施例中,该装置还包括:
第二获取模块,用于获取体素在当前时刻与无人驾驶车辆之间的第一距离,以及在前一时刻与无人驾驶车辆之间的第二距离;
第二确定模块,用于若第一距离和第二距离所对应的颗粒度不同,则确定体素在当前时刻的颗粒度相对于前一时刻的颗粒度发生了变化;若第一距离和第二距离所对应的颗粒度相同,则确定体素在当前时刻的颗粒度相对于前一时刻的颗粒度未发生变化;其中,每种颗粒度对应于一个距离范围。
综上所述,本申请实施例提供的基于八叉树的体素地图生成装置,在第i个处理周期内,既可以接收无人驾驶车辆中的CPU发送的第i个点云片段,也可以利用八叉树编码方式对在第i-1个处理周期内接收到的第i-1个点云片段进行编码,得到第i-1个编码信息;还可以对第i-2个点云片段进行编码后得到的第i-2个编码信息,将第i-2个编码信息作为第i个处理周期的体素地图发送给CPU,这样,GPU可以采用流水线的方式对观测到的所有点云数据进行并行编码,相比于CPU采用串行方式对点云数据进行编码来说,可以减少编码时的耗时,大幅提升编码效率。
在利用八叉树编码方式进行编码时,先基于所述n个历史编码信息确定所述第i-1个点云片段所投影的多个体素中的待编码体素;再对所述待编码体素进行编码,得到第i-1个编码信息,这样,GPU可以只对未编码的体素或颗粒度发生变化的体素进行编码,避免对已编码的体素进行编码,从而利用点云数据的稀疏特性,使用八叉树编码去除重复和相似的点云数据,将数据量控制在GPU可接受的算力范围内,从而以较低算力和耗时成本,在线建立高实时性的点云地图供无人驾驶车辆使用。
本申请一个实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如上所述的基于八叉树的体素地图生成方法。
本申请一个实施例提供了一种计算机设备,所述计算机设备包括CPU、GPU和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的基于八叉树的体素地图生成方法。
需要说明的是:上述实施例提供的基于八叉树的体素地图生成装置在进行基于八叉树的体素地图生成时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将基于八叉树的体素地图生成装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于八叉树的体素地图生成装置与基于八叉树的体素地图生成方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。