Jafar
|
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.
The hierarchical organization of all these objects is defined family-tree-like, as shown here:
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:
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.
Generated on Wed Oct 15 2014 00:37:30 for Jafar by doxygen 1.7.6.1 |