TF structure - FontysAtWork/ESA-PROJ GitHub Wiki
The navigation stack relies on TF2 to keep track of the wheels, sensors, etc. The current implementation of the navigation stack has the following tf layout:
/img/tf/tf_tree_navigation_stack.png
Map to odom
The map to odom frame is filled by AMCL. This frame provides a static reference for other tf frames in map space (0,0 on the map). AMCL publishes the robots position as retrieved from the LiDAR sensors in this frame.
Odom to base_footprint
This frame is published by the robot driver and contains odometry information. This odometry information is retrieved from the wheel encoders on the robot. The odometry of a robot with mecanum wheels is in it's nature inaccurate (because of wheel slippage). However this gets resolved by AMCL. It handles it by offsetting the odometry drift in the map to odom frame.
Base_footprint to base_link
The next frame can be quite confusing because you already have a base_footprint. More so when you realize they have the same coordinates. This was a decision made by the developers of the Youbot. When looking at the sources the base_footprint has a different mesh and inertia than the base_link. The base_footprint is used by the KUKA arm and the base_link is used by our navigation stack. For now we left it in there. It may be removed later in a later stadium.
Base_link to caster_links and wheel_links
One important link is from base_link to the wheels. It is published by the state publisher. For each of the four wheels there is a caster and wheel link. This because the wheels axle is off-center in relation to the motor and gearbox. Though it is directly below the motor axle it still has a neutral caster. The position of the wheels is of course necessary to calculate the wheel efforts to get to a goal.
Base_link to hokuyo_front_link and hokuyo_back_link
These links define the positions of the LiDARs based on the base_link. They are used by AMCL to map the readings of the LiDARs into map space.
Base_link to base_laser_front_link and base_laser_back_link
These links are published by the state_publisher and are unused in the navigation stack. They need to be removed in the future.
Base_link to plate_link
On the back of the robot a aluminium plate is mounted to place objects on. The offset is published by the state_publisher. It can be used (for example) by the arm to place things.