GPU Voxels at a Cleanroom 3D Replanning scenario Realtime Shared Memory Viewer Replanning 3D View of Lab Environment 3D Replanning scenario

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 multimedia 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

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