octomap  1.8.0
 All Data Structures Namespaces Files Functions Variables Typedefs Friends Macros Pages


The OctoMap library implements a 3D occupancy grid mapping approach. It provides data structures and mapping algorithms. The map is implemented using an Octree. It 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. If no information is available about an area (commonly denoted as unknown areas), this information is encoded as well. 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 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.

Octomap was developed by Kai M. Wurm and Armin Hornung, and is currently maintained by Armin Hornung. A tracker for bug reports and feature requests is available available on GitHub. You can find an overview at http://octomap.github.com/ and the code repository at https://github.com/OctoMap/octomap.


See the file README.txt in the main folder.


See the file CHANGELOG.txt in the main folder or the latest version online.

Getting Started

Jump right in and have a look at the main class octomap::OcTree OcTree and the examples in src/octomap/simple_example.cpp. To integrate single measurements into the 3D map have a look at OcTree::insertRay(...), to insert full 3D scans (pointclouds) please have a look at OcTree::insertPointCloud(...). Queries can be performed e.g. with OcTree::search(...) or OcTree::castRay(...). The preferred way to batch-access or process nodes in an Octree is with the iterators leaf_iterator, tree_iterator, or leaf_bbx_iterator.


The OcTree class is derived from OccupancyOcTreeBase, with most functionality in the parent class. Also derive from OccupancyOcTreeBase if you you want to implement your own Octree and node classes. You can have a look at the classes OcTreeStamped and OcTreeNodeStamped as examples.

Start the 3D visualization with: bin/octovis

You will find an example 3D scan (please bunzip2 first) and an example OctoMap .bt file in the directory share/data to try. More data sets are available at http://ais.informatik.uni-freiburg.de/projects/datasets/octomap/.