├── .clang-format ├── .github └── stale.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── ci └── prepare-jenkins-slave.sh ├── global_segment_map ├── CMakeLists.txt ├── include │ └── global_segment_map │ │ ├── common.h │ │ ├── icp_utils.h │ │ ├── label_block_serialization.h │ │ ├── label_merge_integrator.h │ │ ├── label_tsdf_integrator.h │ │ ├── label_tsdf_map.h │ │ ├── label_voxel.h │ │ ├── meshing │ │ ├── instance_color_map.h │ │ ├── label_color_map.h │ │ ├── label_tsdf_mesh_integrator.h │ │ └── semantic_color_map.h │ │ ├── segment.h │ │ ├── semantic_instance_label_fusion.h │ │ ├── test │ │ └── layer_test_utils.h │ │ └── utils │ │ ├── file_utils.h │ │ ├── layer_utils.h │ │ ├── map_utils.h │ │ ├── meshing_utils.h │ │ └── visualizer.h ├── package.xml └── src │ ├── icp_utils.cc │ ├── label_block_serialization.cc │ ├── label_merge_integrator.cc │ ├── label_tsdf_integrator.cc │ ├── label_tsdf_map.cc │ ├── meshing │ ├── instance_color_map.cc │ ├── label_color_map.cc │ ├── label_tsdf_mesh_integrator.cc │ └── semantic_color_map.cc │ ├── segment.cc │ ├── semantic_instance_label_fusion.cc │ └── utils │ └── visualizer.cc ├── global_segment_map_node ├── CMakeLists.txt ├── cfg │ ├── asl_office_floor.yaml │ ├── default.yaml │ ├── orb_slam2.yaml │ ├── royal_panda.yaml │ ├── scenenet.yaml │ ├── scenenn.yaml │ └── scenenn_1hz.yaml ├── include │ └── global_segment_map_node │ │ ├── controller.h │ │ └── conversions.h ├── launch │ ├── asl_office_floor_dataset.launch │ ├── gsm_node.launch │ ├── orb_slam2.launch │ ├── royal_panda.launch │ ├── scenenn_dataset.launch │ └── vpp_pipeline.launch ├── package.xml └── src │ ├── controller.cpp │ └── node.cpp ├── voxblox-plusplus_https.rosinstall └── voxblox-plusplus_ssh.rosinstall /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | BasedOnStyle: Google 4 | ColumnLimit: 80 5 | PointerAlignment: Left 6 | DerivePointerAlignment: false 7 | AllowShortFunctionsOnASingleLine: Empty 8 | AllowShortIfStatementsOnASingleLine: false 9 | AllowShortLoopsOnASingleLine: false 10 | --- 11 | Language: Proto 12 | BasedOnStyle: Google 13 | ... 14 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Configuration for probot-stale - https://github.com/probot/stale 2 | 3 | # Number of days of inactivity before an issue becomes stale 4 | daysUntilStale: 30 5 | 6 | # Number of days of inactivity before a stale issue is closed 7 | daysUntilClose: 7 8 | 9 | # Issues with these labels will never be considered stale 10 | exemptLabels: 11 | - pinned 12 | - security 13 | 14 | # Label to use when marking an issue as stale 15 | staleLabel: "stale" 16 | 17 | # Comment to post when marking an issue as stale. Set to `false` to disable 18 | markComment: > 19 | This issue has been automatically marked as stale because it has not had 20 | recent activity. It will be closed in 7 days if no further activity occurs. 21 | 22 | # Comment to post when closing a stale issue. Set to `false` to disable 23 | closeComment: false 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | 19 | # Compiled Static libraries 20 | *.lai 21 | *.la 22 | *.a 23 | *.lib 24 | 25 | # Executables 26 | *.exe 27 | *.out 28 | *.app 29 | 30 | # Eclipse 31 | .cproject 32 | .project 33 | /Debug/ 34 | .settings 35 | 36 | # Python (for lint) 37 | *.pyc 38 | 39 | # Temporary files 40 | *~ 41 | 42 | # Mac 43 | .DS_Store 44 | 45 | # Mesh results 46 | mesh_results 47 | 48 | # Tools 49 | autolintc 50 | 51 | *.ply 52 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "voxblox"] 2 | path = voxblox 3 | url = https://github.com/ethz-asl/voxblox.git 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2019, ASL, ETH Zurich, Switzerland 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Voxblox++ 2 | 3 | [![Build Status](https://jenkins.asl.ethz.ch/buildStatus/icon?subject=ubuntu%2016.04%20%2B%20ROS%20kinetic&job=voxblox-plusplus-nightly%2Flabel%3Dubuntu-xenial)](https://jenkins.asl.ethz.ch/job/voxblox-plusplus-nightly/label=ubuntu-xenial/) 4 | [![Build Status](https://jenkins.asl.ethz.ch/buildStatus/icon?subject=ubuntu%2018.04%20%2B%20ROS%20melodic&job=voxblox-plusplus-nightly%2Flabel%3Dubuntu-bionic)](https://jenkins.asl.ethz.ch/job/voxblox-plusplus-nightly/label=ubuntu-bionic/) 5 | 6 | **Voxblox++** is a framework for incrementally building volumetric object-centric maps during online scanning with a localized RGB-D camera. Besides accurately describing the geometry of the reconstructed scene, the built maps contain information about the individual object instances observed in the scene. In particular, the proposed framework retrieves the dense shape and pose of recognized semantic objects, as well as of newly discovered, previously unobserved object-like instances. 7 | 8 |

9 | 10 |

11 | 12 | 13 | ## Getting started 14 | - [Installing on Ubuntu](https://github.com/ethz-asl/voxblox_gsm/wiki/Installation-on-Ubuntu) 15 | - [Sample Datasets](https://github.com/ethz-asl/voxblox-plusplus/wiki/Sample-Datasets) 16 | - [Basic usage](https://github.com/ethz-asl/voxblox-plusplus/wiki/Basic-usage) 17 | - [The Voxblox++ node](https://github.com/ethz-asl/voxblox-plusplus/wiki/The-voxblox-plusplus-node) 18 | 19 | More information and sample datasets can be found in the [wiki pages](https://github.com/ethz-asl/voxblox-plusplus/wiki). 20 | 21 | ## Citing 22 | The **Voxblox++** framework is described in the following publication: 23 | 24 | - Margarita Grinvald, Fadri Furrer, Tonci Novkovic, Jen Jen Chung, Cesar Cadena, Roland Siegwart, and Juan Nieto, **Volumetric Instance-Aware Semantic Mapping and 3D Object Discovery**, in _IEEE Robotics and Automation Letters_, July 2019. [[PDF](https://arxiv.org/abs/1903.00268)] [[Video](https://www.youtube.com/watch?v=Jvl42VJmYxg)] 25 | 26 | 27 | ```bibtex 28 | @article{grinvald2019volumetric, 29 | author={M. {Grinvald} and F. {Furrer} and T. {Novkovic} and J. J. {Chung} and C. {Cadena} and R. {Siegwart} and J. {Nieto}}, 30 | journal={IEEE Robotics and Automation Letters}, 31 | title={{Volumetric Instance-Aware Semantic Mapping and 3D Object Discovery}}, 32 | year={2019}, 33 | volume={4}, 34 | number={3}, 35 | pages={3037-3044}, 36 | doi={10.1109/LRA.2019.2923960}, 37 | ISSN={2377-3766}, 38 | month={July}, 39 | } 40 | ``` 41 | 42 | The original geometry-only framework was introduced in the following publication: 43 | 44 | - Fadri Furrer, Tonci Novkovic, Marius Fehr, Abel Gawel, Margarita Grinvald, Torsten Sattler, Roland Siegwart, and Juan Nieto, **Incremental Object Database: Building 3D Models from Multiple Partial Observations**, in _IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)_, October 2018. [[PDF](https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8594391)] [[Video](https://www.youtube.com/watch?v=9_xg92qqw70)] 45 | 46 | ```bibtex 47 | @inproceedings{8594391, 48 | author={F. {Furrer} and T. {Novkovic} and M. {Fehr} and A. {Gawel} and M. {Grinvald} and T. {Sattler} and R. {Siegwart} and J. {Nieto}}, 49 | booktitle={2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)}, 50 | title={{Incremental Object Database: Building 3D Models from Multiple Partial Observations}}, 51 | year={2018}, 52 | pages={6835-6842}, 53 | doi={10.1109/IROS.2018.8594391}, 54 | ISSN={2153-0866}, 55 | month={Oct}, 56 | } 57 | ``` 58 | 59 | If you use **Voxblox++** in your research, please cite accordingly. 60 | 61 | ## License 62 | The code is available under the [BSD-3-Clause license](https://github.com/ethz-asl/voxblox-plusplus/blob/master/LICENSE). 63 | -------------------------------------------------------------------------------- /ci/prepare-jenkins-slave.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | echo "Running the prepare script for voxblox-plusplus."; 3 | 4 | # Install protobuf. 5 | sudo apt-get install protobuf-compiler libprotoc-dev 6 | 7 | # Set C++14. 8 | catkin config --cmake-args -DCMAKE_CXX_STANDARD=14 9 | -------------------------------------------------------------------------------- /global_segment_map/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(global_segment_map) 3 | 4 | add_definitions(-std=c++14) 5 | if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 6 | add_definitions(-fext-numeric-literals) 7 | endif() 8 | 9 | find_package(catkin_simple REQUIRED) 10 | catkin_simple(ALL_DEPS_REQUIRED) 11 | 12 | cs_add_library(${PROJECT_NAME} 13 | src/label_block_serialization.cc 14 | src/semantic_instance_label_fusion.cc 15 | src/label_merge_integrator.cc 16 | src/icp_utils.cc 17 | src/label_tsdf_integrator.cc 18 | src/label_tsdf_map.cc 19 | src/meshing/label_tsdf_mesh_integrator.cc 20 | src/meshing/label_color_map.cc 21 | src/meshing/instance_color_map.cc 22 | src/meshing/semantic_color_map.cc 23 | src/segment.cc 24 | src/utils/visualizer.cc 25 | ) 26 | 27 | cs_install() 28 | cs_export() 29 | -------------------------------------------------------------------------------- /global_segment_map/include/global_segment_map/common.h: -------------------------------------------------------------------------------- 1 | #ifndef GLOBAL_SEGMENT_MAP_COMMON_H_ 2 | #define GLOBAL_SEGMENT_MAP_COMMON_H_ 3 | 4 | #include 5 | 6 | #include 7 | #include 8 | 9 | #include "voxblox/core/common.h" 10 | 11 | namespace voxblox { 12 | 13 | const uint16_t BackgroundLabel = 0u; 14 | 15 | // Voxblox++ custom types. 16 | typedef uint16_t Label; 17 | typedef uint16_t LabelConfidence; 18 | typedef uint16_t InstanceLabel; 19 | typedef uint8_t SemanticLabel; 20 | 21 | typedef std::vector