一种基于视觉的网格语义地图的构建方法
技术领域
本发明属于地球空间信息剖分组织、视觉语义构图技术领域,具体涉及一种基于视觉的网格语义地图的构建方法。
背景技术
SLAM(simultaneous localization and mapping,即使定位构建地图)是实现智能车自主导航以及感知环境信息的关键技术,视觉SLAM技术具有成本低、构图快的优点,被广泛应用在室内导航和三维重建任务中。但是现有的SLAM方法大多生成环境的空间结构信息,如利用三维网格表示空间占有情况,而无法表示更加精确的语义信息。利用该栅格地图可以实现避障和路径规划,单只能区分有或无障碍物,却无法辨别障碍物的类别。
目前,自动驾驶地图的一个关键问题就在于语义信息的获取困难。如果采用网格语义图,其相对于栅格图而言包含更丰富的语义信息,承担多维空间信息,包含准确的障碍物类别信息,能够消除栅格地图导致路径规划产生的歧义。
网格语义地图不仅能表达网格的空间属性,还可以表示地物的空间关系,如道路和交通部件的空间关系等。同时网格地图本身还具有简单的量算功能,根据网格的跨度和方位关系可以快速测距和测向,在实际自动驾驶运行中可以快速地计算目标与当前位置的距离和方位关系。
因此,针对自动驾驶环境感知的需求,急需一种在传统视觉SLAM技术的基础上采用立体剖分网格图构建包含丰富信息的网格语义地图的方法,对自动驾驶的动态避障、路径规划等有重要意义。
发明内容
本发明克服了现有技术的不足之一提供了基于视觉的网格语义地图的构建方法及存储介质,能够实现网格语义地图的快速构建,为自动驾驶提供更加准确的决策。
根据本公开的一方面,提出了一种基于视觉的网格语义地图的构建方法,所述方法包括:
基于视觉SLAM算法获取栅格地图的图像语义信息;
采用OctoMap八叉树算法对所述栅格地图进行构建得到所述栅格地图所对应的网格地图;
融合所述栅格地图的图像语义信息和所述栅格地图所对应的网格地图,得到所述网格语义地图。
在一种可能的实现方式中,采用视觉SLAM算法获取栅格地图的图像语义信息,包括:
采用视觉SLAM算法对所述栅格地图的特征点进行特征提取、特征匹配、位姿优化获取所述栅格地图的图像语义信息。
在一种可能的实现方式中,并采用OctoMap八叉树算法对所述栅格地图进行构建得到所述栅格地图所对应的网格地图,包括:
基于GeoSOT空间剖分框架确定所述栅格地图的局部网格地图,利用OctoMap八叉树算法对所述栅格地图的局部网格地图进行划分,得到所述栅格地图所对应的网格地图,并基于Hash结构对所述网格地图的节点进行编码。
在一种可能的实现方式中,基于Hash结构对所述网格地图的节点进行编码,包括:
针对所述网格地图的每个节点,判断所述节点是否为叶子节点,如果不是,基于Hash结构对所述节点划分为八个子节点,采用八进制方式对所述八个子节点进行编码,并将所述编码添加到所述父节点的编码后面,得到所述子节点在该层级的节点编码,并保存所述节点以及所述节点所对应的编码。
在一种可能的实现方式中,基于Hash结构对所述网格地图的节点进行编码,还包括:
当所述网格地图的节点为叶子节点时,判断所述叶子节点是否为空,若为空,则删除所述叶子节点,否则保存所述叶子节点以及所述叶子节点所对应的编码。
在一种可能的实现方式中,所述八个子网格的尺寸大小相同。
在一种可能的实现方式中,融合所述栅格地图的图像语义信息和所述栅格地图所对应的网格地图,得到所述网格语义地图,包括:
将所述栅格地图图像中的像素点的极坐标转换为世界坐标(X,Y,Z),计算所述世界坐标(X,Y,Z)对应的网格编码,与存储的所述栅格地图所对应的网格地图的各个节点的编码进行比对,当比对成功时,将所述像素点的语义信息转换到所述像素点所对应的网格地图的网格节点上得到所述网格语义地图。
本发明提供一种基于视觉的网格语义地图的构建方法,通过采用视觉SLAM算法获取栅格地图的图像语义信息,并采用OctoMap八叉树算法对所述栅格地图进行构建得到所述栅格地图所对应的网格地图,能够实现网格语义地图的快速构建,识别丰富类别的空间信息为自动驾驶提供更加准确的决策。
附图说明
附图用来提供对本申请的技术方案或现有技术的进一步理解,并且构成说明书的一部分。其中,表达本申请实施例的附图与本申请的实施例一起用于解释本申请的技术方案,但并不构成对本申请技术方案的限制。
图1为本发明实施例提供的一种基于视觉的网格语义地图的构建方法的流程示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达到相应技术效果的实现过程能充分理解并据以实施。本申请实施例以及实施例中的各个特征,在不相冲突前提下可以相互结合,所形成的技术方案均在本发明的保护范围之内。
另外,附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1为本发明实施例提供的一种基于视觉的网格语义地图的构建方法的流程示意图。
本实施例提供了一种基于视觉的网格语义地图的构建方法,该方法可以应用于电子设备,如自动驾驶、移动机器人和/或与该移动机器人关联的终端设备,下面以应用于自动驾驶时为例进行说明。
步骤S1:基于视觉SLAM算法获取栅格地图的图像语义信息。
栅格地图可以是基于图像采集设备(例如相机、摄像头等)采集并采用SLAM算法构建的平面地图。
基于视觉SLAM算法获取栅格地图的图像语义信息可以是指采用视觉SLAM算法对所述栅格地图的特征点进行特征提取、特征匹配和位姿优化的处理,得到视觉采集设备的每一帧图像的准确位姿,从而获取栅格地图的图像语义信息。
其中,特征点的提取是SLAM构图中的关键步骤,能否提取合适的特征点直接影响SLAM最终的定位和构图结果。可以通过尺度不变与特征变换(scale invariant featuretransform,SIFT)算法、加速鲁棒特征(Speed-up robust feature,SURF)算法以及快速特征点和方向描述子(Oriented FAST and Rotated BRIEF,ORB)算法进行特征提取。其中,优选为ORB算法,ORB算法可以实现快速的关键特征提取和方向的特征描述,计算效率远快于SIFT算法和SURF算法且可满足实时计算需求。至于特征提取的算法的选择在此不作限定,可以根据实际需求进行选择。
特征点匹配是指通过特征提取算法提取出的特征点,求解最优的匹配关系。其中,最优匹配关系的特征点之间的距离最小。特征点匹配方法很多,例如寻找当前帧和地图点之间的匹配、寻找当前帧和前一帧之间的匹配、寻找当前帧和关键帧之间的匹配、当计算出当前帧和回环帧之间的sim(3)变换之后,建立当前帧和地图点之间的匹配;用于初始化时,寻找当前帧和前一帧之间的匹配以及用于进行三角时,寻找当前帧和其他帧之间的匹配等多种匹配方式。特征点匹配的具体实现方式可以根据需求选择,在此不作限定。
由特征匹配得到的变换矩阵存在误差,因此当每一帧的变换矩阵进行累积时存在累积误差,SLAM建图时需要通过回环检测和回环矫正的方式消除累积误差。可以利用两次对同一点的观测,由于观测位姿和实际位姿存在偏差,可以通过将偏差分配到每一个位姿观测中,从而修正每次位姿的数值,使两次的位姿相同,例如可以使用开源算法g2o进行位姿优化,获取图像语义信息。
步骤S2:采用OctoMap八叉树算法对所述栅格地图进行构建得到所述栅格地图所对应的网格地图。
在一实例中,基于GeoSOT空间剖分框架确定所述栅格地图的局部网格地图,利用OctoMap八叉树算法对所述栅格地图的局部网格地图进行划分,得到所述栅格地图所对应的网格地图,并基于Hash结构对所述网格地图的节点进行编码。
其中,GeoSOT(Geographical coordinate Subdividing grid with Onedimension integer coding on 2n-Tree,基于2n及整型一维数组全球经纬度剖分网格)是一种对历史数据具有很好继承性的多层次全球剖分网络。
本公开的局部网格地图的经纬度范围继承GeoSOT地理位置网格,可以以GeoSOT第13层级即4分的地理网格范围构建局部网格地图,即以每个15层级地理网格的平面坐标的最小值为坐标原点,构建局部立体网格剖分框架。15级地理网格是4′×4′×4的立体网格,其在赤道附近约占8公里的平面范围,所以局部立体网格地图的立体空间范围为4′×4′×8km。
GeoSOT地理位置网格的高度范围为地表以下约6000千米到地表以上约5万千米,远远超过自动驾驶系统的活动范围,根据自动驾驶的活动范围将栅格地图所对应的局部网格地图设置为海拔负1000米为最低高程,海拔7000米为最高高程。
自动驾驶系统所使用的地图为高精度地图,高精度地图的平面精度和高程精度约为分米级,传感器空间分辨率约为20厘米,GPS定位装置精度最高可以达到厘米级,因此,可以将局部网格地图的最细网格粒度设为10厘米,即局部网格地图的平面分辨率和高程分辨率均为10厘米。
在确定局部网格地图的空间范围的基础上,采用OctoMap八叉树算法对所述栅格地图的局部网格地图进行划分得到栅格地图所对应的网格地图,并基于Hash结构对所述网格地图的节点进行编码。
八叉树算法划分的网格地图的节点的表达方式可以分为两种:基于指针的表达和基于Hash的表达。在一示例中,可以采用基于Hash的表达,即给每个网格节点计算得到一个网格节点的编码,利用唯一的网格节点的编码表示该网格节点。其中,网格编码的长度可以表示网格地图的层级,网格节点的编码的包含关系可以表示节点的父子关系。通过基于Hash的表达可以节省内存开销和遍历的复杂度。当然还可以选择基于指针的表达,在此不作限定。
在一示例中,针对所述网格地图的每个节点,判断所述节点是否为叶子节点,如果不是,基于Hash结构对所述节点划分为八个子节点,采用八进制方式对所述八个子节点进行编码,并将所述编码添加到所述父节点的编码后面,得到所述子节点在该层级的节点编码,并保存所述节点以及所述节点所对应的编码。
当所述网格地图的节点为叶子节点时,判断所述叶子节点是否为空,若为空,则删除所述叶子节点,否则保存所述叶子节点以及所述叶子节点所对应的编码。
以自动驾驶系统的网格地图的网格节点的编码为例进行说明,假如设定自动驾驶的栅格地图所对应的网格地图空间的起始点坐标为(Xmin,Ymin,Zmin),网格地图空间的最大点坐标为(Xmax,Ymax,Zmax),网格地图的平面分辨率为Resolutionplane,网格地图的高度分辨率为Resolutionz,网格地图的最精细网格的层级(网格地图的总层级)为level,网格地图的节点列表octo_nodes[]。
设定网格地图的初始层级为第0层级,设第0层级的中心点为该网格地图的根节点,坐标为((Xmin+Xmax)/2,(Ymin+Ymax)/2,(Zmin+Zmax)/2),第0级网格地图的网格大小为(Resolutionplane*2level-1,Resolutionplane*2level-1,Resolutionz*2level-1)。
判断根节点是否为叶子节点,如果不是,则以根节点为中心,沿着网格地图的空间坐标系的X、Y、Z轴的三个方向进行切分,形成八个尺寸大小相等的子网格,也就是第1层级的八个网格子节点。其中,八个子网格的尺寸大小均为(Resolutionplane*2level-1)*(Resolutionplane*2level-1)*(Resolutionz*2level-1)。采用八进制数字0(000)、1(001)、2(010)、3(011)、4(100)、5(101)、6(110)、7(111)对八个网格节点进行编码,该八进制数可与3位二进制编码XcodeYcodeZcode对应,其中Xcode为0指代X轴小于等于中点的区域,Xcode为1指代X轴大于中点的区域;Ycode为0指代Y轴小于等于中点的区域,Ycode为1指代Y轴大于中点的区域;Ycode为0指代Y轴小于等于中点的区域,Ycode为1指代Y轴大于中点的区域。将该网格子节点的节点编码添加到根节点的节点编码后面,得到第1层级的八个网格子节点的节点编码,这样可以通过网格编码长度知道网格地图的层级,网格编码的包含关系知道网格节点之间的父子关系,保存网格节点到节点列表octo_nodes[]以及网格节点所对应的节点编码到网格节点编码列表N[]中。如果根节点为叶子节点,并判断该叶子节点是否为空,如果为空,则删除该网格节点,否则保存该网格节点到节点列表octo_nodes[]以及网格节点所对应的节点编码到网格节点编码列表N[]中,并退出当前网格划分过程。
针对第1层级的八个网格子节点分别进行判断是否为叶子节点,如果不是叶子节点,采用对根节点划分的方法,对第1层级的八个网格节点分别进行划分,以得到相应的八个第2层级的网格子节点。依次循环迭代每个网格节点,至所有网格节点为网格叶子节点,实现对整个网格地图节点的编码。
步骤S3:融合所述栅格地图的图像语义信息和所述栅格地图所对应的网格地图,得到所述网格语义地图。
通过融合步骤S1获取基于视觉SLAM构件的栅格地图的图像语义信息和步骤S2基于OctoMap八叉树算法构建的网格地图,将栅格地图的图像语义信息转换到网格地图中,将网格地图的每个网格节点赋予空间语义信息,得到基于视觉的八叉树网格语义地图。
在一实例中,将所述栅格地图图像中的像素点的极坐标转换为世界坐标(X,Y,Z),计算所述世界坐标(X,Y,Z)对应的网格编码,与存储的所述栅格地图所对应的网格地图的各个节点的编码进行比对,当比对成功时,将所述像素点的语义信息转换到所述像素点所对应的网格地图的网格节点上得到所述网格语义地图。遍历栅格地图图像中的所有像素点,得到网格节点带有空间语义信息的基于视觉的网格语义地图。
综上,本发明提供的基于视觉的网格语义地图的构建方法、装置、存储介质及电子设备,通过采用视觉SLAM算法获取栅格地图的图像语义信息,并采用OctoMap八叉树算法对所述栅格地图进行构建得到所述栅格地图所对应的网格地图,能够实现网格语义地图的快速构建,识别丰富类别的空间信息为自动驾驶提供更加准确的决策。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。