Robotics StackExchange | Archived questions

The robot does not follow path proper if goal in /map frame

Hello, I'm running ROS Kinetic in Ubuntu 16.04 on Lattepanda.

I want to send my robot to goal in /map frame. When I do this I have warning message:

Control loop missed its desired rate of 5.0000Hz... the loop actually took 0.9997 seconds

And my robot goes to goal not straight but like snake around path. CPU not loaded.

image description

Also when I change global_frame from /map to /odom in global_costmap_params.yaml everything was fine. Not warnings and robot follow path correctly, but my goal move with /odom frame. My localization node make transform /map to /odom and goal position depends on it. I want to fix my goal in /map frame.

I don't provide static map. I want to navigate my robot without map. I use IMU with magnetometer, encoders, GPS. To get localization I use robot_localization and navsat_transform node for base_footprint -> odom and odom -> map transforms. To simplify robot testing I generate empty laserscan data.

move_base.launch

<launch>
  <arg name="scan_topic" default="scan_filtered" />
  <arg name="odom_topic" default="odometry/filtered" /> 

  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">

    <rosparam file="$(find poopbot_launch)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find poopbot_launch)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find poopbot_launch)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find poopbot_launch)/param/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find poopbot_launch)/param/base_local_planner_params.yaml" command="load" />
    <rosparam file="$(find poopbot_launch)/param/dwa_local_planner_params.yaml" command="load" /> 
    <rosparam file="$(find poopbot_launch)/param/move_base_params.yaml" command="load" />
    <rosparam file="$(find poopbot_launch)/param/global_planner_params.yaml" command="load" />

    <remap from="odom" to="$(arg odom_topic)"/>
    <remap from="scan" to="$(arg scan_topic)"/>
  </node>
</launch>

movebaseparams.yaml

shutdown_costmaps: false 
controller_frequency: 5.0 
controller_patience: 3.0 
planner_frequency: 0.0 
planner_patience: 2.0 
max_planning_retries: -1.0
conservative_reset_dist: 3.0 
recovery_behavior_enabled: true 
clearing_rotation_allowed: true 
oscillation_timeout: 0.0 
oscillation_distance: 0.1
recovery_behaviors: [
  {name: conservative_reset, type: clear_costmap_recovery/ClearCostmapRecovery},
  {name: rotate_recovery, type: rotate_recovery/RotateRecovery},
  {name: aggressive_reset, type: clear_costmap_recovery/ClearCostmapRecovery}]
base_local_planner: "dwa_local_planner/DWAPlannerROS"
base_global_planner: "global_planner/GlobalPlanner"

commoncostmapparams.yaml

footprint: [[0.17, 0.15], [-0.17, 0.15], [-0.17, -0.15], [0.17, -0.15], [0.25, 0]] 
map_type: costmap

inflation_layer:
  enabled: true
  inflation_radius: 0.4  
  cost_scaling_factor: 15  

static_layer:
  enabled: true
  unknown_cost_value: -1 
  lethal_cost_threshold: 253 
  map_topic: map 
  first_map_only: false 
  subscribe_to_updates: false 
  track_unknown_space: false 
  use_maximum: false 
  trinary_costmap: true #(bool, default: true)

obstacle_layer:
  enabled: true
  max_obstacle_height: 0.60 
  track_unknown_space: false 
  footprint_clearing_enabled: true 
  combination_method: 0 
  observation_sources: scan
  scan: { 
    data_type: LaserScan,
    topic: scan,
    observation_persistence: 0.0, 
    expected_update_rate: 0.0, 
    marking: true,
    clearing: true,
    min_obstacle_height: 0.0,
    max_obstacle_height: 0.5,
    obstacle_range: 2.5,
    raytrace_range: 3.0
  }

globalcostmapparams.yaml

global_costmap:
   global_frame: map
   robot_base_frame: base_footprint
   update_frequency: 0.5
   publish_frequency: 0.5
   static_map: false
   transform_tolerance: 5.0 
   rolling_window: true
   width: 20.0 
   height: 20.0
   resolution: 0.2
   plugins:
     - {name: static_layer, type: "costmap_2d::StaticLayer"}
     - {name: obstacle_layer, type: "costmap_2d::VoxelLayer"}
     - {name: inflation_layer, type: "costmap_2d::InflationLayer"}

localcostmapparams.yaml

local_costmap:
   global_frame: odom
   robot_base_frame: base_footprint
   update_frequency: 1.0
   publish_frequency: 1.0
   static_map: false
   transform_tolerance: 0.5
   rolling_window: true
   width: 2.0
   height: 2.0
   resolution: 0.05
   plugins:
     - {name: obstacle_layer,      type: "costmap_2d::VoxelLayer"}
     - {name: inflation_layer,     type: "costmap_2d::InflationLayer"

dwalocalplanner_params.yaml

DWAPlannerROS:

# Robot Configuration Parameters 
  acc_lim_x: 0.5 # maximum is theoretically 2.0, but we 
  acc_lim_y: 0.0      # diff drive robot
  acc_lim_theta: 1.0
  acc_limit_trans: 0.5
  max_trans_vel: 0.08 # choose slightly less than the base's capability
  min_trans_vel: 0.02  # this is the min trans velocity when there is negligible rotational velocity

  max_vel_x: 0.08  
  min_vel_x: -0.03 

  max_vel_y: 0.0  
  min_vel_y: 0.0 

  max_rot_vel: 0.8  
  min_rot_vel: 0.3  

# Goal Tolerance Parameters
  yaw_goal_tolerance: 0.3  
  xy_goal_tolerance: 0.3  
  latch_xy_goal_tolerance: true

# Forward Simulation Parameters
  sim_time: 3.0      
  vx_samples: 6     
  vy_samples: 1       
  vtheta_samples: 20  


# Trajectory Scoring Parameters
  path_distance_bias: 64.0      
  goal_distance_bias: 24.0   
  occdist_scale: 0.50   
  forward_point_distance: 0.325 
  stop_time_buffer: 0.2    
  scaling_speed: 0.25      
  max_scaling_factor: 0.2      
  publish_cost_grid: true

# Oscillation Prevention Parameters
  oscillation_reset_dist: 0.4

Maybe someone know why it is happens? And what can I do to fix this problem?

Asked by Stepan Kostusiev on 2018-10-29 11:12:56 UTC

Comments

Answers