目录
1.SLAM直接提供的地图格式种类繁多(比如特征地图、点云地图、几何地图、栅格地图、拓扑地图等)
1.SLAM直接提供的地图格式种类繁多(比如特征地图、点云地图、几何地图、栅格地图、拓扑地图等)
参考引用:SLAM---地图_slam地图_loongembedded的博客-CSDN博客
尺度地图:具有真实的物理尺寸,如栅格地图、特征地图、点云地图;常用于地图构建、定位、SLAM、小规模路径规划。
拓扑地图:不具备真实的物理尺寸,只表示不同地点的连通关系和距离,如铁路网,常用于超大规模的机器人路径规划。
语义地图:加标签的尺度地图,公认SLAM的未来—SLAM和深度学习的结合,常用于人机交互。 其中对尺度地图进行补充说明,如下图所示。
不同算法构建的环境地图类型不相同,其应用的场景也不同。
地图包含的信息是运动规划模块的输入,因此从利于运动规划的角度分析,从地图重构效率、环境内容完整性及碰撞检测效率等方面对比了多种类型的地图。
栅格地图及特征地图是传统激光SLAM算法中常用的地图类型,常被应用于室内导航系统,能够较准确描述环境几何信息,但缺乏语义信息限制了机器人智能化水平。
几何语义地图可提供目标物体类型、空间形态及位置,以及机器人在地图中的位置,但目前仅能使用单一几何体,同时受到深度学习的计算需求与硬件计算能力制约。
表1
不同算法构建的环境地图类型不相同,其应用的场景也不同。
地图包含的信息是运动规划模块的输入,因此从利于运动规划的角度分析,表1从地图重构效率、环境内容完整性及碰撞检测效率等方面对比了多种类型的地图。
栅格地图及特征地图是传统激光SLAM算法中常用的地图类型,常被应用于室内导航系统,能够较准确描述环境几何信息,但缺乏语义信息限制了机器人智能化水平。
几何语义地图可提供目标物体类型、空间形态及位置,以及机器人在地图中的位置,但目前仅能使用单一几何体,同时受到深度学习的计算需求与硬件计算能力制约。
因此,构建、存储、运用一个可用、普适、简洁的语义地图,解决传统地图存在的冗余性、时效性问题,以提高机器人与不同环境的交互能力,是当前研究趋势之一。
1.1栅格地图概述
顾名思义,占据栅格地图构建算法当然构建的是栅格地图。
在开始讲解之前,我们要明确一些事情。 第一,构建栅格地图需要使用激光雷达传感器。 第二,激光雷达传感器是有噪声存在的,通俗的说,“不一定准”。 举个例子,机器人在同一位姿下的不同时刻,通过激光雷达对一个固定的障碍物的探测距离不一致,一帧为5m,一帧为5.1m,我们难道要把5m和5.1m的位置都标记为障碍物?这也就是使用占据栅格地图构建算法的原因。
我们引入占据栅格地图(Occupancy Grid Map)的概念。我们将地图栅格化,对于每一个栅格的状态要么占用,要么空闲,要么未知(即初始化状态)。
关于占据栅格地图构建算法的引出、推导、演化,从下面的图片得出:
首先,我们假设 looccu = 0.9,lofree = -0.7。那么,显而易见,一个栅格状态的数值越大,就越表示该栅格为占据状态,相反数值越小,就表示改栅格为空闲状态。(这也就解决了此前文中提出的激光雷达观测值”不一定准”的问题)
即从世界坐标系转入栅格坐标系,每个栅格序号有x,y两个数字。这里与地图分辨率有关,比如说:地图分辨率为0.05,也就是1m用20个栅格表示。 例如:世界坐标系下机器人位置(1,1)对应栅格坐标系的(20,20)。 注意:世界坐标系与像素坐标系区分开来,他们之间的y轴方向相反,其他都一致,地图的显示使用的像素坐标系(栅格坐标系)。 (3)遍历该帧激光雷达数据的所有扫描点执行以下操作 计算每一个激光点击中栅格在像素坐标系下的栅格序号
从当前机器人位姿的栅格序号到该激光扫描点的栅格序号划线,找出所有空闲的栅格序号。
4、占据栅格地图构建算法c++实现
这里分享核心代码,具体算法功能包,可在公众号:小白学移动机器人,发送:栅格地图,即可获得。 本算法功能包,给出了详细的中文注释,是提升c++编程技能的阅读良品。
2.三维点云地图转二维栅格地图:
参考三维点云地图转二维栅格地图_点云地图转换成二维栅格地图_NarutoKAKA的博客-CSDN博客
(如下图即为三维栅格地图的效果图)