Video about online grasp planning

GPU Voxels at a Cleanroom 3D Replanning scenario Replanning Online grasp planning based on pointclouds of in-hand-camera 3D View of Lab Environment 3D Replanning scenario

Video about online grasp planning

Hey everyone!

There is a new video in the Demos section.

It demonstrates the calculation of finger angles for a multi-fingered hand via GPU-Voxels. The Swept-Volume collision tests allow to evaluate thousands of different grasp approaches per second. This is used by a hybrid Particle-Swarm-Optimization approach to find the best grasp (not shown in the video):

The video is additional material to our last paper “Eye in hand: Towards GPU accelerated online grasp planning based on pointclouds from in-hand sensor” that was presented on HUMANOIDS 2016.




Read more | Comments Off on Video about online grasp planning | May 9, 2017

The 1.0 Release is there!!

Voxel Victory

Hello GPU-Voxels users!

It is my pleasure to finally announce Version 1.0 of my framework and invite you to download or update it.
As always you find the new release at GITHub.

The most visible new features can be found in the visualizer, which now has an interactive right-click-menu to change settings and a bunch of new info text overlays.
In the background some bugs were fixes and smaller convenience features have been added (see changelog below for details).


Happy coding,



Changelog for Release 1.0: Added mouse GUI for visualizer (GVL4TW edition)
API breaking changes:
- PrimitiveArrays
  - Fixed the interface by adding metric AND Voxel commands. Fixes issue 41.
  - Renamed the enums for the PrimitiveArray types.

Major changes:
- Changes in CUDA CMake setup
- addMap() now returns a GpuVoxelsMapSharedPtr. Fixes issue 43.
  Throws a std::string in case of error (thanks to Herbert Piertrzyk).
- Generalized collide function of VoxelLists to work with VoxelMaps. Fixes issue 33.
- Fixed relative paths in URDF loding. Fixes issue 30.
- Visualizer:
  - Added a Right-Click-Menu in the visualizer (thanks to Herbert Piertrzyk). Fixes issue 35.
  - Added a bunch of info text overlays (thanks to Herbert Piertrzyk). Fixes issue 26.
- Implemented converter to create BitVectorVoxels from DistanceVoxels.
- Added a scaling function for PointClouds.

Minor changes:
- Improved API stability for DistanceMap computation (Thanks to Christian Jülg).
- New boost test cases:
  - Transformation of PointClouds
  - Collide functions for VoxelLists with VoxelMaps
  - Improved tests for DistanceMaps
- New examples:
  - PrimitiveArray interfaces
- Added div operator for Vector3i / float
- Added mul operator for Vector3f * Vector3f
- Added abs operator for Vector3f
- Added setters for rotations and translations for Matrix4f
- Fixed the SharedMemory transactions between Provider and Visualizer
- Right click info for Voxels in visualizer now also works on VoxelLists

Other changes:
- New coarse model of the SCHUNK SVH hand
- Documentation updates
- More CMake output, when libs can not be found
Read more | Comments Off on The 1.0 Release is there!! | Apr 27, 2017

Video featuring Distance Fields

Hey everyone!

I am proud to present a new entry in the Demos section.

We demonstrate the Euclidean Distance Transformation feature of GPU-Voxels which allows you to derive 3D Distance Fields from pointclouds with high performance. In the video a flying drone plans a path through a environment, sensed only with on-board sensors. From the data a distance map is built on the fly with 30 Hz. So for every Voxel a simple wavefront planner can query the closest obstacle (plus its distance) and find a path that keeps a safety margin from the walls and only chooses openings that are large enough for the drone:

Try the feature by yourself! The X-Mas Release of GPU-Voxels comes with a “distance-kinect” example.
Thanks to Christian Jülg for re-implementing the “Parallel Banding Algorithm” that derives the Distance Maps! Here is a link to Cao Thanh Tung‘s original work:




Read more | Comments Off on Video featuring Distance Fields | Jan 19, 2017

X-Mas Release (v0.93) – Distance Fields

GPU Voxels X-Mas Edition

GPU Voxels X-Mas Edition

Happy Holidays everyone!

Just for Christmas I finished the latest Release of GPU-Voxels which brings an amazing new feature:
Realtime distance field computation on large pointclouds (thanks to Christian Jülg)!!

Have a look at the Distance-Kinect example and have fun to inflate your avatar pointcloud (:
I already used this feature to implement a reactive inverse kinematics function for highly articulated robots, so that the robot maximizes free space which reaching a goal. Also we used the distance field to navigate a flying drone through a maze while keeping clearance to all obstacles (Video).

Of course there have been a bunch of Bugfixes and some more new features, so find the changelog below.
Download as always at:


All the best to you for 2017,




V 0.93 (2016-12-24):
API breaking changes:
- Multiplying a vector<int> with an int scalar now gives a vector<int>
- Removed offset when colliding VoxelLists as implementation was faulty
- Unified CTor of VoxelLists and VoxelMaps
- Unified spelling of insertPointcloud ==> insertPointCloud

Major changes:
- Added DistanceField calculations (thanks to Christian Jülg)
    - New DistanceVoxelMap type
    - Re-implementation of the Parallel Banding Algorithm (Original by Cao Thanh Tung)
    - Added according example and test cases
- Added BitMasked collision check and testcase for BitVoxels
- Implemented a HeighMap loader to populate 3D worlds from Bitmap files
- Added insertPointCloudIntoMap() to HighLevel-API
- Added collision functions between BitVectorVoxelList and BitVectorVoxelMap
- Improved Mutex-Locking (thanks to Christian Jülg)
    - No more busy waiting
    - Recursive locking now possible
- Reworked Boost-Tests to function as Benchmarks (Thanks to Herbert Pietrzyk)
- Improved BitVector code
    - Fixed error in Bit-negation
    - Added according testcase
- Fixed defaultCollider for BitVoxels (counted eBVM_FREE as collision previously)

Minor changes:
- Added screendump function for VoxelLists
- Fix in CMake to export CUDA dependency
- Restructured optional dependency management
- Improved the handling of warnings within Kernels (less printf spam)
- Visualizer config files: Added option to set color for all BitVoxelMeanings at once
- Consistently using RPY for geometry generation (instead of YPR formerly)
- Improved BitVoxelLists operations
    - Thrust performance optimization
    - Added according testcase

Other changes:
- Now compiles with CLang (fixed ambigous names)
- Improved docs
- Improved tescases for VoxelLists
- Fix for CUDA 7 on Ubuntu 16.04 (-D_FORCE_INLINES)
- Added UR10 & Robotique FTS model (10% larger, voxelized at 4mm)
- Added Pelican UAV model
- Corrected copy paste errors in CMake IC_BUILDER defines
- Removed own source version of TinyXML: Now using system lib
- Updated icmaker build tools
- Updated QT include dirs in icl_core
- icl_performance_monitor got some new functions
Read more | Comments Off on X-Mas Release (v0.93) – Distance Fields | Dec 25, 2016

Smaller update about math (v0.92)

And again: There is a new version on GitHub.
It now centralizes the math functions directly where you would expect them: Within the datatypes.
Of course this breaks existing code, but it is straight forward to fix. Just call the functions which previously existed in the gpu_voxels namespace on the datatype (e.g. .toRPY() on a Matrix3f).
The datatypes itself stay untouched.

And have a look at the wonderful new Readme which now comes in Markup ((:


Cheers, Andreas

Read more | Comments Off on Smaller update about math (v0.92) | Sep 16, 2016

Example on how to link against GPU-Voxels (v0.91)

Hello everyone!

I just pushed the 0.91 release of GPU-Voxels to GitHub.
It now includes an example on how to link against the lib via plain CMake.
(It also fixes a minor bug and allows you to visualize pointclouds as PrimitiveArrays).

Hope that helps!

Read more | Comments Off on Example on how to link against GPU-Voxels (v0.91) | Sep 14, 2016

Release 0.9 is out

Hi everyone!

Finally I could release a new version of GPU-Voxels at!
The release introduces a bunch of new features and makes everything more stable.
Also it compiles on Ubuntu 16.04!
Two little things are on the negative side:
– You probably need to patch your GLM library (see this issue: )
– The update breaks some API functions, but it should be easy to adapt in your code.




Here is the rather long changelog:

V 0.9 (2016-08-21):
API breaking changes:
 - GpuVoxels is now a singleton and has to be initialized
 - BitVoxelMeaning enum changed! 0 = Free, 1 = Occupied. More SV IDs.
 - Added as() operator to cast general maps into specific maps
 - Map-Offsets may now be negative, so Voxel-pointers changed datatype.
 - Shifted main API from general map type to specific implementations:
 Many functions can no longer be called on basic map types but only on
 specific maps. As not all map types offer all interfaces, this allowed
 us to remove unimplemented function stubs (thanks to Herbert Pietrzyk)
 - RPY rotation order changed to ROS standards:
 First rotated around roll, then pitch, then yaw
Major changes:
 - Unified map-locking for all map types to guarantee thread-safety
 - Added new Pointcloud class for single clouds (thanks to Herbert Pietrzyk)
 - Added Octree-API function: insertPointCloudWithFreespaceCalculation
 to trigger raycasting
 - Added option to interpret unknown cells of an octree as obstacles
 when checking collisions
 - Added tfHelper class to interact easily with ROS tf
 - New Math functions:
 - Added host function to invert matrices.
 Code thankfully copied from Maxim Singer
 - Function to convert Mat4 to Roll, Pitch, Yaw
 together with Boost tests
 - Vector3f now offers: apprx_equal, length, normalize, dot, cross
 - angleBetween two vectors, orientationMatrixDiff between two matrices
 - Matrix4f now offers: equality, approximate equality and subtract
 together with Boost tests
Minor changes:
 - Added visualizer config file and a python generator for random swept
 volume colors (this time for real)
 - New Boost testcases for Pointclouds and MetaPointClouds
 - Simplified sensor code for Raycasting in Octree
 - Restructured keyboard shortcuts in visualizer:
 - Added "command mode" to switch between data types so
 all Function keys can toggle maps of the selected kind.
 - Using ALT+digit to set decimal preposition of SweptVol IDs
 - Right-Click available for more datatypes in Visualizer to
 print voxel information
 - Fixed updates of subclouds in MetaPointClouds
 - Added sanity check in computeLinearLoad
 - Added Getter functions for GVL parameters
 - Added some general HTML pages to Doxygen docu (thanks to Darius Pietsch)
 - Unified probability type in all maps
 - Fixed memory leaks in MetaPointCloud
 - Added Kernel for GPU memory comparison
 - Unified geometric transformation kernels
 - Clarified singed and unsigned voxel indices (thanks to Christian Juelg)
 - GPU Voxels main class now checks for Compute Capability at init
 - Added PointCloud constructor to load file
Other changes:
 - Compiles with Ubuntu 16.04
 - Added CMake macro to remove VTK defines
 - Required lib glm fix:
 - Added enlarged UR5 model
 - Updated list of contributors
Read more | Comments Off on Release 0.9 is out | Aug 25, 2016

New videos available

Hi everyone,

I just wanted to announce two new videos:

Video Preview of Shared Workspace

The YouTube video shows an application scenario with a shared workspace where the motions of the robot (represented as temporally encoded Swept-Volumes) are monitored via two Kinect cameras. As soon as an obstacle is detected in the upcoming trajectory, the robot stops and chooses another (collision free) subtask to execute. GPU-Voxels acts as some kind of relay between ROS MoveIt and the robot controller, so that planned motions can be monitored online.
Video preview of predictive collision detection.

This video (third one on the linked demos page) shows our work on predictive collision detection: We analyze motion in RGB-D video input and project objects movements into the future.
This generates a Swept-Volume that can be intersected with the Swept-Volumes of planned robot motions to anticipate probable upcoming collisions.
Big thanks to Felix Mauch for his great work on this toppic!
For further info please read our paper or contact me.

A. Hermann, F. Mauch, K. Fischnaller, S. Klemm, A. Roennau, R. Dillmann,
“Anticipate your surroundings: Predictive collision detection between dynamic obstacles and planned robot trajectories on the GPU”
in European Conference on Mobile Robotics (ECMR 2015, Lincoln, September 2015)

We are also making progress on bringing GPU-Voxels to a flying drone scenario, mobile platforms (motion primitive planning in simulation is already up and running) and into real-time grasp planning. So stay tuned!


Read more | Comments Off on New videos available | May 6, 2016

New Update available: Version 0.82 offers new features and fixes some severe bugs

Again we have a smaller update to announce:
During my work on a grasp planning system I unfortunately encountered some bugs and identified missing features.
Both is fixed with this release (:
MetaPointClouds now offer functions for geometric transformation and offer Deep Copy operators that also cover the data from the GPU RAM.
Also a new collision detection pair was added: ProbabilisticVoxelMaps can be checked against Voxellists by now.
Also some bugs were fixed according Thread-Locking and transformations.

V 0.82 (2016-02-12): 
- Fixed severe Bug in the locking of Voxellists. Warning: This only concerns VoxelLists. 
- Added collision check between ProbabilisticVoxelMaps and VoxelLists. 
- Added transform functionality to MetaPointClouds and removed it from Robot classes. 
- Fixed Vec3ToMat4() function. 
- Implemented Deep-Copy operator for MetaPointClouds. 
- Implemented Pointcloud-Offsets for geometry entities of URDF models. 
    - Warning: Only translation, NO rotation available here! 
- Added new struct to describe oriented boxes. 
- Added new file for helper functions to generate pointclouds from geometric primitives. 
- Fixed RPY rotation matrices. 
- Added Boost testcase for shifted collision checks. 
- Added script to generate Visualizer configuration with random colors for SweptVolume IDs. 
- Refined the models of the SVH with 0.4 mm resolution.
Read more | Comments Off on New Update available: Version 0.82 offers new features and fixes some severe bugs | Feb 12, 2016

New Release available: V.0.81: Enhanced Voxellists and fixed Bugs

New Release available: V.0.81
As I am currently preparing a larger tech-demo of GPU-Voxels in the context of ISABEL ( I was able to push a new version shortly after the 0.8 release.
We noticed a bug in the MetaPointClouds that occurred when one tried to modify a sub-pointcloud that wasn’t at the end of the structure. That got fixed now.
Also Christian Jülg added a nice feature to the Visualizer: You are now able to only visualize a slice of the world!
Last but not least I added boolean subtract operation for VoxeLists, so now you can merge and subtract them.

V 0.81 (2015-12-14): 
- Fixed severe Bug in MetaPointCloud::updatePointCloud() that lead to Segfaults. 
- Implemented new functions for VoxelLists: 
    - Equality check (Mainly for Boost-Tests) 
    - Subtraction (Bool operation) 
    - Collisioncheck that counts the collisions per Voxel-meaning. 
    - ShrinkToFit: Frees preallocated Thrust memory 
- Fixed error handling when reading and writing all data structures. 
- Added more Boost testcases. 
- Fixed URDF robot rendering when for collision meshes. 
- Made some const functions const. 
- Visualizer: 
    - Improved python script to generate color gradients for Visualizer configfiles. 
    - Made Voxellist Voxels clickable 
    - Enhanced reliability of Visualizer (Thanks to Christian Juelg) 
    - Added slicing functionality to Visualizer (Thanks to Christian Juelg) 
- Improved script to delete intermediate files. 

Read more | Comments Off on New Release available: V.0.81: Enhanced Voxellists and fixed Bugs | Dec 14, 2015