Mapping Grids

The OOMRM model maintains three maps: the top level grid (invariant grid) for simulation use, the bottom layer grid (transient or navigational grid) for A* and a middle layer (scene) for dynamic mapping use. Currently, the A* grid is non accessible as it is only existent for a brief time while solving the path; once solved, the A* grid is discarded.

The invariant grid is loaded from simulator via external file (Ref. Scene Editor and Import. Finally the robot grid is copied to the navigational grid in the A* algorithm (automatic). Also, the both the invariant and scenario grid can be loaded or imported from file. This will allow using a different size and shape world than the internal map (scenario) thus giving the ability to experiment with error reduction due to map alignment/size and robot initial misplacement.

Invariant Grid (Map)

The invariant grid [invariant::world()] is part of the invariant class. It is initialized when you open a grid from the "Grid" menu. This is the top layer and represents what actually exists. This grid is only used in the simulator and thus never exists on the 68332 side. Its purpose is to provide an error model for testing various dead-reckoning error reduction mechanisms. By disabling all error terms, it also allows display of the error associated with using fixed point math (the error model uses floats). The utility function invariant::copy(ogrid) can be used to populate the world grid with a scenario grid.

Robot's Scene Grid (Map)

The robot's scene grid is next layer which provides a representation of the world as perceived by the robot--this is in persistent memory. Internally, the methods for this map are implemented in the OGrid class (occupancy grid). This is where all the obstacles are set up that will be tested.

Navigational Grid

Search Navigational Grid (A*, D*, etc.): This is the internal grid used by the path planning routines. Currently it is set up in the Star base class and should not need accessing normally. The Navigational Grid is initialized internally from the Robot's (scene) Occupancy grid according to its own internal algorithm to translate the obstacles into field strength to aid navigation. Note, the invariant and scene layers can be individually toggled on/off in the simulator using the radio buttons labeled "invariant" and "scene".

Dynamic Mapping

Through the simulator, without an error model, dynamic mapping works perfectly. The problem is when you add position and sensor error, then the outcome is usually similar to that produced in Figure 6.

Figure 6

This is the robot's grid that was uploaded into the simulator via the M3 upload function. It illustrates the classical problem associated with dynamic mapping; the actual obstacles were similar to a maze with an actual wall in front about 6" with another wall about 2' to the right. As you can see sensor error, probably in combination with position error created a very inaccurate representation of the world. If run using the scene editor and the simulator, the results are exact as expected; with the introduction of the invariant error model, the results are now getting more realistic.