Localization Segment (RobotState Memory)

Concept

There exist various frames that are needed to obtain the robot's global pose (pose within in the global frame):

Name Description
global The "world" frame
map During mapping, the robot does not have knowledge about the world but creates a local map (with map as root frame). All map features (e.g. point clouds, occupancy grids, ...) are linked to this frame.
odom The odometry as an integration of the robot's velocity.
robot The robot's root frame
frames

For each transformation between frames, there exist individual components:

Involved Frames Description
global->map Map registration: given a scene (objects with known poses, e.g. walls, ...), this component obtains a static transformation between a the scene and the map.
map->odom Localization The localization component computes the transformation map->robot and performs map corrections by updating map->odom.
odom->robot Odometry

Memory Design

Within the core segment, each robot has its own provider segment (here: Armar6). Within the provider segment, entities describe the transformations between the frames (Global,Map -> global->map).

Localization

Using the Localization Memory

See armarx::armem::client::robot_state::localization (include RobotAPI/libraries/armem_robot_localization/).

There exist two classes:

  • armarx::armem::client::robot_state::localization::TransformWriter to send transformations to memory
  • armarx::armem::client::robot_state::localization::TransformReader to obtain transformations between any of the frames; can also be used to obtain the "robot's global pose"

For an example, see RobotComponents/components/carographer_mapping_and_localization (currently branch feature/cartographer_integration)