Skip to content
Stephanie Tsuei edited this page Jan 12, 2022 · 16 revisions

Algorithm Overview

Xivo is a filtering-based visual-inertial odometry (VIO) system. At its core, Xivo is an Extended Kalman Filter (EKF) with additional image processing and mapping capabilities. A diagram of its components is shown below.

Xivo Overview Diagram

IMU measurements are implemented as model inputs. EKF State Prediction occurs whenever a new IMU measurement is acquired, typically at a frequency of hundreds of Hz. Pixel coordinates of tracked features are sensor measurements. EKF Measurement Prediction, Image Processing, and EKF Measurement Update occur whenever a new RGB image is acquired, typically at a frequency of dozens of Hz. Mapping searches for loop closures and solves the bundle adjustment problem in the background.

Life of a Feature

Algorithm List

Filtering and Subfiltering

Please see Filter Equations for a detailed description.

Feature Detection

Feature Matching and Tracking

Triangulation

Outlier Rejection

Loop Closure

Bundle Adjustment

Implementation

Xivo is implemented in C++ in an object-oriented paradigm. A list of objects is shown below. Major components, shown in blue boxes, are singletons. The map is a collection of Feature and Group (past poses at times RGB images were taken) objects created by the MemoryManager and accessible through the Graph.

C++ Objects

Each Group contains pointers to all the features that were visible in the RGB image at that time. One group, designated the Reference Group (a.k.a. Gauge Group), is fixed -- the filter estimates positions and orientations relative to relative to the Reference Group until all features the Reference Group points to are no longer visible. When all features the Reference Group points to are no longer visible, the group with visible features and the smallest covariance is the new reference group.