0% found this document useful (0 votes)
87 views19 pages

3D Perception For Mobile Manipulation With Octomap: Armin Hornung

OctoMap is a framework that uses an octree data structure to represent 3D environments for mobile manipulation. It allows for probabilistic representation of occupied and free space. The OctoMap framework implements functions for updating maps from sensor measurements, performing raycasting queries, and accessing map data. It is open source and integrated with ROS. Example uses include navigation in cluttered environments with robots like the PR2 and localization and mapping with humanoid robots like the Nao.

Uploaded by

fabromo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
87 views19 pages

3D Perception For Mobile Manipulation With Octomap: Armin Hornung

OctoMap is a framework that uses an octree data structure to represent 3D environments for mobile manipulation. It allows for probabilistic representation of occupied and free space. The OctoMap framework implements functions for updating maps from sensor measurements, performing raycasting queries, and accessing map data. It is open source and integrated with ROS. Example uses include navigation in cluttered environments with robots like the PR2 and localization and mapping with humanoid robots like the Nao.

Uploaded by

fabromo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

3D Perception for Mobile

Manipulation with OctoMap


http://octomap.github.io

Armin Hornung

Joint work with K.M. Wurm, M. Bennewitz, C. Stachniss, W. Burgard


3D Environment Representation for
Mobile Manipulation
 Integrate and store
multiple measurements

 Update map during


manipulation

 Reason about free and


unseen areas

 Memory-efficiency
2
Octree

 Tree-based data structure


 Recursive subdivision of
space into octants
 Volumes allocated
as needed
 Multi-resolution

3
OctoMap Framework
 Based on octrees
 Probabilistic representation of occupancy
 Volumetric model of occupied and free space
 Supports multi-resolution map queries
 Lossless compression
 Compact map files

4
OctoMap Framework
 Open source (BSD) implementation as
C++ library available at octomap.github.io

 Pre-built debian packages for ROS electric


to hydro, see www.ros.org/wiki/octomap

 ROS integration in packages octomap_ros,


octomap_msgs, and octomap_server

 Collision checks in FCL / MoveIt!


5
Map Update
 Occupancy modeled as recursive
binary Bayes filter [Moravec '85]

 Efficient update using log-odds

6
Map Update
 Clamping policy ensures updatability [Yguel '07]

 Update of inner nodes enables


multi-resolution queries

 Compression by pruning
a node’s identical children

[Kraetzschmar '04] 7
Sensor Model for Single Rays
 Ray casting from sensor origin to end point
 Mark last voxel as occupied, all other voxels
on ray as free
 Measurements are integrated
probabilistically
 Implemented in OcTree::computeRay(...)
and OcTree::insertRay(...)

end point
sensor origin
8
Sensor Model for 3D Scans
 Sweeping sensor, discretization into voxels
 Planes observed at shallow angle may
disappear in a volumetric map
 Solution: Update each voxel of a point cloud
at most once, preferring occupied endpoints
 Implemented in OcTree::insertScan(...)

9
Accessing Map Data
 Traverse nodes with iterators
for(OcTree::leaf_iterator it = octree.begin_leafs(),
end=octree.end_leafs(); it!= end; ++it)
{ // access node, e.g.:
std::cout << "Node center: " << it.getCoordinate();
std::cout << " value: " << it->getValue() << "\n";
}

 Ray intersection queries


 octree.castRay(...)
 Access single nodes by searching
OcTreeNode* n = octree.search(x,y,z);
if (n){
std::cout << "Value: " << n->getValue() << "\n";
}
10
Occupancy and Sensor Model
 Set occupancy parameters in octree
 octree.setOccupancyThres(0.5);
 octree.setProbHit(0.7); // ...setProbMiss(0.3)
 octree.setClampingThresMin(0.1); / ...Max(0.95)

 Check if a node is free or occupied


 octree.isNodeOccupied(n);

 Check if a node is “clamped”


 octree.isNodeAtThreshold(n);

11
Map File Format
 Full probabilities encoded in
.ot file format
 Maximum-likelihood map
stored as compact
bitstream in .bt file
 Exchange as ROS
message: octomap_msgs
package
2 byte

12
Map Visualization
 Native OctoMap
visualization:
octovis

 RViz:
 MarkerArray display from octomap_server
 octomap_rviz_displays
 MoveIt planning scene

13
Memory Usage (Freiburg campus)

14
Update and Query Times

Map update Traverse all leaf nodes


(Avg. over 100000 points)

15
Example Use Case: Navigation in
Clutter with the PR2

[Hornung et al., ICRA '12]


Example Use Case: Localization
and Mapping with a Nao humanoid

[Maier et al., HUMANOIDS '12]


Conclusion
 Memory-efficient map data structure based
on Octrees
 Volumetric representation of occupied,
free, and unknown space
 Implementation of common map
functionality: sensor updates, raycasting, ...
 Open source implementation with
integration into ROS and MoveIt!
 Code, mailing list, and example data sets
available at octomap.github.io

18
Thanks for your attention!

You might also like