ROVIOLI Introduction


ROVIOLI - RObust Visual Inertial Odometry with Localization Integration, is a visual-inertial mapping front-end for maplab that consists of an estimator, which is an adaptation of an existing estimation pipeline, ROVIO, and additional maplab modules for binary feature extraction and tracking, map building and localization.

ROVIOLI has two main purposes:

  • to serve as a visual-inertial mapping front-end for maplab that can be used as is,

  • to serve as an example implementation of how to integrate other estimators into maplab.


  • Robust, real-time, visual-inertial 6DOF pose estimation

  • Builds maps for maplab

  • Localization from previous map of the environment.


  • Create one or more maps of the environment. (a)

  • Load the maps in maplab and improve them by aligning multiple maps and applying loop closure and optimization. (b)

  • Run ROVIOLI in LOC mode and localize based on the previously build map. (c)


We use ROVIO as the core of our estimator mainly because it has been reliably deployed on many flying platforms by Autonomous Systems Lab MAV (micro aerial vehicle) team over the past couple of years. ROVIO is lightweight, fast, reliable. The features it tracks, which are based on image patches, have some complementary qualities compared to maplabs binary features (Brisk, FREAK), such as a better resistance to motion-blur. The photometric description of ROVIOs features, however, makes then less ideal to build VIMaps that are used for efficient loop closure and localization. That’s why in parallel to ROVIO we run our own feature tracking module to get features that later can be used for map building. So it’s important to note that the ROVIO features (visualized as green rectangles) are NOT used for map building at all.

The map builder is composing a VIMap based on the keyframes and features tracked by the Feature Tracking module and the pose estimates of ROVIO, which serve as initial guess of the pose graph vertex poses. Even though a map is built at runtime, it only consists of vertices, edges and feature tracks. The landmarks are only initialized and triangulated right before saving the map, i.e. at shutdown time of ROVIOLI. Therefore ROVIOLI currently does not support any online mapping capabilities such as localizing from the map that is currently built.

For more details, please have a look at the maplab and ROVIO paper.

Known Issues

  • Planar motion/ground vehicles: Visual inertial mapping from single cameras can only get scale from the IMU. If ROVIOLI is deployed on a ground vehicle, the IMU is not excited in Z direction and if the vehicle moves at constant velocity there are barely any useful measurements to be obtained from the IMU. This has a significant impact on the estimation and can result in divergence, large drift error and scale drift.

  • Changing the number of patches or other core ROVIO parameters: If you want to change the number of patches tracked by ROVIO or any of the other core ROVIO parameters, you will need to adapt the code directly. Unlike the normal ROVIO version where you can set it at compile time with variables like these (ROVIO_PATCHSIZE=4 ROVIO_NMAXFEATURE=250).