我自己编写的栅格地图建立的简单C++示例:
https://github.com/BIT-MJY/occupancy_grid_mapping
结合源码更有助于理解,欢迎点赞和转载~

首先,你需要知道激光slam中的栅格地图的详细含义

使用概率表示的,这一栅格被占据的状态。

真正表示的又不是概率,而是一种状态值,但间接反映了概率。

1.什么是栅格地图

https://zhuanlan.zhihu.com/p/21738718

这个知乎回答已经很清楚地做了解答。

2.Cartographer中的栅格地图是什么形式呢?

就是一种概率栅格地图。
从配置文件/home/mjy/dev/carto_ws/src/cartographer/configuration_files/trajectory_builder_2d.lua
中可以看出一些端倪

  submaps = {num_range_data = 90,grid_options_2d = {grid_type = "PROBABILITY_GRID",resolution = 0.05,},range_data_inserter = {range_data_inserter_type = "PROBABILITY_GRID_INSERTER_2D",probability_grid_range_data_inserter = {insert_free_space = true,hit_probability = 0.55,miss_probability = 0.49,},},}

下面进行详细介绍

2.1 栅格地图最基本的配置:

地图形式——PROBABILITY_GRID概率栅格地图
分辨率——0.05m
最大范围——30m
0.55和0.49可能是用来计算传感器的odd的:


hit概率0.55是指:p(z=1|s=1)
miss概率0.49是指:p(z=0|s=1)

2.2 关于submap子图的其他配置:

一个子图插入的laser数——90

2.3 关于栅格地图的坐标系和原点,以及世界点的坐标系和原点

在mapping/2d/map_limits.h中:

  // Returns the index of the cell containing the 'point' which may be outside// the map, i.e., negative or too large indices that will return false for// Contains().// 通过实际长度point找到cellEigen::Array2i GetCellIndex(const Eigen::Vector2f& point) const {// 看到左上角为栅格地图的原点,即栅格(0,0),且栅格地图是行主序// 如何理解呢?可以将栅格地图理解为左上角为原点(0,0),向右为x轴,向下为y轴// 而对于point点来说,坐标系是正常的如下图所示://                      x^//                     |//                     |//                     |//                     |//                     |//   <—————————————————0 //   y                  // 而对于栅格坐标系为://  0——————————————————> x//  |//  |//  |//  |//  |//  y //                 x // 所以需要用最大范围减去点的坐标,除以分辨率// 只有max_比point大二分之一分辨率的时候代表了栅格地图的原点,而max表示了地图的最大范围,因此我推断:// 返回的这个点 是 栅格的中心点,因此,栅格点(grid_point)是一个格子的中心// Index values are row major and the top left has Eigen::Array2i::Zero()// and contains (centered_max_x, centered_max_y). We need to flip and// rotate.return Eigen::Array2i(common::RoundToInt((max_.y() - point.y()) / resolution_ - 0.5),common::RoundToInt((max_.x() - point.x()) / resolution_ - 0.5));}

世界坐标是正常的我们认识的坐标,左下角为原点,向右为x,向上为y。

上述函数为,我们给一个真实长度,世界坐标点point (x,y),如何得到网格坐标点cell (x,y)

其中max_表示的是地图最大范围

解释都放在注释里面了。

这里有一个简单的栅格地图更新程序,可以克隆下来并阅读:

git clone https://github.com/BIT-MJY/occupancy_grid_mapping.git

cartographer栅格地图介绍相关推荐

  1. 【路径规划】基于灰狼算法实现机器人栅格地图路径规划matlab源码

    1 模型简介 1.1 灰狼算法介绍 1.2 栅格地图介绍 栅格地图有两种表示方法,直角坐标系法和序号法,序号法比直角坐标法节省内存 室内环境栅格法建模步骤 1.栅格粒大小的选取 栅格的大小是个关键因素 ...

  2. 【机器人栅格地图】基于灰狼算法求解栅格地图路径规划及避障含Matlab源码

    1 简介 1.1 灰狼算法介绍 1.2 栅格地图介绍 栅格地图有两种表示方法,直角坐标系法和序号法,序号法比直角坐标法节省内存 室内环境栅格法建模步骤 1.栅格粒大小的选取 栅格的大小是个关键因素,栅 ...

  3. 【路径规划】基于和声算法改进灰狼算法实现机器人栅格地图路径规划

    一.和声搜索算法介绍 和声搜索(Harmony Search, HS)算法是一种新颖的智能优化算法.类似于遗传算法对生物进化的模仿.模拟退火算法对物理退火的模拟以及粒子群优化算法对鸟群的模仿等,和声算 ...

  4. velodyne+cartographer 2D构建栅格地图

    velodyne+cartographer 2D构建栅格地图   已经许久未更新博客,最近在做项目指标测试的时候,需要与单车cartographer建图进行对比实验.由于实验室的多线激光雷达是velo ...

  5. 采用Cartographer、LIO-SAM构建三维点云地图,采用Octomap构建八叉树地图(三维栅格地图)

    采用Cartographer.LIO-SAM构建三维点云地图,采用Octomap构建八叉树地图(三维栅格地图) 采用Cartographer构建三维点云地图 采用的数据集是安装Cartographer ...

  6. Cartographer使用3D激光雷达建立2D导航图(概率栅格地图)

    Cartographer使用3d激光雷达建2d图 1.尝试过的方法 1.1 参考官方demo_backpack_3d.launch文件,直接建图 1.2在线或离线生成pbstream文件,再转成pgm ...

  7. (02)Cartographer源码无死角解析-(52) 2D点云扫描匹配→ceres扫描匹配:CeresScanMatcher2D→栅格地图残差

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录 ...

  8. cartographer坐标系_cartographer个人对框架解读

    cartographer的代码主要包括两个部分:cartographer和cartographer_ros. 一.cartographer和cartographer_ros的关系 cartograph ...

  9. SLAM Cartographer(10)子图

    SLAM Cartographer(10)子图 1. 活跃的子图 1.1. ActiveSubmaps2D 1.2. 构造函数 1.3. 新增子图函数 1.4. 创建插入器对象函数 1.5. 创建栅格 ...

  10. SLAM Cartographer(2)ROS封装

    SLAM Cartographer(2)ROS封装 1. ROS节点 2. cartographer_ros目录结构 2. 封装核心cartographer_ros 3. demo_backpack_ ...

最新文章

  1. Python制作抽奖系统
  2. 【蓝桥java】递归基础之车辆进出栈
  3. 多模态数据+知识图谱,这次你的疑难杂症有解了!
  4. 学习 TList 类的实现[5]
  5. mysql连接报错Access denied for user ‘root‘@‘localhost‘
  6. 不是架构的架构之四:业务层的实现与自动代理
  7. Spring–添加AOP支持
  8. bigdecimal判断等于0_vue2.0源码用到的工具函数,12个简易的复用函数,看看有多简单...
  9. python爬虫xpath提取数据_python爬虫的页面数据解析和提取/xpath/bs4/jsonpath/正则(1)...
  10. 关于spring+springMVC+myBatis的一些基础配置以及整合
  11. 4、线程--线程同部
  12. LaTeX安装及周报模板
  13. 华为手机助手上架流程_华为手机助手导入音乐文件在哪里看 详细步骤介绍
  14. 58-高级路由:双点双向重分发
  15. 订单信息表和订单明细表
  16. html5 pc端 客户端 web端的区别,wap版、手机版以及web的区别
  17. 文本工具来查看、分析、统计,比较
  18. CentOS安装GlusterFS
  19. 【优化布局】matlab基于禁忌搜索算法求解基站选址问题代码
  20. ROOT(a Data analysis Framework)-Note4: iSTEP day1-TH1TF1

热门文章

  1. Maxima 的基本微积分操作
  2. 酪氨酸激酶、自噬等抗肿瘤抑制剂
  3. 一文了解数据分析师与商业分析师的区别(二)
  4. Linux中RAID5搭建
  5. 用计算机算出身高,身高预测公式计算器靠谱吗
  6. 线性代数(四)n维向量
  7. Chapter 3 Raster Images
  8. flv格式怎么转换成mp4?视频格式转换步骤详解
  9. 游戏手柄(JoyStick)编程学习笔记(2)
  10. vue中使用(瀑布流)vue-waterfall-easy插件