GPU-Voxels is a CUDA based library which allows high resolution volumetric collision detection between animated 3D models and live pointclouds from 3D sensors of all kinds.
C++ CMake C GLSL Python Shell Other
Switch branches/tags
Nothing to show
Clone or download
cjue Release 1.2.0: Added Self-collision, Raycasting, Distance extraction,…
… VoxelList bounds checking

Thanks to Andreas Hermann for these additions:
- Implemented self collision checks. Also added an example and a testcase. Fixes #67 and resolves #68
- Improvements and fixes for prob voxels. Resolves #69
- Added example and vis config file
- Moved conversion from float to Probability to ProbabilisticVoxel
- Fixed the updates of probabilistic voxels.
- Added example about constructing a distance map from a probabilistic map
- Added a raycasting example. Resolves #70
- Rewrote the insertSensorData() function to resemble the current interfaces.
- Deleted old sensor / environment map code.
- Moved cSENSOR_MODEL_FREE and cSENSOR_MODEL_OCCUPIED to the common defines.
- Removed unnecessary meaning checks in ProbabilisticVoxelMap
- Added a missing template instance for the sensor model.
- Corrected all VisConfig files from the examples.
- Fixes in the visualizer for probability voxels and SWEPT_VOLUME_END

Possibly breaking changes:
- Added TemplateVoxelList::remove_out_of_bounds functionality.
- Always check for VoxelList map dimensions when inserting PointClouds into VoxelLists. Old behavior was not to check at all.
- Added mapToVoxels(linear_id, coords) to VoxelMapOperations. Available for host code too.
- Removed "linearIndexToCoordinates"
- Changed Logging in computeLinearLoad:
  - Inputting 0 items generates a warning now and lead to one block with one thread.
  - More than 64M items create an error message and only cMAX_NR_OF_BLOCKS blocks.

Additional changes:
- Added DVM::get(Squared)Distances(ToHost) functions: extract distance value for voxels at selected indexes
- Implemented TemplateVoxelList.merge(CountingVoxelList)
- Added TemplateVoxelMap::gatherVoxelsByIndex as basis for getDistances
- Added TemplateVoxelList::copyCoordsToHost
- Added test countingvoxellist_merge_into_bitvectorvoxellist_minimal
- Added test distance_extraction
- Fixed memory management for URDF RobotLink

Known issues:
- Octrees are broken on Pascal GPUs
  - confirmed on Titan Xp and GTX 1080 Ti
- The constant cMAX_NR_OF_BLOCKS is currently limited to 65535, while current CUDA devices support over 2 billion blocks
  - relevant during computeLinearLoad calls and collision checking
- the GLM headers provided by Ubuntu 16.04 have to be patched to allow usage of the visualizer.
  - see g-truc/glm#530
  - patch for /usr/include/glm/detail/func_common.inl in packages/gpu_voxels/doc/glm_fix_issu530.patch
Latest commit bf4ed09 May 1, 2018

GPU Voxels Logo

GPU-Voxels is a CUDA based library which allows high resolution volumetric collision detection between animated 3D models and live pointclouds from 3D sensors of all kinds. It is mainly developed for robotics planning and monitoring tasks. See our videos on to get an impression.


Find more information on our website Doxygen is available at

If you have questions or experience any problems with the software, please post to our GitHub Bugtracker: at

Install dependencies:

This software is tested under 64 Bit Ubuntu Linux 14.04 and 16.04. Find detailed installation and linking instructions in our Doxygen.


  • CUDA 7.5, 8.0 and 9.1
  • PCL
  • OpenNI
  • Boost
  • TinyXML (libtinyxml-dev)



  • ROS (Robot Operation System)
  • OpenNI to interface 3D cameras
  • urdfdom
  • orocos
  • kdl_parser


    mkdir build
    cd build
    cmake ..

==> This will also generate example programs and a visualization tool to see some live demos.

Doxygen files can be generated by

    make doc

Enabling C++11

C++11 is not enabled by default. To compile in C++11 mode add this to the top of packages/gpu_voxels/CMakeLists.txt: SET(CMAKE_CXX_STANDARD 11)

Known issues

There is a known bug in GLM on Ubuntu 16.04 that has to be patched to allow usage of the visualizer. Apply the patch described at to /usr/include/glm/detail/func_common.inl


The library is developed and maintained by:

  • Andreas Hermann

Contributors are (in temporal order):

  • Sebastian Klemm
  • Florian Drews
  • Matthias Wagner
  • Felix Mauch
  • Christian Jülg
  • Herbert Pietrzyk
  • Gabriele Bolano


The software in this repository underlies different licenses. Please consider the LICENSE.txt in the different package directories. Feel free to contact us for any licensing questions.

To clarify this:

  • The Build System (icmaker and according scripts) is distributed under BSD license
  • GPU-Voxels is distributed under the CDDL license
  • icl_core helber library is distributed under CDDL license

Please let us know if you are using the GPU-Voxels library, as we are curious to find out how it enables other people's work or research.

We would be grateful if scientific publications resulting from projects that make use of GPU-Voxels would cite our overview paper: A. Hermann, F. Drews, J. Bauer, S. Klemm, A. Roennau and R. Dillmann: “Unified GPU Voxel Collision Detection for Mobile Manipulation Planning” in Intelligent Robots and Systems (IROS 2014, Chicago, September 2014)

Copyright (c) 2014, FZI Forschungszentrum Informatik, Karlsruhe, Germany All rights reserved.


The GPU-Voxels library was developed at the FZI Forschungszentrum Informatik, Karlsruhe, Germany.

The research leading to the results has received funding from...

  • the German Federal Ministry of Education and Research (BMBF) under grant agreement no. 01IM12006C (ISABEL).
  • the European Union program Horizon 2020 under grant agreement no. 680734 (HORSE).
  • the Baden-Württemberg Stiftung through the KolRob reasearch project.