|
supereight
|
Welcome to supereight 2: a high performance template octree library and a dense volumetric SLAM pipeline implementation.
supereight 2 is a complete rewrite of the original supereight. It adds state-of-the-art mapping features while also making the library more flexible and easier to use.
supereight 2 follows semantic versioning.
Install the dependencies
On Debian/Ubuntu you can install all of the above by running:
Clone the repository and its submodules:
Build in release mode:
You can install the library after building:
You can then use supereight 2 in your CMake project by adding find_package(Supereight2 REQUIRED) and linking against SRL::Supereight2.
To uninstall the library:
Online API documentation can be found here.
If you have Doxygen installed you can build a local copy of the documentation in doc/html by running make doc.
Download the ICL-NUIM datasets:
Copy the configuration file into the dataset folder and run supereight:
The map is templated based on field type, colour, semantics, map resolution and block size. The following map types are currently supported:
| Field Type | Colour | Semantics | Resolution |
|---|---|---|---|
| TSDF | OFF | OFF | Single |
| TSDF | OFF | OFF | Multi |
| Occupancy | OFF | OFF | Multi |
Example snippet
The following sensor types are currently supported:
| Sensor Type |
|---|
| PinholeCamera |
| OusterLidar |
Example snippet
Supereight accepts float depth images with units of metres. A number of readers for common datasets are available.
| Reader Type | Scene Format | sequence_path | GT Format | ground_truth_file |
|---|---|---|---|---|
| TUM | TUM RGB/depth | path/to/dataset/ | TUM ground truth | path/to/tum_groundtruth.txt |
| InteriorNet | InteriorNet RGB/depth | path/to/dataset/ | InteriorNet ground truth | path/to/cam0.ccam |
| Newer College | Newer College point cloud | path/to/pointclouds/ | TUM ground truth | path/to/tum_groundtruth.txt |
| RAW | SLAMBench RAW file | path/to/scene.raw | Association format | path/to/association.txt |
| OpenNI | Microsoft Kinect/Asus Xtion | - | - | - |
Relative paths are relative to the YAML configuration file. A ~ in the beginning of a path is expanded to the contents of the HOME environment variable (the path to the current user's home directory).
The depth images are scaled by a factor of 5000, i.e. a pixel value of 5000 in the depth image corresponds to a distance of 1 metre from the camera, 10000 to a distance of 2 metres, etc. A pixel value of 0 corresponds to invalid data.
Use the ./scripts/icl-nuim-download.sh script to download the ICL-NUIM datasets in the TUM format described previously. It will download the datasets and handle all the post-processing. When downloading the datasets manually the user has to
rgb.txt and depth.txt fileslivingRoomX.gt.freiburg to groundtruth.txtto match the TUM format.
We recommend to delete depth/0.png and rgb/0.png from the dataset and remove them from the rgb.txt, depth.txt and association.txt files, as no matching ground truth is available (additionally delete frame 1 for the kt0 dataset).
groundtruth.txt
depth.txt
rgb.txt
cam0.ccam
To convert TUM datasets clone dataset-tools and run
Use the ./scripts/icl-nuim-download.sh script to download the ICL NUIM datasets in TUM format. Read (Section TUM, Subsection ICL NUIM dataset) when downloading the dataset manually.
To convert Newer College datasets clone dataset-tools and run
The following integrator type is currently supported:
| Integrator Type |
|---|
| MapIntegrator |
Example snippet
Internally the integrator is split in an allocator and an updater.
| Field Type | Resolution | Allocator Type | Updater Type |
|---|---|---|---|
| TSDF | Single | Ray-casting | Custom |
| TSDF | Multi | Ray-casting | Custom |
| Occupancy | Multi | Volume-carving | Custom |
If GLUT is available and enable_gui is true in the configuration file then the input RGB and depth images, the tracking result and a 3D render from the current camera pose will be shown.
The mesh can be extracted from the map using its se::Map::saveMesh() function. Internally the function runs a marching cube algorithm on the primal grid (single-res implementation) or dual grid (multi-res implementation). The mesh can be saved as a .ply, .obj or .vtk file. Based on the provided filename the according type will be saved.
The map's underlying octree structure up to block level can saved using se::Map::saveStructure() function. The structure can be saved as a .ply, .obj or .vtk file. Based on the provided filename the according type will be saved.
Slices through the TSDF/occupancy field of the map can be saved using the se::Map::saveFieldSlice() function. The field can only be saved as a .vtk file. Given a position t_WS three axis aligned slices located at the t_WS.x() (y-z plane), t_WS.y() (x-z plane) and t_WS.z() (x-y plane) will be saved.
The file formats can be visualised with the following software (non-exhaustive):
| File type | Software |
|---|---|
.ply | ParaView, MeshLab, CloudCompare |
.obj | ParaView, MeshLab |
.vtk | ParaView |
The following shows performance of the different pipelines (TSDF, MultiresTSDF and MultiresOccupancy) for numerous datasets. All pipelines are run at 1cm voxel resolution with a 320x240 input image resolution.
| Dataset | Frame total (s) | Data read (s) | Integration (s) | Raycasting (s) |
|---|---|---|---|---|
| living_room_traj0_frei_png | 0.0169 | 0.0078 | 0.0038 | 0.0043 |
| living_room_traj1_frei_png | 0.0157 | 0.0077 | 0.0032 | 0.0038 |
| living_room_traj2_frei_png | 0.0189 | 0.0079 | 0.0053 | 0.0046 |
| living_room_traj3_frei_png | 0.0165 | 0.0076 | 0.0035 | 0.0042 |
| cow_and_lady | 0.0253 | 0.0003 | 0.0158 | 0.0082 |
| rgbd_dataset_freiburg1_desk | 0.0164 | 0.0040 | 0.0036 | 0.0047 |
| rgbd_dataset_freiburg2_desk | 0.0250 | 0.0032 | 0.0105 | 0.0073 |
| Dataset | Frame total (s) | Data read (s) | Integration (s) | Raycasting (s) |
|---|---|---|---|---|
| living_room_traj0_frei_png | 0.0211 | 0.0079 | 0.0061 | 0.0062 |
| living_room_traj1_frei_png | 0.0196 | 0.0078 | 0.0051 | 0.0055 |
| living_room_traj2_frei_png | 0.0239 | 0.0079 | 0.0084 | 0.0065 |
| living_room_traj3_frei_png | 0.0203 | 0.0076 | 0.0055 | 0.0060 |
| cow_and_lady | 0.0367 | 0.0003 | 0.0247 | 0.0107 |
| rgbd_dataset_freiburg1_desk | 0.0170 | 0.0003 | 0.0059 | 0.0068 |
| rgbd_dataset_freiburg2_desk | 0.0308 | 0.0003 | 0.0173 | 0.0093 |
| Dataset | Frame total (s) | Data read (s) | Integration (s) | Raycasting (s) |
|---|---|---|---|---|
| living_room_traj0_frei_png | 0.0403 | 0.0079 | 0.01442 | 0.0170 |
| living_room_traj1_frei_png | 0.0414 | 0.0079 | 0.0161 | 0.0164 |
| living_room_traj2_frei_png | 0.0505 | 0.0079 | 0.0204 | 0.0212 |
| living_room_traj3_frei_png | 0.0457 | 0.0077 | 0.0145 | 0.0225 |
| cow_and_lady | 0.0576 | 0.0003 | 0.0243 | 0.0321 |
| rgbd_dataset_freiburg1_desk | 0.0404 | 0.0003 | 0.0069 | 0.0298 |
| rgbd_dataset_freiburg2_desk | 0.0578 | 0.0003 | 0.0180 | 0.0364 |
If you use supereight 2 in your work, please cite
Additionally, if you are using MultiresOccupancy or MultiresTSDF, please cite
or
respectively.
Copyright 2018-2019 Emanuele Vespa Copyright 2019-2022 Smart Robotics Lab, Imperial College London, Technical University of Munich Copyright 2019-2022 Nils Funk Copyright 2019-2022 Sotiris Papatheodorou
supereight 2 is distributed under the BSD 3-clause license.
1.8.13