[ros-users] navigation stack bare minimums

Mike Purvis mpurvis at clearpathrobotics.com
Mon Jun 7 17:06:48 UTC 2010


>
> You can also set all costmaps to rolling windows with their global
> frame as /odom. As long as you actually publish a tf between that and
> base_link (or whatever you want to call your equivalent frames), you
> should be able to run completely without a map server. I can
> definitely say that it is possible to run navigation without a static
> map - I am currently doing just that and have had no issues related to
> lack of map server.
>

Having a few remaining difficulties with this approach. I think I must be
overlooking part of it. I'm successfully broadcasting a transform between
base_link and odom (confirmed with tf_echo), and these are my two setup
files:

local_costmap:
  global_frame: odom
  robot_base_frame: base_link
  update_frequency: 5.0
  publish_frequency: 2.0
  static_map: false
  rolling_window: true

global_costmap:
  global_frame: odom
  robot_base_frame: base_link
  update_frequency: 5.0
  static_map: false
  rolling_window: true

However, I'm still receiving an error about the /map transform:

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

Is there a remaining reference to it which I haven't found?

 There's a tutorial on odometry here
> http://www.ros.org/wiki/navigation/Tutorials/RobotSetup/Odom
>

This page was extremely helpful, thank you for pointing it out! I didn't
realise until then that it was the responsibility of my odometry node to
also be broadcasting the transform.

There are no special values of frame ids.  You can use any frame_id for
> anything as long as your system is consistent.   However, we do try to use
> standard frame_ids such that nodes can have useful default values.  In
> general you will want a frame attached the the world/inertial frame if you
> want to persist any observed obstacles or landmarks.
>

Okay, so just to clarify my understanding, under this convention, the
"base_link" moves with the robot, and the "odom" frame is approximately
equal to the map frame, which is fixed. Is this so?

The way I've been handling my multi-robot requirement has been to use
ROS_NAMESPACE when launching my simulators, and then use topic names
expressed relatively. So far, this has been working great, but what will be
the impact of it when it comes to tf? Should each robot have its own odom,
or do they share it? Does tf honour the namespace, or it entirely absolute?
It looks in the turtle demo like the name of the robot is manually included
in the transform broadcast (from "world" to turtlename), which is then given
as absolute.

Also depending on your application I would expect that you will want to
> maintain both of what we call a map frame and odom frame.  The difference
> between these frames is that the odom frame is locally consistent but can
> drift away from global accuracy.   It is used for short term
> planning/control.  But long term planning is done in the map frame and our
> localization node estimates the amount of drift accumulated between the odom
> and map frame.
>

If I want (need?) to do this, do I need to run map_server? Should I also be
broadcasting a map -> baselink transform from my odometry node, or does that
come from elsewhere? If my positioning data is coming from GPS or perhaps an
indoor camera-based localization scheme, is that still "odometry", or is
odometry only for data based on encoders and other less-certain methods?

Thanks again for your assistance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ros.org/pipermail/ros-users/attachments/20100607/c79d989b/attachment-0003.html>


More information about the ros-users mailing list