RGBD SLAM 的目的有两个:
估计机器人的轨迹 并建立正确的地图.
在程序中 根据优化后的位姿 拼接点云 最后构成地图.
这种做法很简单, 但有一些明显的缺陷:

  • 地图形式不紧凑.

点云地图通常规模很大 所以一个 pcd 文件也会很大.
一张 640 x 480 的图像, 会产生 30 万个空间点, 需要大量的存储空间.
即使经过一些滤波之后, pcd 文件也是很大的.
而且讨厌之处在于, 它的 大 并不是必需的.
我们并不特别关心这些东西. 把它们放在地图里是浪费空间.

  • 处理重叠的方式不够好

在构建点云时 我们直接按照估计位姿拼在了一起.
在位姿存在误差时, 会导致地图出现明显的重叠.
例如一个电脑屏变成了两个, 原本方的边界变成了多边形.

  • 难以用于导航

说起地图的用处 第一就是导航啦.
有了地图 就可以指挥机器人从 A 点到 B 点运动,
但是 给你一张点云地图 是否有些傻眼了呢?
哪些地方不可通过 才能完成导航呀! 光有点是不够的!

octomap 就是为此而设计的!
它可以优雅地压缩、更新地图 并且分辨率可调!
它以八叉树(octotree 后面会讲)的形式存储地图,
相比点云, 能够省下大把的空间.
octomap 建立的地图大概是这样子的: (从左到右是不同的分辨率)

由于八叉树的原因 它的地图像是很多个小方块组成的(很像 minecraft).
当分辨率较高时, 方块很小; 分辨率较低时, 方块很大.
因此你可以查询某个方块或点 是否可以通过
简而言之 环境较大时采用较低分辨率

OctoMap An Efficient Probabilistic 3D Mapping Framework Based on Octrees

The OctoMap library implements a 3D occupancy grid mapping approach,
providing data structures and mapping algorithms in C++ particularly
suited for robotics.
The map implementation is based on an octree and is designed to meet the
following requirements:

  • Full 3D model

The map is able to model arbitrary environments without prior assumptions
about it.
The representation models occupied areas as well as free space.
Unknown areas of the environment are implicitly encoded in the map.
While the distinction between free and occupied space is essential for safe
robot navigation,
information about unknown areas is important,
e.g., for autonomous exploration of an environment.

  • Updatable

It is possible to add new information or sensor readings at any time.
Modeling and updating is done in a probabilistic fashion.
This accounts for sensor noise or measurements which result from
dynamic changes in the environment,
e.g., because of dynamic objects.
Furthermore, multiple robots are able to contribute to the same map
and a previously recorded map is extendable when new areas are explored.

  • Flexible

The extent of the map does not have to be known in advance.
Instead, the map is dynamically expanded as needed.
The map is multi-resolution so that, for instance,
a high-level planner is able to use a coarse map,
while a local planner may operate using a fine resolution.
This also allows for efficient visualizations which scale
from coarse overviews to detailed close-up views.

  • Compact

The map is stored efficiently, both in memory and on disk.
It is possible to generate compressed files for later usage
or convenient exchange between robots even under bandwidth constraints.

Detailed information about the implemented approach and evaluations can
be found in the paper
“OctoMap: An Efficient Probabilistic 3D Mapping Framework Based on Octrees” (PDF)
(or get from this -> mirror)
published in the Autonomous Robots Journal.

The OctoMap library is available as a self-contained source distribution for
Linux (recommended), Mac OS and Windows.
It was developed by Kai M. Wurm and Armin Hornung,
and is currently maintained by Armin Hornung.
We would like to thank all additional authors for their contributions.

3d mapping with octomap

octomap_mapping(octomap_server) + ‘3d pointcloud'(stereo to 3d pcl)

sudo apt-get install ros-kinetic-octomap-mapping

more TODO

see and reference



a collection / overriew / master / book / … of SLAM
/ slam methods / resources / projects / …!



slam overriew


use one or more

  • laser scan / lidar
  • imu
  • odometry
  • visual rgbd / stereo / monocular
  • visual odometry
  • pointcloud
  • 3d pointcloud
  • ir
  • ultrasound

slam category

  • laser slam
  • visual slam
  • 3d slam
  • laser and visual slam
  • laser and odometry slam
  • laser and imu slam


  • occupancy grid map
  • pointcloud / 3d pointcloud / pointcloud map
  • odometry

further more

  • plan plan
  • path optimization
  • move
  • obstacle avoidance
  • loop closure


  • hector
  • gmapping
  • rtabmap


  • amcl
  • gps (gps localization)
  • indoor localization

path plan

  • move base
  • path optimization
  • dynamic path


  • move base
  • obstacle avoidance
  • by controller

slam list

see also