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

Revision history [back]

You get to specify what you mean within the message itself so that there is no ambiguity. Check out ROS REP 105, where some common coordinate frames and their meanings are discussed. What you are calling "robot coordinates" is called base_link, and "world coordinates" is called odometry. Note that there are multiple extrinsic frames, with map and utm being the other common extrinsic frames in addition to odometry.

The way that you specify which coordinate frame you are using is by setting the nav_msgs/Odometry/Header/frame_id field. It is then up to the nodes subscribing to your messages to correctly interpret the data. Very often, tf is used to transform data into the appropriate frame for the specific receiving node.

For your specific question, I have mostly seen robot velocity measurements (from GPS, wheel encoders, Kalman filters, etc.) be published in the base_link (or intrinsic, "robot coordinates") frame.

You get to specify what you mean within the message itself so that there is no ambiguity. Check out ROS REP 105, where some common coordinate frames and their meanings are discussed. What you are calling "robot coordinates" is called base_link, and "world coordinates" is called odometry. Note that there are multiple extrinsic frames, with map and utm being the other common extrinsic frames in addition to odometry.

The way that you specify which coordinate frame you are using is by setting the nav_msgs/Odometry/Header/frame_idHeader/frame_id field. It is then up to the nodes subscribing to your messages to correctly interpret the data. Very often, tf is used to transform data into the appropriate frame for the specific receiving node.node. If there is no Header/frame_id field (as is the case for the basic Twist message) then I have seen most subscribing nodes assume that the Twist data is in the base_link frame. If possible, it is nicer to use the TwistStamped or TwistWithCovarianceStamped variants of the message type for this reason.

For your specific question, I have mostly seen robot velocity measurements (from GPS, wheel encoders, Kalman filters, etc.) be published and interpreted as being in the base_link (or intrinsic, "robot coordinates") frame.

You get to specify what you mean within the message itself so that there is no ambiguity. Check out ROS REP 105, where some common coordinate frames and their meanings are discussed. What you are calling "robot coordinates" is called base_link, and "world coordinates" is called odometryodom. Note that there are multiple extrinsic frames, with map and utm being the other common extrinsic frames in addition to odometryodom.

The way that you specify which coordinate frame you are using is by setting the Header/frame_id field. It is then up to the nodes subscribing to your messages to correctly interpret the data. Very often, tf is used to transform data into the appropriate frame for the specific receiving node. If there is no Header/frame_id field (as is the case for the basic Twist message) then I have seen most subscribing nodes assume that the Twist data is in the base_link frame. If possible, it is nicer to use the TwistStamped or TwistWithCovarianceStamped variants of the message type for this reason.

For your specific question, I have mostly seen robot velocity measurements (from GPS, wheel encoders, Kalman filters, etc.) be published and interpreted as being in the base_link (or intrinsic, "robot coordinates") frame.