GPU-Accelerated Coverage  0.1.0
Compute coverage tours for known environment with articulated objects on GPU
GPU-Accelerated Next-Best-View Coverage of Articulated Scenes

This repository contains the code accompanying our paper on GPU-accelerated coverage of articulated scenes.

Disclaimer: The code in this repository is research code created for a feasibility study. The code is not ready for production and the authors will not provide support. Use at your own risk.

For details on the approach see our paper:

Stefan Oßwald and Maren Bennewitz: GPU-Accelerated Next-Best-View Coverage of Articulated Scenes. Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 2018.

License

The code is released under the 3-clause BSD license. See LICENSE for details.

Overview of the source code

Algorithms

The following table indicates the correspondence between algorithms described in the paper and source code classes.

Algorithm Main class Description
Alg. 1 CostMapRenderer Renders the 3D scene from a virtual top-down orthographic camera to an occupancy grid map and applies the Jump Flood Algorithm [1] to compute an inflation cost map.
Alg. 2 BellmanFordXfbRenderer Bellman-Ford algorithm for computing shortest path distances from the robot's current position to all map cells. The implementation does not preserve the actual shortest path. This implementation uses transform feedback buffers (XFB).
Alg. 3 BellmanFordRenderer Bellman-Ford algorithm for computing shortest path distances from the robot's current position to all map cells. The implementation does not preserve the actual shortest path. This implementation uses a flagging texture similar to the EBellflaging approach described in [2].
Alg. 4 VisibilityRenderer Computes the region of interest parts visible from a given viewpoint, marks the observed areas in the region of interest textures, and computes the information gain by counting newly observed pixels.
Alg. 5 PanoEvalRenderer Estimates utility maps based on our spherical panorama heuristic (see the paper for details).

Additional renderers

In addition to the algorithm renderers described above, the following renderers are available:

Main class Description
Renderer Renders the 3D scene from an external perspective camera.
PanoRenderer Renders a spherical panorama as an unfolded cube, image strip, equirectangular panorama, or cylindrical panorama.

Main functions and executables

Executable Main Description
render main.cpp Interactive program rendering the 3D scene and the intermediate outputs of the algorithms.
headless headless.cpp Command line program for running tasks (see below). This version uses the EGL backend.
headless-glfw headless-glfw.cpp Command line program for running tasks (see below). This version uses the GLFW backend.

Tasks available in the headless command line tool

Task Main class Description
video VideoTask Renders a video of the external camera view and a spherical panorama to /tmp/.
hillclimbing HillclimbingTask Iteratively refines the next best view pose and articulation configuration.
random RandomSearchTask Tries random views and articulations to find the next best view.
utility UtilityMapSystematicTask Systematically samples a utility map as ground truth for comparison with our heuristic.
utilityanimation UtilityAnimationTask Same as above, but renders a video over an articulation animation sequence.
benchmark BenchmarkTask Benchmarks the algorithms and records runtime statistics.

OpenGL wrappers and scene graph nodes

Class Description
Animation Animation of a scene graph node, corresponds to Assimp's aiAnimation struct.
Bone Bone of an object rig, corresponds to Assimp's aiBone struct.
CameraOrtho Orthographic camera.
CameraPerspective Perspective camera.
CameraPanorama Spherical panorama camera modelled as six perspective cameras with 90° opening angle covering the sides of a cube map.
Channel Animation channel (i.e., the animated property of a node), corresponds to Assimp's aiNodeAnim` struct.
CoordinateAxes Renders coordinate axes as three line segments.
Dot Renders a dot (a mesh consisting of a single point).
Image Class for loading and caching images. OpenCV is used for loading images if available, otherwise only portable pixmaps (PPM) can be parsed.
Light Lamp or light source, corresponds to Assimp's aiLight struct. Lighting is only used for visualization and is not relevant for the coverage algorithms, hence the implementation only supports a single point light source.
Material Mesh material, corresponds to Assimp's aiMaterial struct.
Mesh 3D mesh, corresponding to Assimp's aiMesh struct.
Node Scene graph node, corresponding to Assimp's aiNode struct.
Programs Collection of classes representing shader programs and providing access to shader variables.
Scene Scene graph, corresponding to Assimp's aiScene struct.
Texture Wraps an OpenGL texture object.

Other classes

Class Description
RobotSceneConfiguration Represents the combined configuration of the robot and the articulation objects.
Config Manages, loads, and stores configuration data.
Utilities Debugging functions and custom exceptions.

References