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