Release 1.2.1 and 1.2.2: Octrees and integers are fun!

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 1.2.1 and 1.2.2: Octrees and integers are fun!

Dear GPU-Voxels users, we just released version 1.2.2.

As always you find the new release at GitHub.
This release fixes some important bugs, most of which affect Ubuntu releases newer than 16.04 and one affecting Octree data-structures on Pascal GPUs.

One important addition is GpuVoxelsMap::insertCoordinateList, which takes as parameter a vector of coordinates where voxels should be inserted into a data-structure. This is important for de-/serialization workflows, where voxels are serialized from device memory and need to be reinserted.

The new deserialization functions also allowed the implementation of integer-based geometry generation functions, like this one:
geometry_generation::createBoxOfPoints(corner_min, corner_max, delta, side_length);

Alongside this we added a new example:

  • geometrygeneration
The new GeometryGeneration example as seen in gpu_voxels_visualizer

The new GeometryGeneration example as seen in gpu_voxels_visualizer

Happy coding,
Christian

 

Changelog for Release 1.2.1:
Octree and 18.04 bugfixes, insertCoordinateList and geometry generation with integer coordinates.

Important Bufixes:
– Octrees issues on Pascal GPUs have been fixed. Fixes #60. Thanks to Florian!
– Icmaker updated to avoid issues on CMake 3.6.2 and newer. Fixes #58
– Fix Boost 1.65.1 compatibility issues for Ubuntu 18.04
– Fix CUBIN compilation in code=sm_** settings. Thanks to @r2b0 and Florian! Fixes #73 and #54

Known Issues:
– the GLM headers provided by Ubuntu 16.04 have to be patched to allow usage of the visualizer.
– see https://github.com/g-truc/glm/issues/530
– patch for /usr/include/glm/detail/func_common.inl in packages/gpu_voxels/doc/glm_fix_issu530.patch
– Cuda 8.0: Code compiled with Cuda 8.0 works fine with older GPU drivers such as 375.66, but there are runtime errors with driver 384.111 and newer
– produces runtime error “PTX JIT compilation failed”
– Eigen 3.3.4 and 3.3.5 issue with CUDA 9.0, 9.1, 9.2: Error: class “Eigen::half” has no member “x”.
– Can be fixed by using latest unstable version of Eigen
– 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

Possibly breaking changes:
– TemplateVoxelList::getDimensions returns (size,1,1) instead of (size,0,0)
– Important: TemplateVoxelList::getDimensions does not depend on m_ref_map_dim, unlike TemplateVoxelList::getMetricDimensions!

Additional changes:
– New example: GeometryGeneration showcases
– New function GpuVoxelsMap::insertCoordinateList and geometry generation with integer coordinates
– Example: geometry_generation::createBoxOfPoints(corner_min, corner_max, delta, side_length);
– Available for maps, lists and octrees. Can create boxes, spheres and cylinders. Thanks to Herbert for his contribution!
– GpuVoxels::insertBoxIntoMap now uses the integer coordinate based creation and insertion functionality, avoiding discretization issues
– Remove warnings regarding logging and visualizer initialization. Fixes #72
– Fix visualizer warning by always creating the shared memory segment on initialization. Fixes #72
– Removed unused shader loading code
– Updated URDF code for compatibility with new ROS releases

Changelog for Release 1.2.2:
Fix missing CUDA include and link directive in gvl_ompl_planner and example_howto_link

Read more | Comments Off on Release 1.2.1 and 1.2.2: Octrees and integers are fun! | Aug 29, 2018

Release 1.2: Self-collision checks, Raycasting and voxel list bound checking

Dear GPU-Voxels users, we just released the 1.2.0 version!

As always you find the new release at GitHub.

Raycasting in a probabilistic voxelmap with a sensor in the lower right. Red voxels have a low occupation probability, while blue voxels have a high probability of occupation.

 

The new release includes new features such as self-collision checking, raycasting in probabilistic voxelmaps, efficient extraction of specific voxels from voxelmaps, as well as bounds checking for point-cloud insertion into voxel lists.

Alongside these changes there are new tests and new examples:

  • urdf_loader_self_coll
  • raycasting_sensor_example (seen in the image on the right)
  • prob_voxels
  • prob2distmap

We are still investigating known issues with octrees on Pascal GPUs and will release fixes for them as soon as possible.

 

Happy coding,
Christian

 

Changelog for Release 1.2.0:

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
Read more | Comments Off on Release 1.2: Self-collision checks, Raycasting and voxel list bound checking | May 2, 2018

Presentation at University of Agder, Norway

Hello GPU-Voxels users,

I got the kind invitation by Professor Geir Hovland of the University of Agder in Norway to talk about the library and its usage:
https://sfi.mechatronics.no/?p=1447

I am curious to see the research at the SFI Offshore Mechatronics lab and to meet some new users!

So if you happen to be in Agder on March 13th, 2018, I am sure you are welcome to join the talk (:

Best,
Andreas

Read more | Comments Off on Presentation at University of Agder, Norway | Feb 16, 2018

V1.1 – New Year Release

gvl_ompl_planning UR10 6DOF arm motion

Dear GPU-Voxels users, the new release is here!

The bugfixes and new features in Version 1.1 are now available. With this release I take over as lead maintainer for the framework, while Andreas will of course continue to use it and to contribute to it.

As always you find the new release at GitHub.

Most of the changes are bugfixes and changes that improve the debugging process. Also, the new CountingVoxelList was added to offer pointcloud density filtering on the GPU.

One major addition by Andreas Hermann is the gvl_ompl_planning example that links in GPU-Voxels and uses an OMPL planner to move a 6DOF arm model through an environment held in GPU-Voxels data structures. Take care of the README file in that examples folder to avoid issues relating to C++11 and PCL versions.

We are still investigating a couple of known issues in relation with Pascal GPUs and will release fixes for them as soon as possible.

 

Happy coding,
Christian

Update 1: Release 1.1.1 fixes a missing icl_core dependency in gvl_ompl_planning/CMakeLists.txt
Update 2: Release 1.1.2 fixes Cuda 9.1 incompatibility issues

 

Changelog for Release 1.1: New Year Release
Known issues:
- Octrees are broken on Pascal GPUs
  - confirmed on Titan Xp and GTX 1080 Ti
- the GLM in Ubuntu 16.04 has to be patched to allow usage of the visualizer.
  - see https://github.com/g-truc/glm/issues/530
  - patch for /usr/include/glm/detail/func_common.inl in packages/gpu_voxels/doc/glm_fix_issu530.patch

API breaking changes:
- GpuVoxels
  - addMap returns null-initialized shared_ptr if map already exists
  - lockSelf, lockBoth & Co removed, replaced by exception-safe lock_guard
  constructs to improve debugging
- TinyXML
  - use system version from APT package libtinyxml-dev

Major changes:
- Changes in CUDA CMake setup
  - uncomment SET(CMAKE_CXX_STANDARD 11) at the top of CMakeLists.txt to activate C++11 mode
  - set -maxrregcount=63 to avoid errors on desktop GPUs with 1024 threads per block
  - always use ICMAKER_CUDA_CPPDEFINES to pass parameters to nvcc
- Added OMPL planning example gvl_ompl_planning  (Thanks to Andreas Hermann)
  - requires C++11
  - incompatible with GPU-Voxels built with PCL 1.7
- Added model "ur10_coarse" voxelized at 9mm
- Added CountingVoxelList to offer pointcloud density filtering  (Thanks to Herbert Pietrzyk)
  - Use remove_underpopulated(minimum_count) to remove outliers
  - Use subtractFromCountingVoxelList to remove the robot and static objects
- Added BitVoxelMap collision with ProbVoxelmap
- ProbVoxelMap
  - insert() parses BitVoxelMeaning to allow freeing single voxels
  - SVCollider checks for noneButEmpty instead of isZero
- Fix CUDA 9 incompatibilities, issue 63
  - version macro
  - cub namespace
  - __ballot vs __ballot_sync

Minor changes:
- DistanceVoxelTest uses double buffering of DistanceVoxelMap to avoid flickering
- ProbVoxelMap: Speed up the clearing of ProbVoxelMap by using memset instead of ctor calls for every voxel
- C++11 fixes
  - icl_core_logging operator<< stringstream bug
  - various fixes collected by dybedal in issue 55
- VoxelList collision
  - added test cases and examples
- fixed memory leaks in TemplateVoxelList
- fixed PCL dependency of examples and helpers, see issue 61
- fix computeLinearLoad returning grid and block size 0
- added many checks after kernel launches to improve error discovery

Other changes:
- Documentation updates
Read more | Comments Off on V1.1 – New Year Release | Feb 5, 2018

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.

 

Cheers,

Andreas

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,

Andreas

 

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: http://www.comp.nus.edu.sg/~tants/pba.html

 

Cheers,

Andreas

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: https://github.com/fzi-forschungszentrum-informatik/gpu-voxels

 

All the best to you for 2017,

Andreas

 

 

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!
Andreas

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