Robust dynamic obstacle avoidance, path planning.

asked 2019-04-22 05:54:02 -0500

spiritninja gravatar image

updated 2019-04-22 13:06:22 -0500

jayess gravatar image

I'm testing autonomous navigation on a Robotnik Summit X mobile robot.

Currently, the navigation stack is tuned well enough to incorporate smooth movements through narrow passages. Dynamic obstacle avoidance when the robot is navigating works fairly well too.

When a a dynamic obstacle(ex: a person) walks in front of it when its navigating, then the robot plans a new path and traverses the newly planned path around the obstacle if there is enough space for it to move (i.e. dynamic path planning).

The catch is when the space is narrow but still nearly wide enough for the robot to fit, it either starts executing a recovery behavior(which I have enabled), or stops without computing a path new path.
Global planner: NavfnROS
Local planner: Trajectory Planner.

I have tried different combinations of goal tolerance parameters for the local planner, but it turns out to be futile. Are there any other attributes of the global/local planner at play that might influence the outcome to not only plan a path in narrow region but also make the robot move in the region after avoiding the obstacle?

Robot: Differential drive
OS: Ubuntu 14.04 LTS
ROS: Indigo.

Thank you.

For reference.
move _base parameters

# Planner selection
base_global_planner: "navfn/NavfnROS"
base_local_planner: "base_local_planner/TrajectoryPlannerROS"

# Recovery behaviors are defined in robot folders

# Oscillation
oscillation_timeout: 10.0
oscillation_distance: 0.5

# Global planner
planner_frequency: 0.0
planner_patience: 5.0
NavfnROS:
  allow_unknown: true  # TODO: investigate this
  default_tolerance: 0.0
  # do not restrict planner
  planner_window_x: 0.0
  planner_window_y: 0.0
  # debug
  visualize_potential: false

# Local planner
controller_frequency: 25.0
controller_patience: 15.0
TrajectoryPlannerROS:
  # base vel/accel profile is in robot folders
  # tolerances (defaults)
  yaw_goal_tolerance: 0.4
  xy_goal_tolerance: 0.7
  latch_xy_goal_tolerance: false
  # forward simulation
  sim_time: 3.0
  sim_granularity: 0.06
  angular_sim_granularity: 0.06
  vx_samples: 20
  vtheta_samples: 40
  # scoring (defaults)
  meter_scoring: true
  pdist_scale: 8.0
  gdist_scale: 12.0
  occdist_scale: 0.1
  heading_lookahead: 0.325
  heading_scoring_timestep: 0.8
  heading_scoring: true
  dwa: false
  # other
  oscillation_reset_dist: 0.05
  # debug
  publish_cost_grid_pc: false

base local planner parameters:

# Robot Configuration Parameters
  acc_lim_x: 2.5
  acc_lim_y: 2.5
  acc_lim_theta: 3.2
  max_vel_x: 0.3   
  min_vel_x: 0.025   
  max_vel_theta: 0.3
  min_vel_theta: -1.0
  min_in_place_rotational_vel: 0.1
  escape_vel: -0.1
  holonomic_robot: false
  y_vels: [-0.3, -0.1, 0.1, 0.3]

  # Goal Tolerance Parameters
  yaw_goal_tolerance: 0.4 #default: 0.05
  xy_goal_tolerance: 0.7 #default: 0.1
  latch_xy_goal_tolerance: false 

  # Forward Simulation Parameters
  sim_time: 3.0
  sim_granularity: 0.06
  angular_sim_granularity: 0.06
  vx_samples: 30
  vtheta_samples: 40

  #Trajectory Scoring Parameters
  meter_scoring: true
  pdist_scale: 1.0  # default: 0.6
  gdist_scale: 0.01  # default: 0.8
  occdist_scale: 0.01  # default: 0.01
  heading_lookahead: 0.325  # default 0.325
  heading_scoring: false  
  heading_scoring_timestep: 0.1  # default: 0.1
  dwa: false  # default: false
  publish_cost_grid_pc: false
  global_frame_id: odom

  # Oscillation Prevention Parameters
  oscillation_reset_dist: 0.05

  #Global Plan Parameters
  prune_plan: true
edit retag flag offensive close merge delete