讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下:
(02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885
文末正下方中心提供了本人
联系方式,
点击本人照片即可显示
W
X
→
官方认证
{\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证}
文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证
一、前言
通过前面的博客,已经对 ActiveSubmaps2D、Submap2D、Submap、MapLimits 进行了讲解,但是呢,对于栅格地图的整体框架与轮廓或许依旧十分困惑,来回顾一下:
(02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
这篇博客钟保存的地图:
该栅格地图可以理解为一个灰度图,颜色约白的像素,说明该像素对应地图坐标系中 cell 被占用的概率越少,这里的占用可以理解为障碍物。也就是说,越黑的区域其是障碍物的概率越大,如上图中墙壁是黑色的,等价于障碍物。另外,在地图的外面,也就是上图中的灰色区域,表示没有探测的区域,其对应的 cell 区域有可能没有被占用,也可能被占用了。
虽然最终的目的是需要形成这样一副栅格地图,但是源码中又是如何实现的呢?其核心就是 src/cartographer/cartographer/mapping/2d/grid_2d.h 文件中类 Grid2D 的成员变量:
std::vector<uint16> correspondence_cost_cells_; //地图栅格值
该变量记录着一个 Grid 中所有 cell 对应地图的栅格值(被占用概率越大,该值越大),根据该成员变量,就可以绘画出一块 Grid 区域的栅格地图。这里需要注意的一个点,correspondence_cost_cells_ 存储的元素为 uint16 类型,那么说明其取值范围是 [ 0 , 2 16 ] = [ 0 , 65536 ] [0,2^{16}]=[0,65536] [0,216]=[0,65536]。当然,最大值虽然是 65536,但是不一定所有数值都使用到了。