How it works

SolAR Overview

SolAR is a solution to easily and quickly implement custom camera pose estimation pipelines based on a set of vision and mathematics components in order to make them available to AR application developers.

The SolAR core handles everything that will allow the implementation of a pipeline:

  • SolAR Data Structures define the information that flow in the pipelines and are exchanged between components.

  • SolAR Components Interfaces define a standardized interface for the different categories of basic processing elements required to implement camera pose estimation (i.e.: key point extractor, descriptor computation, etc.). This unified interface is required to ensure interoperability between components allowing to easily swap one with another to improve the final camera pose estimation pipeline.

  • The SolAR Pipeline Manager handles the implementation of a pipeline by loading components, connecting them, and running the pipeline.

The SolAR Components are implementations of basic processing elements compliant with the SolAR components interfaces. Several components can implement the same component interface. In general, these components are created by wrapping computer vision libraries that could be either open-source (OpenCV, PCL, ROS, etc.) or proprietary. Each component can define its own parameters that will be used to fine tune the camera pose estimation solution.

Architecture Main Concepts
  • Coming soon: configure components on the fly, pipeline, multithread, metadata.

SolAR Data Structures

The SolAR pipeline consists of a chain of basic processing elements linked together so that the outputs of each element are the inputs of the next one. In order to provide modularity, SolAR specifies standard data structures defining the information exchanged between components required to implement a camera pose estimation solution.

The following categories describe the current SolAR data structures, with more to come.

Image

A SolAR image is an array of pixels where each pixel is defined by a set of color components coded with a given number of bits. Each pixel can be encoded with a dedicated colorimetric space (RGB, YUV, LAB, etc.). Contrary to OpenCV, an image is not just a matrix or an array. A SolAR image is clearly defined as an image object to ensure that a component waiting for an image as an input will not receive a random matrix such as a pose. Thus, an image is defined by:

  • The image size (width, height)

  • The image layout such as LAYOUT_GRB, LAYOUT_BGR, LAYOUT_GREY, LAYOUT_RGBA, LAYOUT_RGBX, LAYOUT_UNDEFINED

  • The pixel order either INTERLEAVED or PER_CHANNEL

  • The size of each color component, also called data type which can be either TYPE_8U, TYPE_16U, TYPE_32U, TYPE_64U

  • A pointer to the raw data

In order to limit memory allocations and copies, which can drastically impact the efficiency of the camera pose estimation implementation, an image can point to the raw data instantiated by third party libraries such as OpenCV or OpenVX.

Matrix

The SolAR implementation of matrices is based on the open source Eigen library for linear algebra. The SolAR framework redefines the following matrices:

  • SolARVector4f equates to a 4x1 matrix of floats

  • SolARVector4d equates to a 4x1 matrix of doubles

  • SolARVector3f equates to a 3x1 matrix of floats

  • SolARVector3d equates to a 3x1 matrix of doubles

  • SolARTranslationVectorf equates to a 3x1 matrix of floats used to define a translation

  • SolARPoint_3Df equates to a 3x1 matrix of floats used to define a 3D point

  • SolARPoint_2Df equates to a 2x1 matrix of floats used to define a 2D point

  • SolARPoseMatrixf equates to a 4x4 matrix of floats used to define a pose

  • SolARMatrix33d equates to a 3x3 matrix of doubles

  • SolARRotationMatrixf equates to a 3x3 matrix of floats used to define a rotation

  • SolARQuaternionf equates to a Quaternion in floats used to define a rotation

Pose

The SolaARPose data structure is based on a standard row major homogeneous 4x4 matrix. Euler angles and quaternions can be directly extracted from this structure built using Eigen algorithms.

Marker

A SolAR Marker is a structure describing a convex area in a SolAR Image. A SolAR Marker allows managing different types of markers such ad fiducial markers or checker boards. It encodes shape and pose information as follows:

  • Edges: a set of SolARPoint_2Df defining the convex area. A fiducial marker can be described with four edges. The order of the points is important and impacts the structure of the marker

  • Translation: a SolARVector3f defining the translation of the marker relative to the camera

  • Rotation: a SolARRotationMatrixf defining the rotation of the marker relative to the camera

The SolAR Marker embeds information about the marker in a minimalist way. The reason is directly linked to the desired genericity across all the existing markers in the state-of-the-art methods.

Features

The current implementation of the SolAR Features data structure takes advantage of the OpenCV Features2D definition. However, we are currently working on an abstract API to handle multiple keypoints, features descriptors and extractors implementations using technologies such as CUDA and OpenVX. We will be especially focusing on proper memory management and avoiding useless data copying.

The current SolAR Features data structure is not the final implementation we are aiming for and will be undergoing changes as we actively work on it.

SolAR components interfaces

SolAR components are vision or mathematics processing elements compliant with the SolAR component interface defined by the SolAR framework.

components

Acquisition

Description

The Acquisition Interface manages the capturing strategy from a given device and provides the input signal to the next processing component.

Image

The ISolARCamera interface is dedicated to acquiring images from external device. It allows grabbing the current image and sets/extracts some parameters related to the projection and acquisition models as follows:

  • get/set camera acquisition parameters: get default acquisition setting parameters (image size, frame rate..). The user can also set custom parameters which force the camera grabbing parameters to that value.

  • get/set camera projection parameters: get camera projection parameters including camera matrix and distortion parameters. It assumes that camera is already correctly calibrated. The user can set these parameters by performing a preliminary calibration.

Conversion

Description

The Conversion Interface manages conversion for different data structure.

Image

The ISolaARImageConvertor performs the conversion between several image formats. It allows converting both color and type value using one unified method which automatically detects the color and/or type layers of the input and output.

Filtering

Description

The Filtering Interface manages filtering operations for different data structure.

Image

The ISolARImageFilter is dedicated to perform various filtering operations assuming input/output consistency. The interface embeds the following operations:

  • Binarizing

  • Equalizing

  • Blurring

  • Erosion

  • Dilation

  • Gradient

  • Laplacian

Features

The ISolARFeaturesFilter is dedicated to filter different extracted/computed features.

Markers

The ISolARMarkerFilter is dedicated to enhance marker filtering.

Estimation

Description

The Estimation Interface manages several pose estimation methods for cameras, objects and markers.

Features

The ISolARKeypointDetector, ISolARDescriptorExtractor and ISolARDescriptorMatcher allow to detect geometrically relevant points in the image using known algorithms such as SURF or SIFT. (SURF, SIFT..). They also compute descriptors around these points and correlate sets of matches.

The ISolARHomographyFinder performs an homography transformation estimation and extracts a camera pose.

Marker

The ISolARMarkerFinder allows to perform marker finding operations on different types of markers. It detects, segments and recognizes the marker and estimates its pose relative to the camera.

SolAR Third Party Connector

Description

The SolAR third party connector is a special SolAR Component used to exchange internal SolAR pose data with any third party outside of the SolAR framework. It is used to safely provide access to a SolAR Image and its associated SolAR Pose in a thread safe race free fashion. It internally implements a mutex locked circular buffer, allowing safe producer/consumer access. It allows synchronous and asynchronous read access for the consumer.

Third Party Connector

The internal buffer size of the container is currently set at one which means only the latest image and pose are available to the consumer at any given time. In the near future, SolAR will allow users to provide initialization parameters when creating components so the users will be able to specify the size of the buffer they desire.

Producer

Any component wishing to expose its pose data to an external third party must use a Third Party Connector. It can then use the set method to set the current SolAR Image and its associated SolAR Pose. The set method is thread safe and blocking. It will not return until the lock on the internal buffer is released by the reader.

Consumer

Any third party external to SolAR that needs access to internal pose data of a component must connect to its Third Party Connector. It can then use either the get method or the tryGet method to get the latest SolARImage and its associated SolARPose. The get method is thread safe and blocking. This means it will not return until there is available data to read and the lock on the internal buffer is released by the writer. The tryGet method is also thread safe but non blocking. It will return immediately after being called. It will return true if it was able to acquire the lock and read the data, or false if it was unable to obtain the lock or if there was nothing to read.

SolAR components handling

SolAR relies on the Cross Platform Component Framework (XPCF), a versatile framework that provides dynamic component instantiation and loading from modules. Basically, modules are libraries that collect components sharing a common element: purpose, framework, etc. XPCF also provides uniform component parametrization. Using XPCF, and thanks to the unified SolAR interfaces, it will be possible to build applications by picking and choosing different components in different modules at runtime without prior knowledge of the components when the application itself is compiled.

For more details, please refer to the XPCF website (coming soon).

Frequently Asked Questions

  1. What is SolAR?

    SolAR is an open source initiative to develop a framework for pose estimation that can be used for Augmented Reality (AR) applications.

  2. Who initiated the SolAR project?

    The b<>comInstitute of Research and Technology initiated the SolAR project after collecting the feedback of AR actors, AR end-users (industry, real-estate, medical, etc.), AR developers (essentially SMEs) and computer vision experts (academic researchers and research engineers from companies).

  3. Who can contribute to the SolAR project?

    Anyone can contribute to the SolAR project. Contributors only need to be proficient in C++ and computer vision skills.

  4. Can I use the SolAR framework for my AR applications?

    Of course! Just be wary of the licenses of the components used by the pose estimation pipelines you choose as each component can be under its own license, independently of the encompassing SolAR Apache v2 license.

Contact Mail

For any requests, please contact us.