[ros-users] navigation stack bare minimums

Eitan Marder-Eppstein eitan at willowgarage.com
Mon Jun 7 17:40:00 UTC 2010


Mike,

I've answered in line:

On Mon, Jun 7, 2010 at 10:06 AM, Mike Purvis
<mpurvis at clearpathrobotics.com>wrote:

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

With the parameters that you posted, you should no longer receive this
error. Can you take a look at the parameters you have set with "rosparam
dump" to make sure that the parameters for the global_costmap are being set
correctly? They should fall under the move_base_node/global_costmap/
namespace.

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

That's correct. The odom frame is a fixed frame.


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

The "tf_prefix" parameter is how we handle tf trees from multiple robots,
you can check out documentation on it here:
http://www.ros.org/wiki/tf/CoordinateFrameConventions. Typically, each robot
has its own odom frame and robots are related to each other via a map frame
where they know their position relative to each other.


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

If you're doing a lot of multi-robot navigation and you want the robot's to
be aware of each other's positions, you'll probably need a map frame. You
don't necessarily need to run a map_server, but you will need to have your
localization source, whether that be GPS, camera-based localization, or
other, publish a transform from the map frame to the odom (or if you don't
have odom, base_link) frame of your robot. In the case where you don't have
a map_server... you'd still set the "static_map" parameter on the
global_costmap to be false.

Hope this helps,

Eitan


>
> Thanks again for your assistance.
>
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ros.org/pipermail/ros-users/attachments/20100607/294d0ca0/attachment-0003.html>


More information about the ros-users mailing list