Rosanswers logo


I downloaded an update for the turtlebot code today (AUG 15) and the gmapping demo worked. I noticed that there were changes to the gmapping_demo.launch file. Specifically,

  1. It includes kinect.launch which launches the openni/Kinect services for turtlebot. Was this here before? I had to launch the openni services manually just yesterday...

  2. It includes base.launch which launches robot_pose_ekf. It seems robot_pose_ekf subscribes to the odom topic (in the odom frame?) and publishes to the robot_pose_ekf/odom_combined topic (in the odom_combined frame)... this was definitely not in gmapping_demo.launch before (yesterday).

Can someone confirm that these updates were made recently? I literally arrived in the office this morning, installed the update, ran the code and had gmapping working (!).

I also have some questions regarding the transform tree for gmapping in general.

  1. gmapping uses/creates the map and odom_combined frames. Does gmapping provide the transformation map -> odom_combined as well?

  2. My earlier problem (see below) was caused by a missing transform odom -> base_link or odom_combined -> base_link and slam_gmapping complained about "still waiting for map". Is it correct to say that the robot_pose_ekf package basically takes the odometry data from the odom topic (and IMU data if any) and publishes odom_combined -> base_link?


I'm trying to get SLAM (gmapping) working on the turblebot and kinect.

The turtlebot is correctly generating "fake" laser scan data. The Kinect is acquiring a point cloud which is being converted into a laser scan. I can see all of this working correctly in rviz.

But no map is being published... The "Map" display in rviz is saying "No map received" and the slam_gmapping node is printing "Still waiting on map..." to the terminal.

I believed I have a problem with frames and transformations.

In the TF display of rviz, there are two frames that are not connected to the turtlebot frame tree: map and odom (map's child). There are no transformations connecting map to any of the frames in the turtlebot frame tree.

In the Odometry display of rviz, rivz says "Frame [odom] does not exist."

So the odom frame is not created by default as part of the turtlebot frame tree...


  1. What is the odom frame?

  2. How do I create the odom frame and generate the transformation that connects odom to the rest of the turtlebot frame tree?

  3. I don't want to write new code. Is there any existing, standard, general ROS code and/or turtlebot-specific ROS code that I can launch to answer Question 2?


Using rostopic to inspect the "odom" topic more closely, I find that odom has no subscribers (other than rviz). So whichever node is supposed to be running and using the odom information doesn't exist in my current configuration.

I would like to provide a rxgraph screenshot of my current configuration, but I get this error

Traceback (most recent call last):
  File "/opt/ros/diamondback/stacks/rx/rxgraph/src/rxgraph/impl.py", line 123, in run
    changed = g.update()
  File "/opt/ros/diamondback/stacks/ros_comm/tools/rosgraph/src/rosgraph/impl/graph.py", line 568, in update
    updated = self._node_refresh(next) or updated
  File "/opt/ros/diamondback/stacks/ros_comm/tools/rosgraph/src/rosgraph/impl/graph.py", line 452, in _node_refresh
    updated = self._node_refresh_businfo(node, api, bad_node)
  File "/opt/ros/diamondback/stacks/ros_comm/tools/rosgraph/src/rosgraph/impl/graph.py", line 407, in _node_refresh_businfo
    connection_id = info[0]
IndexError: list index out of range

Originally posted by twong on ROS Answers with karma: 21 on 2011-08-11

Post score: 1

Original comments

Comment by mmwise on 2011-08-11:
the rxgraph error is a known bug, how about posting the results from rosnode info turtlebot_node... is your turtlebot on? turtlebot should be publishing odom

Comment by mmwise on 2011-08-11:
can you run rxgraph and post a screen shot of your running system?


1 Answer 1


Rosanswers logo

To answer your questions:

  1. odom is the odometry topic published by the turtlebot_node. This reports the pose of the TurtleBot base_link.

  2. You should not create the odom topic. The turtlebot_node should be publishing it.

  3. Run the turtlebot_node. This leads me to ask is your turtlebot_node running???

This is what rosnode info turtlebot_node should return:

turtlebot-user@turtlebot-workstation$ rosnode info turtlebot_node
Node [/turtlebot_node]
 * /turtlebot_node/sensor_state [turtlebot_node/TurtlebotSensorState]
 * /imu/raw [sensor_msgs/Imu]
 * /imu/data [sensor_msgs/Imu]
 * /joint_states [sensor_msgs/JointState]
 * /rosout [rosgraph_msgs/Log]
 * /odom [nav_msgs/Odometry]
 * /diagnostics [diagnostic_msgs/DiagnosticArray]

 * /turtlebot_node/cmd_vel [unknown type]

 * /turtlebot_node/set_operation_mode
 * /turtlebot_node/set_digital_outputs

contacting node ...
Pid: 16071
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS
 * topic: /joint_states
    * to: /robot_state_publisher
    * direction: outbound
    * transport: TCPROS
 * topic: /diagnostics
    * to: /diagnostic_aggregator
    * direction: outbound
    * transport: TCPROS

To answer other questions:

  1. As TurtleBots are starting to ship out we're trying to finalize much of the code that has been in development. Recently we move our development to using the turtlebot service by default, this impacted many of the launch files in turtlebot_apps, so yes the launch files did change on monday or tuesday of this week (8/8/2011). We Will most likely continue to do release updates over the next week or so to improve usability for turtlebot users.

  2. looking at the documentation for the gmapping and robot_pose_ekf packages we can see that the gmapping package provides the map -> odom transform while robot_pose_ekf package provide the odom_combined -> base_link transform. TF then provides the transforms for all the resulting relations when requested.

  3. the robot_pose_ekf package uses an extended Kalman filter to combine the raw odometry data from the robot with the imu data using the covariances provided in the odom and imu messages to result in a more accurate odometry that is called odom_combined.

I have also create a video tutorial that gives an overview of how odometry works on the TurtleBot, since it seems to be a popular question for TurtleBot users. You can find it here:http://www.youtube.com/watch?v=S4EkL68uB0c

Originally posted by mmwise with karma: 8372 on 2011-08-11

This answer was ACCEPTED on the original site

Post score: 3


Your Answer

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