Ask Your Question
1

TurtleBot gmapping demo still waiting for map

asked 2011-08-11 02:36:40 -0500

twong gravatar image

updated 2011-08-12 09:15:20 -0500

mmwise gravatar image

UPDATE:

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?

PROBLEM:

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...

QUESTIONS:

  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?

MORE INFORMATION:

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 ...
(more)
edit retag flag offensive close merge delete

Comments

can you run rxgraph and post a screen shot of your running system?
mmwise gravatar imagemmwise ( 2011-08-11 06:22:44 -0500 )edit
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
mmwise gravatar imagemmwise ( 2011-08-11 10:36:03 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted
3

answered 2011-08-11 10:40:56 -0500

mmwise gravatar image

updated 2011-08-19 06:00:23 -0500

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]
Publications: 
 * /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]

Subscriptions: 
 * /turtlebot_node/cmd_vel [unknown type]

Services: 
 * /turtlebot_node/set_operation_mode
 * /turtlebot_node/set_digital_outputs


contacting node http://10.0.11.141:36131/ ...
Pid: 16071
Connections:
 * 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

edit flag offensive delete link more
0

answered 2011-08-11 04:34:35 -0500

dornhege gravatar image

For 1,2): Odom is the robots odometry, its motion estimate. How the tf tree should look like is described in the Coordinate Frames document. The odometry is the transformation /odom -> /base_link and should be provided by the robot driver.

gmapping will provide the /map -> /odom part, if it is running.

For 3): I would assume the turtlebot driver provides odometry, but I never used it. Some turtlebot user/developer can give this information.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2011-08-11 02:36:40 -0500

Seen: 2,896 times

Last updated: Aug 19 '11