GPU-Accelerated Coverage
0.1.0
Compute coverage tours for known environment with articulated objects on GPU
|
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.
The code is released under the 3-clause BSD license. See LICENSE for details.
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). |
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. |
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. |
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. |
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 aiNode Anim` 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. |
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. |