diff --git a/README.md b/README.md
index b226a7be3e..3f33b29b5f 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ This repository contains **maplab 2.0**, an open research-oriented mapping frame
### Multi-robot mapping and online operation
-
+
### Dense reconstruction
@@ -82,7 +82,7 @@ Please cite the following papers [maplab](https://arxiv.org/abs/1711.10250) and
### Additional Citations
-Certain components of maplab are directly based on [other publications](https://maplab.asl.ethz.ch/docs/master/pages/overview_and_introduction/B_Citing-Maplab).
+Certain components of maplab are directly based on [other publications](https://maplab.asl.ethz.ch/docs/master/pages/overview_and_introduction/B_Citing-Maplab#additional-citations).
## Credits
diff --git a/deploy/Dockerfile b/deploy/Dockerfile
deleted file mode 100644
index f1567715ca..0000000000
--- a/deploy/Dockerfile
+++ /dev/null
@@ -1,33 +0,0 @@
-FROM ubuntu:18.04
-
-ENV TZ=Europe/Zurich
-RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
-
-# Install the base packages.
-COPY install_base.sh ./install_base.sh
-RUN sh ./install_base.sh && rm ./install_base.sh
-
-# Install the ROS environment.
-COPY install_ros.sh ./install_ros.sh
-RUN sh ./install_ros.sh && rm ./install_ros.sh
-
-# Configure the catkin workspace.
-WORKDIR /usr/home
-COPY ./ws ./ws
-WORKDIR /usr/home/ws
-RUN catkin init --workspace .
-RUN catkin config --merge-devel
-RUN catkin config -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always
-
-# Install the custom packages.
-WORKDIR /usr/home/ws/src
-COPY install_packages.sh ./install_packages.sh
-RUN sh ./install_packages.sh && rm ./install_packages.sh
-
-# Build the project.
-WORKDIR /usr/home/ws
-SHELL ["/bin/bash", "-c"]
-COPY compile.sh ../
-RUN ../compile.sh
-COPY set_env.sh ../
-ENTRYPOINT ["../set_env.sh"]
diff --git a/deploy/build_docker.sh b/deploy/build_docker.sh
deleted file mode 100755
index 3b08cc79b2..0000000000
--- a/deploy/build_docker.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env zsh
-
-# Get the current directory.
-script_source=$(readlink -f "$0")
-script_dir=$(dirname "$script_source")
-
-docker_ctx=${script_dir}/docker_ctx
-echo "Creating build context in: ${docker_ctx}"
-
-# Create the context we use for setting up the images.
-mkdir -p "${docker_ctx}"
-"$script_dir/copy_to_ctx.sh"
-
-# Build the docker image.
-docker build -t "maplab" -f "${script_dir}/Dockerfile" "${docker_ctx}"
-
-# Clean up.
-echo "Finished building the images. Cleaning up."
-rm -rf "${docker_ctx}"
diff --git a/deploy/build_docker_with_rviz.sh b/deploy/build_docker_with_rviz.sh
deleted file mode 100755
index 19955ed2b6..0000000000
--- a/deploy/build_docker_with_rviz.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env zsh
-
-# Get the current directory.
-script_source=$(readlink -f "$0")
-script_dir=$(dirname "$script_source")
-
-docker_ctx=${script_dir}/docker_ctx
-echo "Creating build context in: ${docker_ctx}"
-
-# Create the context we use for setting up the images.
-mkdir -p "${docker_ctx}"
-"$script_dir/copy_to_ctx.sh"
-
-# Build the docker image.
-docker-compose -f "${script_dir}/docker-compose.yml" build
-
-# We don't remove the context here as docker-compose requires it to be present.
diff --git a/deploy/compile.sh b/deploy/compile.sh
deleted file mode 100755
index a7757713e0..0000000000
--- a/deploy/compile.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-
-source /opt/ros/melodic/setup.bash
-catkin build maplab maplab_console maplab_node maplab_server_node
diff --git a/deploy/copy_to_ctx.sh b/deploy/copy_to_ctx.sh
deleted file mode 100755
index 807b134460..0000000000
--- a/deploy/copy_to_ctx.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env zsh
-
-# Get the current directory.
-script_source=$(readlink -f "$0")
-script_dir=$(dirname "$script_source")
-docker_ctx=${script_dir}/docker_ctx
-ws=${docker_ctx}/ws/src/maplab/
-ws_src=${ws}/..
-project_dir=${script_dir}/..
-
-# Copy the project files to the context.
-mkdir -p "${ws}"
-rsync -a \
- --exclude '*.git' \
- --exclude 'deploy/' \
- "${project_dir}" "${ws}"
-
-# Copy the installation script to the context.
-cp "${script_dir}/install_base.sh" "${docker_ctx}"
-cp "${script_dir}/install_ros.sh" "${docker_ctx}"
-cp "${script_dir}/install_packages.sh" "${docker_ctx}"
-cp "${script_dir}/set_env.sh" "${docker_ctx}"
-cp "${script_dir}/compile.sh" "${docker_ctx}"
diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml
index f792d1f30b..79a5ee7617 100644
--- a/deploy/docker-compose.yml
+++ b/deploy/docker-compose.yml
@@ -2,16 +2,16 @@ version: "3"
services:
maplab:
- image: maplab
- build:
- context: ./docker_ctx
- dockerfile: ../Dockerfile
- runtime: nvidia
+ build: .
environment:
- DISPLAY=${DISPLAY}
- - NVIDIA_VISIBLE_DEVICES=all
- - NVIDIA_DRIVER_CAPABILITIES=all
+ - QT_X11_NO_MITSHM=1
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
- - /tmp/maps:/tmp/maps
+ - ./maplab_ws:/maplab
+ - ./data:/data
+ devices:
+ - "/dev/dri:/dev/dri"
network_mode: host
+ stdin_open: true
+ tty: true
diff --git a/deploy/docker-entrypoint.sh b/deploy/docker-entrypoint.sh
new file mode 100644
index 0000000000..d90cfc0b8e
--- /dev/null
+++ b/deploy/docker-entrypoint.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e
+
+source "/opt/ros/$ROS_DISTRO/setup.bash" --
+if [ -f "/maplab/devel/setup.bash" ]; then
+ source "/maplab/devel/setup.bash"
+fi
+
+export PATH="/usr/lib/ccache:$PATH"
+export CCACHE_DIR="/maplab/.ccache"
+
+exec "$@"
diff --git a/deploy/dockerfile b/deploy/dockerfile
new file mode 100644
index 0000000000..ef484ee474
--- /dev/null
+++ b/deploy/dockerfile
@@ -0,0 +1,33 @@
+FROM osrf/ros:noetic-desktop-full
+
+# Start with an update
+RUN apt update
+
+# General system dependencies
+RUN apt install -y software-properties-common wget
+RUN apt install -y ros-noetic-rviz ros-noetic-tf2-* ros-noetic-camera-info-manager*
+RUN sudo apt install -y autotools-dev ccache doxygen dh-autoreconf git \
+ liblapack-dev libblas-dev libgtest-dev libreadline-dev \
+ libssh2-1-dev pylint clang-format-12 python3-autopep8 \
+ python3 python3-catkin-tools python3-pip python-git-doc \
+ python3-setuptools python3-termcolor python3-wstool \
+ libatlas3-base libv4l-dev libjpeg-dev
+
+# Python dependencies
+RUN pip3 install --upgrade pip
+RUN pip3 install requests opencv-python opencv-contrib-python
+
+# (Optional) Install ccache
+RUN apt install -y ccache
+
+# Set the docker entrypoint to source ros / maplab
+COPY ./docker-entrypoint.sh ./docker-entrypoint.sh
+RUN chmod +x ./docker-entrypoint.sh
+ENTRYPOINT ["./docker-entrypoint.sh"]
+
+# Set up the catkin workspace
+WORKDIR /maplab
+RUN catkin init
+RUN catkin config --merge-devel
+RUN catkin config --extend /opt/ros/noetic
+RUN catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
diff --git a/deploy/install_base.sh b/deploy/install_base.sh
deleted file mode 100755
index 2288649f2f..0000000000
--- a/deploy/install_base.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env zsh
-
-# Base install
-apt update
-apt -y upgrade
-apt -y install doxygen autotools-dev \
- dh-autoreconf libboost-all-dev python-setuptools git g++ cppcheck \
- libgtest-dev python-git pylint \
- python-termcolor liblog4cplus-dev cimg-dev \
diff --git a/deploy/install_packages.sh b/deploy/install_packages.sh
deleted file mode 100755
index c7321d384f..0000000000
--- a/deploy/install_packages.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env zsh
-
-apt -y install clang-format-6.0 ros-melodic-pcl-conversions \
- libpcl-dev libnlopt-dev ros-melodic-pcl-ros wget \
- ccache liblapack-dev libblas-dev libgtest-dev libreadline-dev libssh2-1-dev pylint python-autopep8 python-pip python-git python-setuptools libatlas3-base libv4l-dev
-
-pip install requests
diff --git a/deploy/install_ros.sh b/deploy/install_ros.sh
deleted file mode 100755
index 2d6c4c41c1..0000000000
--- a/deploy/install_ros.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env zsh
-
-# Install ROS melodic
-apt -y install lsb-release
-
-sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
-curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - 2> /dev/null
-apt -y update
-apt -y install ros-melodic-desktop-full ros-melodic-tf2-* ros-melodic-camera-info-manager* python-catkin-tools
diff --git a/deploy/set_env.sh b/deploy/set_env.sh
deleted file mode 100755
index 0b1fe5c704..0000000000
--- a/deploy/set_env.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-
-. /opt/ros/melodic/setup.bash
-. /usr/home/ws/devel/setup.bash
-roscore > /dev/null &
-exec "$@"
diff --git a/docs/conf.py b/docs/conf.py
index 647534d815..533b57a06a 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -21,7 +21,7 @@
# Check https://holzhaus.github.io/sphinx-multiversion/master/
# configuration.html#tag-branch-remote-whitelists
smv_tag_whitelist = None # Include no tags
-smv_branch_whitelist = r'^(master|wiki_update)$' # Everything is on master now
+smv_branch_whitelist = r'^(master)$' # Everything is on master now
smv_remote_whitelist = r'^(origin|upstream)$' # Use origin and upstream
extensions = [
diff --git a/docs/pages/datasets/A_Sample-Datasets.md b/docs/pages/datasets/A_Sample-Datasets.md
index d2530e9c03..f07b698139 100644
--- a/docs/pages/datasets/A_Sample-Datasets.md
+++ b/docs/pages/datasets/A_Sample-Datasets.md
@@ -1,35 +1,9 @@
# Sample Datasets
-These article points to datasets that can be used with maplab and ROVIOLI.
+Some datasets that can be used with maplab.
-## CLA dataset (from the paper)
-
-
-Description | Rosbag |VI map
---------|:------:|:--:
-Calibration data for CLA rosbags | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/calibration/) | -
-CLA floor F for map building | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/bags/cla_floor_f.bag) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/vi_maps/cla_floor_f.tar.gz)
-CLA floor G for map building | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/bags/cla_floor_g.bag) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/vi_maps/cla_floor_g.tar.gz)
-CLA floor H for map building | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/bags/cla_floor_h.bag) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/vi_maps/cla_floor_h.tar.gz)
-CLA floor J for map building | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/bags/cla_floor_j.bag) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/vi_maps/cla_floor_j.tar.gz)
-CLA floor F for localization | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/multi_session_mapping_CLA/bags/cla_floor_f_v2_for_localization.bag) | -
-Merged and optimized VI map of CLA floors F, G, H and J | - | *coming soon*
-
-## Zurich old town dataset (from the paper)
-
-
-
-Description | Type |Link
---------|------|--
-Optimized map | VI map | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/zurich_old_town_maps/zurich_old_town.tar.gz)
-
-## EuRoC MAV datasets (from the paper)
+## EuRoC MAV datasets
-Description | Rosbag | VI map (unoptimized) | VI map for reconstruction (with images)
------|:---:|:---:|:----:
-MH01 | [Link](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.bag) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/euroc_vi_maps/MH_01_easy.tar.gz) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/stereo_reconstruction_EuRoC/euroc_ml1.tar.gz)
-MH02 | [Link](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_02_easy/MH_02_easy.bag) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/euroc_vi_maps/MH_02_easy.tar.gz) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/stereo_reconstruction_EuRoC/euroc_ml2.tar.gz)
-MH03 | [Link](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_03_medium/MH_03_medium.bag) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/euroc_vi_maps/MH_03_medium.tar.gz) | [Link](http://robotics.ethz.ch/~asl-datasets/maplab/stereo_reconstruction_EuRoC/euroc_ml3.tar.gz)
+Rosbags for the other EuRoC datasets can be downloaded from [here](http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets). Calibration files are already included in the example folder for EuRoC in maplab [here](https://github.com/ethz-asl/maplab/blob/master/applications/maplab-node/launch/euroc/calib/euroc.yaml).
-Rosbags for the other EuRoC datasets can be downloaded from [here](http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets).
diff --git a/docs/pages/installation/A_Installation-Ubuntu-18.04.md b/docs/pages/installation/A_Installation-Ubuntu-18.04.md
new file mode 100644
index 0000000000..40425fe730
--- /dev/null
+++ b/docs/pages/installation/A_Installation-Ubuntu-18.04.md
@@ -0,0 +1,96 @@
+## Installing on Ubuntu 18.04
+
+**WARNING:** The [external features](https://github.com/ethz-asl/maplab_features) package is only supported in Ubuntu 20.04 due to conflicts between python2 and python3 in Ubuntu 18.04. If you don't need external features (*e.g.* SIFT or SuperGlue), but only the built in BRISK you can continue with this.
+
+#### Install required system packages
+```bash
+# Install ROS (follow the official ROS installation instructions).
+sudo apt install software-properties-common
+sudo add-apt-repository "deb http://packages.ros.org/ros/ubuntu bionic main"
+wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
+sudo apt update
+sudo apt install -y ros-melodic-desktop-full ros-melodic-tf2-* ros-melodic-camera-info-manager*
+
+# Install framework dependencies.
+sudo apt install -y autotools-dev ccache doxygen dh-autoreconf git \
+ liblapack-dev libblas-dev libgtest-dev libreadline-dev \
+ libssh2-1-dev pylint clang-format-10 python-autopep8 \
+ python python-catkin-tools python-pip python-git \
+ python-setuptools python-termcolor python-wstool \
+ libatlas3-base libv4l-dev libjpeg-dev
+
+pip install --user --upgrade pip
+pip install --user requests opencv-python opencv-contrib-python
+```
+
+#### Update the ROS environment
+Follow this if you freshly installed ROS, if you already had ROS installed you can skip this.
+
+```bash
+sudo rosdep init
+rosdep update
+echo ". /opt/ros/melodic/setup.bash" >> ~/.bashrc
+source ~/.bashrc
+```
+
+#### Install ccache for faster rebuilds.
+(OPTIONAL but HIGHLY RECOMMENDED)
+
+ccache is a tool that caches intermediate build files to speed up rebuilds of the same code. On Ubuntu it can be set up with the following command. The max. cache size is set to 10GB and can be adapted in the lines below:
+
+```bash
+sudo apt install -y ccache
+echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc
+source ~/.bashrc
+ccache --max-size=10G
+```
+
+Now g++/gcc should now point to:
+```
+which g++ gcc
+/usr/lib/ccache/g++
+/usr/lib/ccache/gcc
+```
+Show cache statistics:
+```
+ccache -s
+```
+Empty the cache and reset the stats:
+```
+ccache -C -z
+```
+
+#### Create a catkin workspace
+To create a workspace, run:
+```bash
+mkdir -p maplab_ws/src
+cd maplab_ws
+catkin init
+catkin config --merge-devel
+catkin config --extend /opt/ros/melodic
+catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
+```
+
+For debugging and a more informative and readable output use:
+```bash
+catkin config --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS=-fdiagnostics-color
+```
+
+#### Cloning maplab repository
+Now you can clone maplab and its dependencies.
+
+```bash
+cd src
+git clone git@github.com:ethz-asl/maplab.git --recursive
+```
+
+#### Building maplab
+```bash
+cd ~/maplab_ws
+catkin build maplab
+```
+**Note:** Currently some of our dependencies contain superfluous packages that will not have all the necessary dependencies. Therefore compilation will fail for these packages, if you try to build the complete workspace with: `catkin build`.
+
+#### Troubleshooting
+
+Please visit the [FAQ](../overview_and_introduction/D_FAQ.html#installation) and the additional instructions on debugging provided here [here](B_Compilation-and-Debugging.html).
diff --git a/docs/pages/installation/A_Installation-Ubuntu-20.04.md b/docs/pages/installation/A_Installation-Ubuntu-20.04.md
new file mode 100644
index 0000000000..e9287ee853
--- /dev/null
+++ b/docs/pages/installation/A_Installation-Ubuntu-20.04.md
@@ -0,0 +1,95 @@
+## Installing on Ubuntu 20.04
+
+#### Install required system packages
+```bash
+# Install ROS (follow the official ROS installation instructions).
+sudo apt install software-properties-common
+sudo add-apt-repository "deb http://packages.ros.org/ros/ubuntu focal main"
+wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
+sudo apt update
+sudo apt install -y ros-noetic-desktop-full ros-noetic-tf2-* ros-noetic-camera-info-manager*
+
+
+# Install framework dependencies.
+sudo apt install -y autotools-dev ccache doxygen dh-autoreconf git \
+ liblapack-dev libblas-dev libgtest-dev libreadline-dev \
+ libssh2-1-dev pylint clang-format-12 python3-autopep8 \
+ python3 python3-catkin-tools python3-pip python-git-doc \
+ python3-setuptools python3-termcolor python3-wstool \
+ libatlas3-base libv4l-dev libjpeg-dev
+
+pip3 install --user --upgrade pip
+pip3 install --user requests opencv-python opencv-contrib-python
+```
+
+#### Update the ROS environment
+Follow this if you freshly installed ROS, if you already had ROS installed you can skip this.
+
+```bash
+sudo rosdep init
+rosdep update
+echo ". /opt/ros/noetic/setup.bash" >> ~/.bashrc
+source ~/.bashrc
+```
+
+#### Install ccache for faster rebuilds.
+(OPTIONAL but HIGHLY RECOMMENDED)
+
+ccache is a tool that caches intermediate build files to speed up rebuilds of the same code. On Ubuntu it can be set up with the following command. The max. cache size is set to 10GB and can be adapted in the lines below:
+
+```bash
+sudo apt install -y ccache
+echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc
+source ~/.bashrc
+ccache --max-size=10G
+```
+
+Now g++/gcc should now point to:
+```
+which g++ gcc
+/usr/lib/ccache/g++
+/usr/lib/ccache/gcc
+```
+Show cache statistics:
+```
+ccache -s
+```
+Empty the cache and reset the stats:
+```
+ccache -C -z
+```
+
+#### Create a catkin workspace
+To create a workspace, run:
+```bash
+mkdir -p maplab_ws/src
+cd maplab_ws
+catkin init
+catkin config --merge-devel
+catkin config --extend /opt/ros/noetic
+catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
+```
+
+For debugging and a more informative and readable output use:
+```bash
+catkin config --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS=-fdiagnostics-color
+```
+
+#### Cloning maplab repository
+Now you can clone maplab and its dependencies.
+
+```bash
+cd src
+git clone git@github.com:ethz-asl/maplab.git --recursive
+```
+
+#### Building maplab
+```bash
+cd ~/maplab_ws
+catkin build maplab
+```
+**Note:** Currently some of our dependencies contain superfluous packages that will not have all the necessary dependencies. Therefore compilation will fail for these packages, if you try to build the complete workspace with: `catkin build`.
+
+#### Troubleshooting
+
+Please visit the [FAQ](../overview_and_introduction/D_FAQ.html#installation) and the additional instructions on debugging provided here [here](B_Compilation-and-Debugging.html).
diff --git a/docs/pages/installation/A_Installation-Ubuntu.md b/docs/pages/installation/A_Installation-Ubuntu.md
deleted file mode 100644
index 072d031f28..0000000000
--- a/docs/pages/installation/A_Installation-Ubuntu.md
+++ /dev/null
@@ -1,110 +0,0 @@
-## Installing on Ubuntu
-18.04, 20.04 (experimental)
-
-### Manual installation
-First set up some basic environment variables
-
-```bash
-export UBUNTU_VERSION=$(lsb_release -cs) #(Ubuntu 18.04: bionic, Ubuntu 20.04: focal (experimental))
-export ROS_VERSION=melodic #(Ubuntu 18.04: melodic, Ubuntu 20.04: noetic (experimental))
-export CATKIN_WS=~/maplab_ws #(Wherever you want to install maplab)
-```
-
-#### Install required system packages
-```bash
-# Install ROS
-# NOTE: Follow the official ROS installation instructions.
-sudo apt install software-properties-common
-sudo add-apt-repository "deb http://packages.ros.org/ros/ubuntu $UBUNTU_VERSION main"
-wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
-sudo apt update
-sudo apt install ros-$ROS_VERSION-desktop-full "ros-$ROS_VERSION-tf2-*" "ros-$ROS_VERSION-camera-info-manager*" --yes
-
-
-# Install framework dependencies.
-sudo apt install autotools-dev ccache doxygen dh-autoreconf git liblapack-dev libblas-dev libgtest-dev libreadline-dev libssh2-1-dev pylint clang-format-6.0 python-autopep8 python-catkin-tools python-pip python-git python-setuptools python-termcolor python-wstool libatlas3-base libv4l-dev --yes
-
-pip install requests
-```
-
-#### Update ROS environment
-Follow this if you freshly installed ROS, if you already had ROS installed you can skip this.
-
-```bash
-sudo rosdep init
-rosdep update
-echo ". /opt/ros/$ROS_VERSION/setup.bash" >> ~/.bashrc
-source ~/.bashrc
-```
-
-#### Install ccache for faster rebuilds.
-(OPTIONAL but HIGHLY RECOMMENDED)
-ccache is a tool that caches intermediate build files to speed up rebuilds of the same code. On Ubuntu it can be set up with the following command. The max. cache size is set to 10GB and can be adapted in the lines below:
-
-```bash
-sudo apt install -y ccache &&\
-echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc &&\
-source ~/.bashrc && echo $PATH
-ccache --max-size=10G
-```
-
-Now g++/gcc should now point to:
-```
-which g++ gcc
-/usr/lib/ccache/g++
-/usr/lib/ccache/gcc
-```
-Show cache statistics:
-```
-ccache -s
-```
-Empty the cache and reset the stats:
-```
-ccache -C -z
-```
-ccache only works for a clean workspace. You will need a `make clean` otherwise.
-
-#### Create a catkin workspace
-To create a workspace, run:
-```bash
-mkdir -p $CATKIN_WS/src
-cd $CATKIN_WS
-catkin init
-catkin config --merge-devel # Necessary for catkin_tools >= 0.4.
-catkin config --extend /opt/ros/$ROS_VERSION
-catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
-```
-
-For more informative and readable output use:
-```bash
-catkin config --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS=-fdiagnostics-color
-```
-
-#### Cloning maplab repository
-Now you can clone maplab and its dependencies via SSH, https clone is not supported for developer version.
-SSH keys need to be installed and connected to your GitHub account, as explained [here](https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent).
-
-```bash
-cd src
-git clone git@github.com:ethz-asl/maplab.git --recursive -b develop
-```
-
-#### Setting up the linter
-This setups a linter which checks if the code conforms to our style guide during commits.
-These steps are only necessary if you plan on contributing to maplab.
-
-```bash
-cd $CATKIN_WS/src/maplab
-./dependencies/internal/linter/init-git-hooks.py
-```
-
-#### Building maplab
-```bash
-cd $CATKIN_WS
-catkin build maplab
-```
-**Note:** Currently some of our dependencies contain superfluous packages that will not have all the necessary dependencies. Therefore compilation will fail for these packages, if you try to build the complete workspace with: `catkin build`.
-
-#### Troubleshooting
-
-Please visit the [FAQ](../overview_and_introduction/D_FAQ.html#installation) and the additional instructions on debugging provided here [here](B_Compilation-and-Debugging.html).
diff --git a/docs/pages/installation/B_Compilation-and-Debugging.md b/docs/pages/installation/B_Compilation-and-Debugging.md
index c744a5a5b0..94c82fc588 100644
--- a/docs/pages/installation/B_Compilation-and-Debugging.md
+++ b/docs/pages/installation/B_Compilation-and-Debugging.md
@@ -1,15 +1,7 @@
## Compilation and Debugging
### Use ccache
-ccache is a fast compiler cache. It is a program that sits in front of gcc and monitors what is being compiled. If a file was compiled before in the exact same state, then ccache will serve a compilation request from cache and thus lead to "instant" compilation.
-
-To install ccache:
-```bash
-sudo apt-get install ccache
-sudo ln -s /usr/bin/ccache /usr/local/bin/gcc
-sudo ln -s /usr/bin/ccache /usr/local/bin/g++
-sudo ln -s /usr/bin/ccache /usr/local/bin/cc
-```
+ccache is a fast compiler cache. It is a program that sits in front of gcc and monitors what is being compiled. If a file was compiled before in the exact same state, then ccache will serve a compilation request from cache and thus lead to "instant" compilation. Check the install section page for instructions.
### Compile the package you need
Avoid running ```catkin build``` without specifying a package since this builds the entire workspace which takes a long time.
@@ -23,6 +15,7 @@ If you only changed a single package you can also restrict the build process to
```
catkin build maplab --no-deps
```
+However, depending on the changes you've made, you might get a SEGFAULT when running. This can happen especially when changing headers that are included elsewhere. If you get a crash after using `--no-deps`, try first recompiling everything with `catkin build maplab`.
### Compile in Release/Debug mode
Most packages are not built in Release mode. To build packages in Release mode:
diff --git a/docs/pages/installation/C_Running-in-Docker.md b/docs/pages/installation/C_Running-in-Docker.md
new file mode 100644
index 0000000000..e4f06766ad
--- /dev/null
+++ b/docs/pages/installation/C_Running-in-Docker.md
@@ -0,0 +1,73 @@
+## Running in Docker
+
+This is my setup for running maplab in Docker, with the afferent setup files. Other setups are definitely possible as well. In this configuration the source code files and build files are kept outside the docker environment, to facilitate easy development and rebuilding of the docker environment.
+
+### Install docker
+Install Docker following the official [install instructions](https://docs.docker.com/engine/install/ubuntu/).
+
+Additionally install docker compose:
+```
+sudo apt install -y docker-compose
+```
+
+### Create the docker image
+We set up a few folders on the main machine which will then later be mounted in docker.
+```
+mkdir -p maplab/maplab_ws/src
+mkdir maplab/data # Datasets and maps can be placed here
+mkdir maplab/maplab_ws/.ccache # Preserve ccache files across containers
+```
+
+Clone the maplab repository:
+```
+cd maplab/maplab_ws/src/
+git clone git@github.com:ethz-asl/maplab.git --recursive
+
+```
+
+Move up the docker setup files and build the image:
+```
+cd ../../
+cp maplab_ws/src/maplab/deploy/* ./
+docker-compose build
+```
+
+### Using the docker container
+Running a single command using docker-compose can then be done from the `maplab` folder where the docker files are. For example to start a roscore:
+```
+docker-compose run --rm maplab roscore
+```
+
+For more complex operations where continued work in a single terminal is desirable:
+```
+docker-compose run --rm maplab /bin/bash
+
+```
+This will start a terminal in the maplab container. The advantages are for example auto-completion in the terminal. However, changes made to the container are not persistent.
+
+**Warning:** Maps created in the docker container will be deleted if they are not placed in one of the mounted persistent directories, which by default are `/data` or `/maplab`.
+
+
+### Compile maplab in the container
+To compile maplab in the container one can then simply run
+```
+docker-compose run --rm maplab catkin build maplab
+```
+Afterwards, the rest of the tutorials can be run from within the container.
+
+
+### Visualizing using docker
+Running GUI applications from docker can sometimes be problematic. In the current setup a quick (but for security not the safest) hack is to enable authentification to the xserver from within the container:
+```
+xhost +local:root
+```
+
+Access will then reset after a reboot of the machine, or by running:
+```
+xhost -local:root
+```
+
+Alternatively, I've had greater success running rviz from the based machine and not from inside the docker container. For this in Ubuntu 22.04:
+```
+sudo apt install rviz
+```
diff --git a/docs/pages/overview_and_introduction/A_The-Maplab-Framework.md b/docs/pages/overview_and_introduction/A_The-Maplab-Framework.md
index d644d6aa1d..137e4b23c8 100644
--- a/docs/pages/overview_and_introduction/A_The-Maplab-Framework.md
+++ b/docs/pages/overview_and_introduction/A_The-Maplab-Framework.md
@@ -16,9 +16,9 @@
A modern autonomous robotic system is composed of many software building blocks (SLAM, path planning, scene interpretation), most of them depending on some form of localization and mapping. Therefore, there is a need for an API that allows these different elements to communicate, with as little inter-dependency as possible. For this reason in maplab we use [ROS](https://www.ros.org/) to interface between components. However, the internal workings of maplab are written as independent of ROS as possible to promote the easy reuse of the code.
Maplab 2.0 can be divided into three main components:
-* **Mapping Node:** Runs on a robot and takes as input an odometry source and the raw sensor information to create a map.
-* **Mapping Server:** Runs a base station or on one of the robots. It periodically collects maps from one or more robots and merges them together into one globally consistent map.
-* **Console:** The console is meant for offline map optimization and multi-session mapping.
+* **Mapping Node:** Runs on a robot and takes as input poses from some odometry (forward motion estimation) source and the raw sensor information to create a map.
+* **Mapping Server:** Runs on a base station or one of the robots. It periodically collects maps from the mapping node and merges them together into one globally consistent map.
+* **Console:** The console is meant for offline map optimization and multi-session mapping. Good for visualization and testing, as it gives control over the entire multi-session mapping process.
Below is an overview of one possible configuration.
diff --git a/docs/pages/overview_and_introduction/B_Citing-Maplab.md b/docs/pages/overview_and_introduction/B_Citing-Maplab.md
index df7947ac0d..42b6e07789 100644
--- a/docs/pages/overview_and_introduction/B_Citing-Maplab.md
+++ b/docs/pages/overview_and_introduction/B_Citing-Maplab.md
@@ -1,16 +1,33 @@
### Main Papers
- * Original maplab paper containing visual-inertial framework
+ * Original maplab paper containing visual-inertial framework:
```bibtex
@article{schneider2018maplab,
- title={maplab: An Open Framework for Research in Visual-inertial Mapping and Localization},
+ title={{maplab: An Open Framework for Research in Visual-inertial Mapping and Localization}},
author={T. Schneider and M. T. Dymczyk and M. Fehr and K. Egger and S. Lynen and I. Gilitschenski and R. Siegwart},
journal={IEEE Robotics and Automation Letters},
+ volume={3},
+ number={3},
+ pages={1418--1425},
year={2018},
doi={10.1109/LRA.2018.2800113}
}
```
+ * Follow-up maplab 2.0 paper extending the framework to multi-sensor and multi-robot:
+ ```bibtex
+ @article{cramariuc2022maplab,
+ title={{maplab 2.0 – A Modular and Multi-Modal Mapping Framework}},
+ author={A. Cramariuc and L. Bernreiter and F. Tschopp and M. Fehr and V. Reijgwart and J. Nieto and R. Siegwart and C. Cadena},
+ journal={IEEE Robotics and Automation Letters},
+ volume={8},
+ number={2},
+ pages={520-527},
+ year={2023},
+ doi={10.1109/LRA.2022.3227865}
+ }
+ ```
+
### Additional Citations
The following list contains a list of paper on which specific components of maplab are built on:
diff --git a/docs/pages/overview_and_introduction/D_FAQ.md b/docs/pages/overview_and_introduction/D_FAQ.md
index da5c311443..68bb39d33d 100644
--- a/docs/pages/overview_and_introduction/D_FAQ.md
+++ b/docs/pages/overview_and_introduction/D_FAQ.md
@@ -41,7 +41,7 @@ You can check if your workspace is properly set up by running:
$ catkin config
---------------------------------------------------------------------------
Profile: default
-Extending: [explicit] /opt/ros/kinetic
+Extending: [explicit] /opt/ros/noetic
Workspace: /home/user/maplab_ws
---------------------------------------------------------------------------
...
diff --git a/docs/pages/readme_images/arche.jpg b/docs/pages/readme_images/arche.jpg
deleted file mode 100644
index 44abe5eb74..0000000000
Binary files a/docs/pages/readme_images/arche.jpg and /dev/null differ
diff --git a/docs/pages/readme_images/arche.png b/docs/pages/readme_images/arche.png
new file mode 100644
index 0000000000..50196fbe24
Binary files /dev/null and b/docs/pages/readme_images/arche.png differ
diff --git a/docs/pages/readme_images/maplab_video_thumbnail.png b/docs/pages/readme_images/maplab_video_thumbnail.png
deleted file mode 100644
index efc445cad7..0000000000
Binary files a/docs/pages/readme_images/maplab_video_thumbnail.png and /dev/null differ