Jafar
Philosophy and general architecture

Subpages:

In a typical SLAM problem, one or more robots navigate an environment, discovering and mapping landmarks on the way by means of their onboard sensors. There will usually be several robots of different kinds, carrying a different number of sensors of different kinds, which gather raw data and, by processing it, are capable of observing several landmarks of different kinds. All this variety of data is handled by the present Jafar Module rtslam in a way that is quite transparent.

The module segments all data in 5 main classes: the map, robots, sensors, landmarks and observations. Here is an example of the structure.

slam.png
The main objects in rtslam

The hierarchical organization of all these objects is defined family-tree-like, as shown here:

familyTree.png
The family tree hierarchical organization

The family-tree differs from a regular tree in that an object can have more than one parent (ie. a father and a mother).

See the Parental links page for more information about the parental links.

The global organization of the main objects is represented in a UML-like way here:

organization-uml.png
The global organization of main objects

REMARK: The existence of the class Observation permits the correct segmentation of data and methods into comprehensive units. An Observation exists every time there exist a sensor and a landmark, regardless of the sensor having actually observed the landmark or not. An observation stores everything related with the pair sensor-landmark. Its type is determined by both the sensor type and the landmark type. Therefore, its methods and data depend on both the type of sensor and the type of landmark, and cannot be stored, owned or contained in any other place. An Observation has a full existence in its own right, as any other object in SLAM.

Here is an example of the class Observation:

  class ObservationAbstract
  {
    public:
      SensorAbstract   * sensor;                    // Pointer to mother sensor.
      LandmarkAbstract * landmark;                  // Pointer to father landmark.
      Expectation      expectation;                 // Expectation. This is a Gaussian.
      Measurement      measurement;                 // Measurement. This is a Gaussian.
      Innovation       innovation;                  // Innovation. This is a Gaussian.
      struct           counters;                    // Event counters for map management.
      struct           events;                      // Event flags for active-search flow control.
      virtual bool     project() = 0;               // Project landmark into sensor.
      virtual bool     isVisible() = 0;             // True if landmark is visible.
      virtual bool     match();                     // Try to match and get measurement.
      virtual bool     isIndividuallyConsistent();  // Consistency test.
      virtual void     back_project() = 0;          // Back-project feature into landmark for initialization.
  };

Here is an overview of how these objects are treated in this software.

See the jafar::rtslam::MapAbstract class reference for a full dependence diagram. Observe that many bricks of data derive from a class jafar::rtslam::Gaussian (solid arrows; the dashed arrows indicate ownship). This should not be surprising as we are dealing with EKF. See the section Gaussians below for further details.

The classes specifying the structure and operation of these objects are defined as Abstract. They must be derived for each new instance that wants to be incorporated.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Wed Oct 15 2014 00:37:30 for Jafar by doxygen 1.7.6.1
LAAS-CNRS