Skip to content

Commit

Permalink
Release 1.1: Lots of fixes, new CountingVoxelList, new gvl_ompl_plann…
Browse files Browse the repository at this point in the history
…ing example and better C++11, Ubuntu 16.04 support

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 g-truc/glm#530
  - patch for /usr/include/glm/detail/func_common.inl in packages/gpu_voxels/doc/glm_fix_issu530.patch
- Cuda 9.1
  - many incompatibilities are fixed, but there are still failing tests in the voxellist and octree test-suites

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
  • Loading branch information
cjue committed Feb 5, 2018
1 parent d366028 commit d9914ac
Show file tree
Hide file tree
Showing 139 changed files with 3,955 additions and 1,775 deletions.
3 changes: 2 additions & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ The software in this repository underlies different licenses.
Please consider the LICENSE.txt in the different package directories.

To clarify this:
- The Build System (icmaker and according scripts) is distributed under BSD license
- The Build System (icmaker and accompanying scripts) is distributed under BSD license
- GPU-Voxels is distributed under the CDDL license
- PBA kernel code in GPU-Voxels is distributed under the BSD-like license found in LICENSE_PBA.txt
- icl_core helber library is distributed under CDDL license
18 changes: 16 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,16 @@ Find detailed installation and linking instructions in our Doxygen.

**Core:**

- CUDA > 6.5
- CUDA 7.5 or 8.0 (9.1 not fully supported yet)
- PCL
- OpenNI
- Boost
- TinyXML (libtinyxml-dev)

**Visualizer:**

- GLEW (libglew, libglew-dev)
- GLM (libglm-dev)
- GLM (libglm-dev). Probably you will have to patch one file: See https://github.com/g-truc/glm/issues/530
- OpenGL
- GLUT (freeglut3, freeglut3-dev)

Expand All @@ -50,6 +51,13 @@ 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 https://github.com/g-truc/glm/issues/530 to /usr/include/glm/detail/func_common.inl

## Maintainers:
The library is developed and maintained by:

Expand All @@ -63,6 +71,7 @@ Contributors are (in temporal order):
- Felix Mauch
- Christian Jülg
- Herbert Pietrzyk
- Gabriele Bolano

## License:
The software in this repository underlies different licenses.
Expand Down Expand Up @@ -93,3 +102,8 @@ The **GPU-Voxels** library was developed at the *FZI Forschungszentrum Informati
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).
**European Union** program **Horizon 2020**
under grant agreement no. 680734 (HORSE).
**Baden-Württemberg Stiftung**
through the KolRob reasearch project.

104 changes: 103 additions & 1 deletion changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,6 @@ Minor changes:
- Deleted some examples that were not usable.
- Removed PointCloudOperations as they were unused.


V 0.93 (2016-12-24):
====================
API breaking changes:
Expand Down Expand Up @@ -299,3 +298,106 @@ Other changes:
- Updated icmaker build tools
- Updated QT include dirs in icl_core
- icl_performance_monitor got some new functions

V 1.0 (2017-04-27):
====================
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

V 1.1 (2018-01-12):
====================
New Year Release:
Lots of fixes and better C++11 compatibility. Partial Cuda 9.1 support.

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
- Cuda 9.1
- many incompatibilities are fixed, but there are still failing tests in the voxellist and octree test-suites

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



58 changes: 58 additions & 0 deletions gvl_ompl_planning/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# this is for emacs file handling -*- mode: cmake; indent-tabs-mode: nil -*-

# ======================================
# CMakeLists file to demonstrate how to use GPU Voxels as a collision checker in OMPL:
# ======================================

cmake_minimum_required (VERSION 2.8)
SET(CMAKE_CXX_STANDARD 11)

project (gvl_ompl_planning)

# First we have to find our dependencies:
FIND_PACKAGE(icl_core REQUIRED )
FIND_PACKAGE(gpu_voxels REQUIRED)
FIND_PACKAGE(Boost COMPONENTS system REQUIRED)
FIND_PACKAGE(CUDA REQUIRED)
FIND_PACKAGE(ompl REQUIRED)


# This is a quirk and should be removed in upcoming versions
# If you built GPU Voxels without ROS support, remove this.
FIND_PACKAGE(orocos_kdl REQUIRED)

# A little debug info:
MESSAGE(STATUS "GVL include dirs are: ${gpu_voxels_INCLUDE_DIRS}")
MESSAGE(STATUS "OMPL include dirs are: ${OMPL_INCLUDE_DIRS}")

# Also we have to inherit some Environment definitions required for our base libs:
add_definitions(
${icl_core_DEFINITIONS}
${gpu_voxels_DEFINITIONS}
)


# Create a library that uses GPU Voxels:
add_library (gvl_ompl_planner_helper gvl_ompl_planner_helper.cpp)

target_include_directories (gvl_ompl_planner_helper
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC ${gpu_voxels_INCLUDE_DIRS}
PUBLIC ${CUDA_INCLUDE_DIRS}
PUBLIC ${OMPL_INCLUDE_DIRS}
PUBLIC ${orocos_kdl_INCLUDE_DIRS} # this should be removed in upcoming versions.
)

# Add an executable that calls the lib:
add_executable (gvl_ompl_planner gvl_ompl_planner.cpp)

# Link the executable to the library.
# We currently also have to link against Boost and icl_core...
target_link_libraries (gvl_ompl_planner
LINK_PUBLIC gvl_ompl_planner_helper
LINK_PUBLIC ${Boost_SYSTEM_LIBRARY}
LINK_PUBLIC ${icl_core_LIBRARIES}
LINK_PUBLIC ${gpu_voxels_LIBRARIES}
LINK_PUBLIC ${OMPL_LIBRARIES}
)

57 changes: 57 additions & 0 deletions gvl_ompl_planning/README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
== Planning example combining OMPL and GPU-Voxels ==

This example uses GPU-Voxels data structures and collision checking to plan the movement of a 6DOF robot arm in OMPL.

== Requirements ==

* OMPL from ROS Kinetic
* GPU-Voxels built without PCL support, or linked against a C++11 compatible version like 1.8
* CUDA 8.0

== Setup ==

* build GPU-Voxels with C++11 enabled and install to gpu-voxels/export

cd <gpu-voxels-path>
mkdir build
cd build
cmake -DCMAKE_DISABLE_FIND_PACKAGE_PCL=TRUE ..
make && make install

* build planner

cd <gpu-voxels-path>/gvl_ompl_planning
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=<gpu-voxels-path>/export ..
make

== Running the planner ==

* Launch planner
export GPU_VOXELS_MODEL_PATH=<gpu-voxels-path>/packages/gpu_voxels/models/
./gvl_ompl_planner

* Start Visualizer
<gpu_voxels>/build/bin/gpu_voxels_visualizer


== When building GPU-Voxels with PCL 1.8.1 ==
* build PCL 1.8.1 from source

* build GPU-Voxels with PCL 1.8.1
cd build
cmake .. -DCMAKE_PREFIX_PATH=~/pcl-1.8.1/build:$CMAKE_PREFIX_PATH # use pcl version 1.8.1
make && make install
# run "bin/gpu_voxels_visualizer" after starting gvl_ompl_planning

* build gvl_ompl_planning
cd gvl_ompl_planning
mkdir build
cd build
export LD_LIBRARY_PATH=~/pcl-1.8.1/build/lib:$LD_LIBRARY_PATH # if you still have pcl1.7 installed
cmake -DCMAKE_PREFIX_PATH=<gpu-voxels-path>/export:~/pcl-1.8.1/build/lib/ ..
make
ldd gvl_ompl_planner | grep -F "libpcl" # make sure there are no pcl 1.7 libraries linked in
./gvl_ompl_planner

Loading

0 comments on commit d9914ac

Please sign in to comment.