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

Release 0.8 available at Github. Now with Voxellists! Complies to CUDA 7.5.

Next round: Release 0.8 is available!

After a longer time without any news, here is a pretty long list of updates! We are now compatible with CUDA 7.5 (and will officially only support that from now on). On the content side, we implemented Voxellists and extended the Bitvoxel-Collision-Checks. As the lists only safe occupied Voxels, they give a huge speed-up when dealing with sparse data. So especially the combination of representing a Robot and its plans in Voxellists and look them up in the Octree of the live environment is a good practice!

Thanks to Felix Mauch it is now possible to have Bitvoxel-Collision checks that regard a “Bit-Margin”. So if the bits represent a point in time, this way a “fuzzy” collision check can be realized.

We have also done a lot of restructuring and optimization work to improve the overall software quality, fixed a bunch of bugs, and dropped our own copy of the CUB library in favour of Thrusts copy of the lib, that gets installed with CUDA.

Within FZI we have a growing list of use-cases, demos and extensions that heavily rely on GPU-Voxels. So I hope to publish some news on that soon, including motion planning with motion primitives, grasp planning and scheduling tasks in multi-robot scenarios.

Hope you like it and that it will help in improving your robots!


V 0.8 (2015-11-09):
- Compiles with CUDA 7.5
- Added Voxellists as new Datatype
 - Huge speedup compared to Voxelmaps with sparse data.
 - Added Bit-Shifting-Collisionchecks (Thanks to Felix Mauch)
 - Added Bit-Margin for Bitvoxel Collisionchecks (Thanks to Felix Mauch)
- General:
 - Removed superficial memory allocation from Voxelmap.
 - Added script to automatize binvox mesh voxelization
 - Improved PrimitiveArrays update speed when number of primitives stays constant.
 - Removed heaps of compiler warnings (Thanks to Christian Juelg)
 - Various Bugfixes, mainly in collision Kernels
- Renamings / moved code:
 - HighLevel-API: Added "merge" function.
 - CudaMath now longer requires an instance. Now it is a namespace.
 - VoxelType ==> BitVoxelMeaning
 - Fixed standard CTORs of basic datatypes for CUDA shared memory allocation.
 - Moved voxels to gpu_voxels namespace
 - Removed seom missleading typedefs
 - Moved Voxel definitions to own subfolder.
 - Removed dead code fragments.
- Octree:
 - Adapted to new API.
 - Removed its own voxellist. Now uses more general Voxellist.
 - Removed VoxelTypeFlags and replaced them by more general bitvectors.
 - Simplified Octree selftests and triggered them by Boost-Test.
 - Dropped CUB lib. Now using CUDAs version from Thrust.
- Robot representation:
 - Enhanced robot interface (jointnames and min max angles).
 - Restructured inheritance of robot implementations.
 - Fixed install of robot headers.
- Visualizer:
 - Updated Visualizer to new API.
 - Added new function to move cam in plane.
 - Switched from Octree to more general Cubelist interface,
 as this can also be used to visualize Voxellists.
 - Visualizer now cleans Shared-Mem files.
 - Added Script to generate color gradient config files for visualizer.
 - Fixed a bug in drawing the grid
- Example programs and Testcases:
 - Updated examples to new API.
 - Added more Boost-Tests.
 - Reordered model files.
- icl_core and basic libs:
 - Added performance monitor docu
 - Some new cmake magic
 - Improved ringbuffer
 - New Doxygen version.
 - Tinyxml cmake updated.
 - Added missing Findscripts for OpenNi.
Read more | Comments Off on Release 0.8 available at Github. Now with Voxellists! Complies to CUDA 7.5. | Nov 10, 2015

New publication at the European Conference on Mobile Robotics

We have published a new work on predictive collision detection using GPU-Voxels. The paper should be online within this year at IEEE-Explore and on my Research-Gate profile.

The contribution is on the combination of RGB-D Flow to create Swept-Volumes out of predicted motions in a pointcloud and check those for collisions with Swept-Volumes of planned robot motions. That way we can trigger replanning steps around a moving obstacle or stop the robot, before collisions can occur.

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)

Read more | Comments Off on New publication at the European Conference on Mobile Robotics | Nov 10, 2015

Release 0.7 available at Github. Now with ROS URDF support!

Good news everyone!

With version 0.7 the GPU Voxels lib can finally load URDF files! URDF stands for “Unified Robot Description Format” and is the common standard in ROS to describe robot’s kinematic structure and link geometries. The URDF parser of GPU-Voxels swaps mesh-files for pointcloud-files when loading a description. Also it builds up a kinematic tree with the help of Orocos KDL (this part is done in ROS via the TF tree). So now a ROS joint-message interface is pretty easy to implement and will be part of an upcoming example program. Have a look at the urdf-loader example to see how to interact with the new robot type. If you want to load your own robot, you will have to supply pointcloud representations of all links. These can be generated from meshes with Patrick Min’s great “binvox” tool. I will post a how-to on this site soon. I am sure this makes GPU-Voxels a lot more interesting, as most robots already feature an URDF model.

Best, Andreas

The changelog for 0.7 says:

V 0.7 (2015-06-10):
- Added URDF parser and interfaces to load ROS robots.
- Added URDF example program with HoLLiE robot model and URDF file.
- Unified API for DH-Parameter and URDF robots.
- Added name lookup to MetaPointClouds.
- Restructured CMake files to generate more descriptive report about missing libs.
- Fixed missing thrust include.
- Fixed color gradient in visualizer.
- Fixed DH transformations for prismatic links.
Read more | Comments Off on Release 0.7 available at Github. Now with ROS URDF support! | Jun 10, 2015

Release 0.6 fixes race condition with Octrees

Latest Version 0.6 is online at GitHub.
We fixed a race condition that occured, when visualizing more than one Octree with the visualizer. That also fixes the flickering that could occur when rendering Octrees.
Stuff gets more and more stable, as we approach Version 1.0 ((:
Also my implementation of an URDF parser that will allow you to load ROS compatible kinematics makes progress. I hope to include it in the upcoming release!


V 0.6 (2015-04-24):
- Fixed crahses of octree_provider command line interface resulting from race-conditions.
- Fixed flickering in Visualizer when drawing more then one Octree. Resulted from same race-conditions as above.
- Corrected axis order in visualizer console output.
- Fixed model loading path when not using GPU_VOXELS_MODEL_PATH
- Changed argument handling in command line interface for loading models from PCD only to more general pointcloud files.
Read more | Comments Off on Release 0.6 fixes race condition with Octrees | May 3, 2015

Release 0.5 fixes LoadBalancer Bug

Subsequent delivery: Version 0.5 is online at GitHub.
We could fix a bug in the loadbalancer that led to an endless loop in the program, when only little data was inserted into an octree. Also some minor bugs were removed.
Also you are now able to save and read all kinds of maps to and from disk.
Thanks to Felix Mauch, who fixed countless compiler warnings all over the code!


V 0.5 (2015-04-13):
- Release 0.5: Critical bugfixes and reduction of warnings.
- Fixed loadbalancer bug that occurred when inserting only very little data into an octree.
- Fixed bug in extraction of Octree data.
- Fixed color gradient along Z-Axis in viewer.
- Fixed overwrite of Swept-Volume subvolumes via provider in the Viewer.
- Fixed heaps of compiler warnings (Thanks to Felix Mauch).
- Renamed MapTypes to more understandable names.
- Implemented disk-reader and writer for generic Voxelmaps.
- Simplified file loading of pointclouds.
- Moved some math functions to more general file.
- Moved some DH computation code in preparation for URDF support.
- Reimplemented function to move focus point in Viewer.
- Removed dead code and dead files.
Read more | Comments Off on Release 0.5 fixes LoadBalancer Bug | May 3, 2015

Release 0.4 brings improved example programs

As anounced: A new Version 0.4 is online at GitHub.
The main intention was to fix the Viewers coordinate system and to improve the example programs.
I also added Viewer configfiles for almost all examples. Launch the viewer with gpu_voxels_visualization -c configfile.xml


V 0.4 (2015-03-09):
- Fixed coordinate system in the Viewer
- Improved Viewer XML Config parser
- Added possibility to control visibility of SweptVolume subvolumes from a provider program
- Improved pointcloud file loader (new datatype, scaling)
- Improved example programs, added viwer configfile for them
- Added missing pointcloud filess for the examples
- Moved performance monitor to icl_core
- Some smaller fixes regarding RAD / DEG
- Removed compiler warnings
Read more | Comments Off on Release 0.4 brings improved example programs | Mar 9, 2015

Updated Documentation

Hi everybody!

I finally managed to add some “getting started” documentation to this page on how to compile GPU-Voxels…
Please have a look at the new Documentation pages and the subpages on Prerequisites, Compilation and the Example Programs.
Now there is also an online Version of the (still not perfect) Doxygen API description.

I am currently fixing and improving the example programs and a bug in the 3D-viewer. So I think there will be an update on Github on Monday.


Read more | Comments Off on Updated Documentation | Mar 8, 2015

We proudly present version 0.3 of the GPU-Voxels Lib

Here it is! A new version of the GPU-Voxels Library!

Most important change: It compiles with the recent Version 6.5 of CUDA.
Get the release at
The reminder of the changelog reads like this:

V 0.3 (2015-02-26):
- Made changes in the include structure to allow compilation with CUDA 6.5 
  (no longer trying to compile Boost-SharedMem-Headers with NVCC)
- Added datatype "PrimitiveArray" to quickly visualize helpers like thousands of spheres or cubes.
- Added InsertMetaPointCloud option to give each sub-cloud an own voxel type
- Function to sync a MetaPointCloud back to Host Memory
- Speed up in clearing VoxelMaps
- Added an optional offset when intersecting maps. So you can move one map relative to another before intersecting them.
- Added parameter to Kinect Interface to support the new PCL interface where a Cam ID has to be specified.
- More documentation in Octree kernels
- Added more operators for primitive data types
- Added Binvox as file format to generate Pointclouds
- Added Example program to demonstrate the insertion of IBEO Sensor Pointclouds
- Added missing config file for example program that intersects live Kinect data with a robot model (RobotVsEnvironment)
- Open Issue: Flickering colors in Visualization


Read more | Comments Off on We proudly present version 0.3 of the GPU-Voxels Lib | Feb 26, 2015

Compilation problems with current CUDA Versions

Dear users,

unfortunately we experienced some problems when trying to compile GPU-Voxels with CUDA 6.5. We are working on that problem, but unless we (or you) find a solution, GPU-Voxels can only be compiled with CUDA 5.5

Please excuse that inconvenience, we are searching for a solution…




Read more | Comments Off on Compilation problems with current CUDA Versions | Jan 25, 2015

GPU-Voxels Talk at Universidad Nacional Autónoma de México


Thanks to the kind invitation of Professor Jesus Savage
I could introduce the GPU-Voxels library
to the students of the Universidad Nacional Autónoma de México.

The slides can be found here: 2014_10_10_GPU-Talk_Mexico_0.3

Read more | Comments Off on GPU-Voxels Talk at Universidad Nacional Autónoma de México | Oct 13, 2014