Robotics StackExchange | Archived questions

how to set planned path away from object?

Hi, All,

the path planner on my robot always plan paths too close to obstacles. each time the robot walks around the obstacle would hit the lethal areas on the costmap and therefore triggers in place rotation action.

here's my costmap settings

obstacle_range: 5.4
raytrace_range: 5.5
transform_tolerance: 2.0
footprint: [[0.75,0.4], [0.8, 0], [0.75, -0.4],[-0.75, -0.4], [-0.75, 0.4]]

inflation_radius: 2.0

footprint_padding: 0.01
cost_scaling_factor: 8
lethal_cost_threshold: 150

how to set the costmap such way that the planned path is distant away from the obstacles? what are the parameters I can play away? I am using TrajectoryPlannerROS for local path planning and NavfnROS for global path planning.

========================================

here's the parameters for movebase, inflationradius seems set properly

move_base:
  NavfnROS: {allow_unknown: false}
  TrajectoryPlannerROS: {acc_lim_th: 0.2, acc_lim_theta: 0.2, acc_lim_x: 0.2, acc_lim_y: 0.0,
    allow_unknown: false, angular_sim_granularity: 0.3, dwa: false, escape_reset_dist: 0.1,
    escape_reset_theta: 1.57079632679, escape_vel: -0.1, gdist_scale: 0.8, global_frame_id: world,
    heading_lookahead: 2.0, heading_scoring: false, heading_scoring_timestep: 0.1,
    holonomic_robot: false, max_in_place_rotational_vel: 0.1, max_rotational_vel: 0.4,
    max_vel_theta: 0.4, max_vel_x: 0.6, min_in_place_rotational_vel: -0.1, min_in_place_vel_theta: 0.1,
    min_rotational_vel: -0.4, min_vel_theta: -0.4, min_vel_x: 0.05, occdist_scale: 0.01,
    oscillation_reset_dist: 0.05, pdist_scale: 0.6, restore_defaults: false, sim_granularity: 0.3,
    sim_time: 4.2, simple_attractor: false, vtheta_samples: 20, vx_samples: 20, xy_goal_tolerance: 0.5,
    y_vels: '-0.3,-0.1,0.1,-0.3', yaw_goal_tolerance: 0.5}
   aggressive_reset: {reset_distance: 1.84}
   base_global_planner: navfn/NavfnROS
   base_local_planner: base_local_planner/TrajectoryPlannerROS
   clearing_rotation_allowed: false
   conservative_reset: {reset_distance: 3.0}
   conservative_reset_dist: 3.0
   controller_frequency: 20.0
   controller_patience: 5.0
   global_costmap:
    allow_unknown: false
    footprint: '[[0.9,0.8],[1,0],[0.9,-0.8],[-0.8,-0.8],[-0.8,0.8]]'
    footprint_padding: 0.01
    global_frame: /world
    height: 200
    inflation_layer: {cost_scaling_factor: 7.0, enabled: true, inflation_radius: 3.0,
      robot_radius: 0.46}
    obstacle_layer:
      combination_method: 1
      enabled: true
      laser_scan_sensor: {clearing: true, data_type: LaserScan, marking: true, sensor_frame: base_laser,
        topic: scan}
      max_obstacle_height: 2.0
      observation_sources: laser_scan_sensor
      obstacle_range: 5.4
      raytrace_range: 5.5
      track_unknown_space: true
    obstacle_layer_footprint: {enabled: true}
    origin_x: -100.0
    origin_y: -100.0
    plugins:
    - {name: static_layer, type: 'costmap_2d::StaticLayer'}
    - {name: obstacle_layer, type: 'costmap_2d::ObstacleLayer'}
    - {name: inflation_layer, type: 'costmap_2d::InflationLayer'}
    publish_frequency: 0.0
    resolution: 0.05
    robot_base_frame: base_link
    robot_radius: 0.46
    static_layer: {enabled: true, lethal_cost_threshold: 160, track_unknown_space: true}
    static_map: true
    transform_tolerance: 5.0
    update_frequency: 0.2
    width: 200
  local_costmap:
    allow_unknown: false
    footprint: '[[0.9,0.8],[1,0],[0.9,-0.8],[-0.8,-0.8],[-0.8,0.8]]'
    footprint_padding: 0.01
    global_frame: /base_odom
    height: 12
    inflation_layer: {cost_scaling_factor: 7.0, enabled: true, inflation_radius: 3.0,
      robot_radius: 0.46}
    lethal_cost_threshold: 160
    obstacle_layer:
      combination_method: 1
      enabled: true
      laser_scan_sensor: {clearing: true, data_type: LaserScan, marking: true, sensor_frame: base_laser,
        topic: scan}
      max_obstacle_height: 2.0
      observation_sources: laser_scan_sensor
      obstacle_range: 5.4
      raytrace_range: 5.5
      track_unknown_space: false
    obstacle_layer_footprint: {enabled: true}
    origin_x: -100.0
    origin_y: -100.0
    plugins:
    - {name: obstacle_layer, type: 'costmap_2d::ObstacleLayer'}
    - {name: inflation_layer, type: 'costmap_2d::InflationLayer'}
    publish_frequency: 5.0
    resolution: 0.05
    robot_base_frame: base_link
    robot_radius: 0.46
    rolling_window: true
    static_map: false
    transform_tolerance: 1.0
    update_frequency: 2.0
    width: 12
  oscillation_distance: 0.5
  oscillation_timeout: 0.0
  planner_frequency: 0.0
  planner_patience: 5.0
  recovery_behavior_enabled: true
  restore_defaults: false
  shutdown_costmaps: false
robot_pose_ekf: {debug: false, freq: 10.0, imu_used: true, odom_used: true, output_frame: base_odom,
  publish_tf: false, self_diagnose: false, sensor_timeout: 1.0, vo_used: false}
rosdistro: 'hydro

Asked by dreamcase on 2014-09-02 22:23:06 UTC

Comments

I think the inflation_radius (which in your costmap settings is set to 2 meters) is being overwritten at some point. Could you execute rosparam dump dump.yaml and post the contents of the file dump.yaml that you will get?

Asked by Martin Peris on 2014-09-02 23:42:06 UTC

I am not sure how to set the format when editing old post. please see the additional inputs above

Asked by dreamcase on 2014-09-03 01:53:54 UTC

Could you post a picture of how the global, local costmap layout and global path looks like in rviz? Also try to set occdist_scale to a higher value. It basically weights how much the robot should avoid obstacles.

Asked by AReimann on 2014-10-12 23:01:02 UTC

Answers