supereight
|
Welcome to supereight2: a high performance template octree library and a dense volumetric SLAM pipeline implementation.
supereight2 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.
supereight2 follows semantic versioning. The main
branch always points to the latest release, which is more thoroughly tested, while the devel
branch contains the latest changes and fixes.
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 supereight2 in your CMake project by adding find_package(Supereight2 REQUIRED)
and linking against SRL::Supereight2
.
To uninstall the library delete the files listed in the install_manifest.txt
located in the CMake build directory. In a POSIX system you can run:
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 supereight2:
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 |
LeicaLidar |
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.txt
to 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 from 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 supereight2 in your work, please cite
Additionally, if you are using MultiresOccupancy or MultiresTSDF, please cite
or
respectively.
Copyright 2018-2019 Emanuele Vespa
Copyright 2019-2025 Smart Robotics Lab, Imperial College London, Technical University of Munich
Copyright 2019-2022 Nils Funk
Copyright 2019-2025 Sotiris Papatheodorou
Copyright 2023-2025 Simon Boche
Copyright 2023-2025 Simon Boche
Copyright 2024-2025 Sebastián Barbas Laina
Copyright 2024 Thomas Mörwald
supereight2 is distributed under the BSD 3-clause license.