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

Transform from base_link to /map navigation stack error

asked 2011-05-09 21:07:36 -0600

mbj gravatar image

updated 2011-05-19 14:25:29 -0600

mmwise gravatar image

Hi!

I'm installing the navigation stack in my own simulated robot, but when I try to launch I gave the next problem:

"Waiting on transform from base_link to /map to become available before running costmap, tf error: Frame id /base_link does not exist!"

Searching a little I found that normally the transform broadcaster of one robot publish 3 tf (odom->base_link_offset base_link_offset->base_link base_link_ofsset->baser_laser_link) but I'm not sure for what is exactly each one and what are the necessary for make the navigation stack run. By other hand, my robot only publish one transform trought the chassis->base_laser_link (as explained in this tutorial), so I think that there is the problem.

Can anyone help me?

edit retag flag offensive close merge delete

4 Answers

Sort by » oldest newest most voted
4

answered 2011-06-09 04:05:25 -0600

eitan gravatar image

The frames necessary to run the navigation stack can vary based on its configuration. You might, for example, run the navigation stack in an odometric frame which would mean that you'd need something like "odom -> base_link -> base_laser" at minimum. However, if you run with a static map or SLAM, you'd want a tf tree that looks something like "map -> odom -> base_link -> base_laser." At the very least, the navigation stack requires some sort of global frame to work properly. So, setting the global_frame parameter of the costmap to something like "base_link" wouldn't make much sense.

If you were to use the configuration described in the Setup and Configuration Tutorial, 4 frames are required: "map->odom->base_link->base_laser."

edit flag offensive delete link more
0

answered 2011-05-09 22:21:35 -0600

Guido gravatar image

I think the problem comes from the navigation stack expecting a frame called "base_link", while you called it "chassis". Try changing the name "chassis" by "base_link" in your tf_broadcaster code.

Make sure you launched the map_server so the /map frame exists too.

Hopes this help,

Guido

edit flag offensive delete link more

Comments

Thanks but there isn't a name problem. I tried your solution and the problem persist but I solved them adding a tf (chassis->map) in the tf_broadcaster (these tf could be the distance between the map and the center of my chassis?). At this moment my problem is the next: "Waiting on transform from /chassis to /odom to become available before running costmap, tf error: Frame id /odom does not exist!", however there is a /odom topic publishing the correct tf, but no topic use them. It is necessary that these tf be published by the /tf topic?
mbj gravatar image mbj  ( 2011-05-10 00:13:20 -0600 )edit
The tf_broadcaster broadcasts a chassis->odom transform ?
Guido gravatar image Guido  ( 2011-05-10 01:18:58 -0600 )edit
Yes, but the problem is this: TF_NAN_INPUT: Ignoring transform for child_frame_id "/chassis" from authority "/tf_broadcast_node" because of a nan value in the transform (0.000000 0.000000 0.000000) (-nan -nan -nan -nan) I think that this is because I am subscribing the /odom topic in tf_broadcaster, and after this, sending the data obtained trough a tf like the others (chassis -> map, chassis -> laser). I launched rostopic echo /odom and the topic was publishing data, but more of their values are near to 0.0 (like x: 3.98959187107e-06, y: -1.8343490578e-10). To check this, I launched rostopic echo /joint_state and comparate in the velocity that arrives to my odometry_node (trough a subscription to /joint_state topic). As I expected, there are diferent values and it seems that the problem is genered trough here. To clarify this, I made a capture to rxgraph ( http://i51.tinypic.com/68ypt4.jpg ). Any idea?
mbj gravatar image mbj  ( 2011-05-10 21:51:17 -0600 )edit
0

answered 2011-05-09 22:49:06 -0600

A tool I find very helpful to see whats going on with the tf tree is view_frames from the tf package.

It will print you a pdf file with your current tf tree.

An alternative to what Guido suggested would be to tell the navigation stack what is the name you have given to the robot base frame. It probably required more work though. Assuming you are using similar files to those in the navigation tutorials open the files global_costmap_params.yaml and local_costmap_params.yaml and change the lines robot_base_frame: /base_link to robot_base_frame: /chassis

Gonçalo Cabrita

edit flag offensive delete link more
0

answered 2011-05-10 22:19:44 -0600

mbj gravatar image

Going back to the main theme, which would be the tf and the frames expected for a robot that only has a laser? It would not have any tf_listener, it takes care the navigation stack, right?

Sorry if this is very basic, but the way is documented in the tutorial RobotSetup seems to only be necessary tf between /base_link -> /laser.

Thanks!

edit flag offensive delete link more

Question Tools

Stats

Asked: 2011-05-09 21:07:36 -0600

Seen: 8,197 times

Last updated: Jun 09 '11