Robotics StackExchange | Archived questions

Problem configuring Navigation stack

I am using navigation stack along with movebase and for localization, i am relying on robotlocalization instead of amcl. Also i am not using gmapping. Here is what i am doing. first roscore on my PC, then roslaunch bringup..... on my robot, then launching ekf_template.launch file whose .yaml file is below. i am using two sources of odomtery.

map_frame: map            
odom_frame: odom           
base_link_frame: base_link  
world_frame: odom  

Then launch a map through launch file without specifying any frame.Then launch navigation stack and then move_base. Now i want to configure the global and local cost map values and also how the tf will work. My environment is static and and require no dynamic obstacles. But if use default values of move_base, i am getting error. I am not very profound in ROS, so a little help/guide will be highly appreciated.I try to learn from wiki.ros about how the parameters will act but still i am unable to use.

Update:: Errors and .yaml files

My local cost map .yaml file is

local_costmap:
  global_frame: /map

  robot_base_frame: base_link

  update_frequency: 10.0
  publish_frequency: 10.0
  transform_tolerance: 0.5  

  static_map: true  
  rolling_window: true
  width: 5
  height: 5
  resolution: 0.0

and my global costmap .yaml file is

global_costmap:
  global_frame: odom
  robot_base_frame: base_link
  update_frequency: 10.0
  publish_frequency: 10.0
  transform_tolerance: 0.5

  static_map: true

Update:

So i guess i was missing state publisher in robotlocalization. I added this code in my ekftemplate file, and now i am not getting the above warning, instead i get this.

[ WARN] [1570390223.076345613]: Costmap2DROS transform timeout. Current time: 1570390223.0762, global_pose stamp: 1570211809.1178, tolerance: 0.5000

This is what i added.

initial_state: [1.5,  2.0,  0.0,
                0.0,  0.0,  1.0,
                0.0,  0.0,  0.0,
                0.0,  0.0,  0.0,
                0.0,  0.0,  0.0]

i have provided my tf tree in updated question. I want to move my robot using movebase while locating it by the information provided by `robotlocalization`. What should i do? Rosnode list:

/ekf_se
/map_server
/publisher_turtlebot_1028_1570209552521
/robot_state_publisher
/rosout
/rviz
/turtlebot3_core
/turtlebot3_diagnostics

Tf tree: image description

Any suggestions how should i make the frame selection

Asked by Ahmed1212 on 2019-10-04 11:52:59 UTC

Comments

i am getting error

Can you please update your question wit a copy and paste of the error?

Asked by jayess on 2019-10-04 12:59:15 UTC

i have updated my question. Can you please have a look and hopefully help me with some solution

Asked by Ahmed1212 on 2019-10-05 14:45:14 UTC

Hi.

[ WARN] [1570234277.210068930]: Could not get robot pose, cancelling reconfiguration

will come up until the robot initial pose has been set. It's not serious unless you have set the initial pose and are still seeing it. Note that it is not a error. It is a warning.

You can search for many other questions here for the time stamp question.

If you haven't yet gone through the entire tutorial for the Navigation Stack, I strongly suggest you take the time to do so.

When I start up nav stack I get serveral warnings as different nodes get started and things get set up. If you have a specific question about something not working, it will be easier to help.

I suggest you add your TF tree to the question to allow us to have better idea of what you're working on.

Asked by billy on 2019-10-05 18:53:32 UTC

So i guess i was missing state publisher in robot_localization. I added this code in my ekf_template file, and now i am not getting the above warning, instead i get this.

[ WARN] [1570390223.076345613]: Costmap2DROS transform timeout. Current time: 1570390223.0762, global_pose stamp: 1570211809.1178, tolerance: 0.5000

This is what i added.

initial_state: [1.5,  2.0,  0.0,
                0.0,  0.0,  1.0,
                0.0,  0.0,  0.0,
                0.0,  0.0,  0.0,
                0.0,  0.0,  0.0]

i have provided my tf tree in updated question. I want to move my robot using move_base while locating it by the information provided by robot_localization. What should i do? I am unable to provide my tf tree as it requires 5 points and i am new on here. But from odom, it goes to base_footprint (broadcaster: turtlebot3_core) and base_link(broad caster: ekf_se), and base_footprint ends there while base_link goes to wheels and base scan and all others

Asked by Ahmed1212 on 2019-10-06 14:44:11 UTC

@Ahmed1212 I upvoted your question so that you have enough points to upload a picture of your tf tree.

Asked by jayess on 2019-10-06 16:55:52 UTC

Thanks. I Have updated my question

Asked by Ahmed1212 on 2019-10-06 18:47:03 UTC

I dont see the map frame being generated at all. Also 0.0 resolution for the local costmap does not make any sense. To begin with, I would suggest using odom as global_frame for both local and global costmaps and set some reasonable resolution (0.1-0.5) for them both. Also can you post your costmap common parameters where the plugins/layers are declared

Asked by pavel92 on 2019-10-07 02:47:04 UTC

I have changed my resolution to 0.5 and also odom as global frame in both,but still of no good. Below is my costmap common parameters. I am not declaring any plugins. How and what should i do?

obstacle_range: 0.5
raytrace_range: 0.5

footprint: [[-0.105, -0.105], [-0.105, 0.105], [0.041, 0.105], [0.041, -0.105]]
#robot_radius: 0.105

inflation_radius: 1.0
cost_scaling_factor: 3.0

Asked by Ahmed1212 on 2019-10-07 03:27:17 UTC

how do you launch the map?

Asked by pavel92 on 2019-10-07 03:30:46 UTC

add the static map layer in you commom costmap params:

plugins: 
 - {name: static_layer,            type: "costmap_2d::StaticLayer"}

static_layer:
    map_topic: /map

Asked by pavel92 on 2019-10-07 03:33:25 UTC

      <arg name="map_file" default="$(find provide_map)/maps/map.yaml"/>

      <!-- Run the map server -->
      <node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" >
        <param name="frame_id" value="odom"/>
     </node>

    </launch>

One more thing, this is launch file of robot_localization. DO i need to put odom in here?

<launch>
  <node pkg="robot_localization" type="ekf_localization_node" name="ekf_se" clear_params="true">
    <rosparam command="load" file="$(find robot_localization)/params/ekf_template.yaml" />

    <!--  Placeholder for output topic remapping
    <remap from="odometry/filtered" to=""/>
    <remap from="accel/filtered" to=""/>
    -->

  </node>
</launch>

Asked by Ahmed1212 on 2019-10-07 03:47:18 UTC

Depends what you have in ekf_template.yaml? Does it contain the frame params and sensor params?
But note that this is already diverging from the initial question. I would suggest opening a new question if you have localization related problem. Once you have a reasonable localization running, then I would go with the navigation part.

Asked by pavel92 on 2019-10-07 03:58:44 UTC

Yes i have localizing running. you can ignore this, this was just for a confirmation. My launch file for map is shared. Should i share my navigation and move_base launch files also?

Asked by Ahmed1212 on 2019-10-07 04:04:44 UTC

In addition to the previous stated things, try increasing the transform tolerance in costmap common params. For example:

transform_tolerance: 1.0

Asked by pavel92 on 2019-10-08 05:18:28 UTC

Although I am not sure that it will help since I just noticed the difference in the timestamps

Asked by pavel92 on 2019-10-08 05:20:35 UTC

It looks like 3 of your transforms aren't getting published given most recent transform = 0. Are you using simulated time?

Asked by billy on 2019-10-09 01:38:53 UTC

Did you ever figure this out? I haven't gone over the comments, but if you don't have a global pose source from a package that does scan-to-map matching (like amcl), your pose estimate will drift without bound and become unusable for nav.

Asked by Tom Moore on 2020-01-02 05:05:43 UTC

Answers