Rosanswers logo

My question: Hey everyone, What is the best way to connect odom to base_link? Should I modify the navigation stack to look for odom_combined instead? Or would that be too difficult?

Explanation/background: I'm using the iRobot create and the package create_node. The package works great and I can send cmd_vel topics via the keyboard and it responds, however in rxgraph i can see the create_node is publishing /odom but it is not being sent to tf and therefore it is not the parent of base_link. When I view the tf tree odom_combined is the parent of base_link and odom is not connected, but none of the navigation stacks care about odom_combined, they only want odom. Running on a modified turtlebot.

Originally posted by Rydel on ROS Answers with karma: 600 on 2012-06-04

Post score: 3

Original comments

Comment by lindzey on 2012-06-04:\

It sounds like you're getting the /odom topic (what rxgraph shows) and the /odom frame confused. Note that all transform messages show up as /tf in rxgraph. I'm not familiar with the particular packages you're using - if it's all working, why do you need to have a frame named "/odom"?


1 Answer 1


Rosanswers logo

I'm not sure where to find the create_node you are talking about but I guess you are just using a really old version of the turtlebot_node.

On the PR2 and I think also on older turtlebot configurations, robot_pose_ekf, a node that implements an extended Kalman filter for fusing IMU and odometry, subscribes to the /odom topic and publishes the transform from odom_combined to base_link (or base_footprint in case of the PR2). All navigation nodes that need to know about the odometry TF frame provide a parameter to change the default frame from odom to odom_combined which is done in all PR2 navigation launch files. In newer Turtlebot launch files, the TF frame name for odometry is odom (parameter output_frame here) which allows to use the default values for the odometry frame in the navigation nodes.

If you don't have an IMU, I can just guess that the transform odom_combined -> base_link is published by the create_node but to be sure, double check by running rosrun tf tf_monitor. In that case, I suggest that you update your robot driver to the current Turtlebot driver (stack turtlebot. The Turtlebot is based on the iRobot Create, so the driver will work for you. It provides a few parameters to control how transforms are published. E.g. the following launch file might work:

  <node name="turtlebot_node" type="turtlebot_node.py" pkg="turtlebot_node">
      publish_tf: true
      odom_frame: odom

Originally posted by Lorenz with karma: 22731 on 2012-06-04

This answer was ACCEPTED on the original site

Post score: 7


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.