Robotics StackExchange | Archived questions

Could not transform the global plan to the frame of the controller

Hello,

I'm working on an Odroid XU4, have the navigation stack up and running and using the RPLIDAR A1 with its corresponding ros package. I made my own global path planner plugin according to this tutorial and I'm using amcl for localisation and a priori known map.

These are my config files:

baselocalplanner_params.yaml

 TrajectoryPlannerROS:
   max_vel_x: 0.2
   min_vel_x: 0.05
   max_vel_theta: 0.5
   min_vel_theta: -0.5
   min_in_place_vel_theta: 0.1
   acc_lim_theta: 0.2
   acc_lim_x: 0.1
   acc_lim_y: 0.1
   holonomic_robot: false
   controller_frequency: 3.0

costmapcommonparams.yaml

obstacle_range: 2.5
raytrace_range: 3.0
footprint: [[-0.170, -0.220], [-0.170, 0.220], [0.170, 0.220], [0.170, -0.220]]
inflation_radius: 0.50
transform_tolerance: 2.0
observation_sources: laser_scan_sensor
laser_scan_sensor: {sensor_frame: laser, data_type: LaserScan, topic: scan, marking: true, clearing: true}

globalcostmapparams.yaml

global_costmap:
  global_frame: /map
  robot_base_frame: base_link
  update_frequency: 3.0
  publish_frequency: 0.1
  transform_tolerance: 2.0
  static_map: true
  rolling_window: false
  map_type: costmap

localcostmapparams.yaml

local_costmap:
  global_frame: /odom
  robot_base_frame: base_link
  update_frequency: 3.0
  publish_frequency: 1.0
  transform_tolerance: 2.0
  static_map: false
  rolling_window: true
  width: 4.0
  height: 4.0
  resolution: 0.05
  map_type: costmap

Here are my launch files:

<launch>
  <master auto="start"/>

  <!-- Run the map server -->
  <node name="map_server" pkg="map_server" type="map_server" args="$(find vav_2dnav)/map/map.yaml"/>

  <include file="$(find amcl)/examples/amcl_diff.launch" />

  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <param name="base_global_planner" value="planner_plugin/PlannerPluginROS" />
    <param name="planner_frequency" value="0.0" />
    <rosparam file="$(find vav_2dnav)/config/costmap_common_params.yaml" command="load" ns="global_costmap"/>
    <rosparam file="$(find vav_2dnav)/config/costmap_common_params.yaml" command="load" ns="local_costmap"/>
    <rosparam file="$(find vav_2dnav)/config/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find vav_2dnav)/config/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find vav_2dnav)/config/base_local_planner_params.yaml" command="load"/>
  </node>
</launch>

<launch>
  <node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen">
  <param name="serial_port"         type="string" value="/dev/rplidar"/>
  <param name="serial_baudrate"     type="int"    value="115200"/>
  <param name="frame_id"            type="string" value="laser"/>
  <param name="inverted"            type="bool"   value="false"/>
  <param name="angle_compensate"    type="bool"   value="true"/>
  </node>

  <node pkg="tf" type="static_transform_publisher" name="lidar_base_tf_broadcaster" args="0 0 0.22 0 0 0 base_link laser 50" />

  <node name="compare_velocity_master" pkg="io_handler" type="io_handler_compare_velocity_master" respawn="true" /> 
  <node name="iohandler_master" pkg="io_handler" type="iohandler_master_final.py" respawn="true" /> 

</launch>

Once I submit my start and goal location to the navigation stack using rviz, the plugin is used to compute the path but in the end it shows this error:

[ WARN] [1492085935.141434881]: Control loop missed its desired rate of 20.0000Hz... the loop actually took 0.4691 seconds
[ WARN] [1492085935.687472491]: Control loop missed its desired rate of 20.0000Hz... the loop actually took 0.5461 seconds
[ WARN] [1492085935.688036031]: Map update loop missed its desired rate of 3.0000Hz... the loop actually took 0.7545 seconds
[ WARN] [1492085936.149723390]: Control loop missed its desired rate of 20.0000Hz... the loop actually took 0.4622 seconds
[ WARN] [1492085936.694716876]: Control loop missed its desired rate of 20.0000Hz... the loop actually took 0.5450 seconds
[ WARN] [1492085936.695173709]: Map update loop missed its desired rate of 3.0000Hz... the loop actually took 1.0073 seconds
[ WARN] [1492085937.137204138]: Control loop missed its desired rate of 20.0000Hz... the loop actually took 0.4425 seconds
[ERROR] [1492085937.646900968]: Extrapolation Error: Lookup would require extrapolation into the future.  Requested time 1492085937.077392101 but the latest data is at time 1492085937.020695208, when looking up transform from frame [odom] to frame [map]

[ERROR] [1492085937.647219426]: Global Frame: odom Plan Frame size 11: map

[ WARN] [1492085937.647484884]: Could not transform the global plan to the frame of the controller

After this error appears, the planner plugin starts again and again and eventually shows this:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
terminate called recursively [move_base-3] process has died [pid 23420, exit code -6, cmd /opt/ros/kinetic/lib/move_base/move_base __name:=move_base __log:=/home/odroid/.ros/log/0f3e567a-2042-11e7-a066-001e06304fa5/move_base-3.log].
log file: /home/odroid/.ros/log/0f3e567a-2042-11e7-a066-001e06304fa5/move_base-3*.log

This is the link to my tf tree. I found similar questions here and here but they didn't really help me. I hope someone could give me a hint into the right direction!

Asked by peterwe on 2017-04-18 04:13:18 UTC

Comments

So after throwing my own plugin out and just using the navigation stack, the last ERROR message doesn't appear anymore. It just posts again and again in an endless loop the WARN and ERROR messages I posted before.

Asked by peterwe on 2017-04-18 07:30:44 UTC

Answers