ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I got an answer, thanks to Brian Gerkey for clarifying for me...posting here for reference of others.

In the map->odom->base_link relationship, it is the localization package's responsibility to publish a map->odom frame and NOT the robot controller's responsibility as I had thought. A robot stack builder's responsibility is to publish the odom->base_link, and the laser scan data. The localization engine (amcl or what have you) will consume /map (presuming a map_server instance is running), /scan (you are publishing laser scans) and the odom->base_link (where you think you are) TF. Amcl will then attempt to place the robot in the map and will place/move the odom frame accodingly in the map by publishing the map->odom transform.

odom frame may jump and move non-continuously, but base_link should move continuously within that odom->base_link frame. So the frame may jump, but the robot is always moving smoothing relative to the odom frame within odom->base_link.

The odom->base_link relationship is where one might be applying a kalman filter or other means to create the best possible guess of where the robot is relative to where it started. The localization engine will shift the entire relationship...I am guessing (and want to confirm) that it will align the base_link TF to where it localizes the robot to actually be on the map based on laser scans data. On rviz you'd see a shift or jump of the whole odom->base_link frame.