" Dynamic " Global Planner ?
Hi all,
I am using the ROS navigation library on a robot running ROS melodic on debian 9.13
I am using standard Global_Planner and TEB_local_planner.
I observe that the Global_Planner is not able to recalculate a path when the initial path turns out to be impossible. Typically I put a cardboard box in a hallway that it is impossible to bypass. There is an alternate path to the target. But Global_Planner does not reconsider the initial path even when I change target near the obstacle. So I understand the Global_Planner does not take into account the cumulative costs on the global_costmap and the local_costmap? Is it this ? If so, is it possible to reconfigure the navigation so that Global_Planner can offer another path?
Thank you in advance for your help.
Capture video RVIZ is available with this link
The configuration file for Global_Planner
is:
GlobalPlanner:
old_navfn_behavior: false
use_quadratic: true
use_dijkstra: true
use_grid_path: false
allow_unknown: false
lethal_cost: 253
neutral_cost: 50
cost_factor: 0.9
The configuration file for move_base
is:
shutdown_costmaps: false
controller_frequency: 10.0
planner_patience: 5.0
controller_patience: 15.0
conservative_reset_dist: 3.0
planner_frequency: 5.0
oscillation_timeout: 10.0
oscillation_distance: 0.5
holonomic_robot: false
The (updated and working) configuration file comman for both global_costmap
and local_costmap
is:
footprint: [[-0.24, -0.27], [-0.24, 0.27], [0.24, 0.27], [0.24, -0.27]]
footprint_padding: 0.00
transform_tolerance: 0.2
map_type: costmap
always_send_full_costmap: true
obstacle_layer:
enabled: true
obstacle_range: 3.0
raytrace_range: 4.0
inflation_radius: 0.2
track_unknown_space: true
combination_method: 1
observation_sources: laser_scan_sensor
laser_scan_sensor: {data_type: LaserScan, topic: scanf, marking: true, clearing: true}
inflation_layer:
enabled: true
cost_scaling_factor: 10.0
inflation_radius: 0.5
static_layer:
enabled: true
map_topic: "/map"
The (updated and working) configuration file for global_costmap
is:
global_costmap:
global_frame: map
robot_base_frame: base_footprint
update_frequency: 1.0
publish_frequency: 0.5
static_map: true
transform_tolerance: 0.5
plugins:
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
inflation_layer: {cost_scaling_factor: 7.0, enabled: true, inflate_unknown: false,
inflation_radius: 0.75}
The (updated and working) configuration file for local_costmap
is:
local_costmap:
global_frame: map
robot_base_frame: base_footprint
update_frequency: 5.0
publish_frequency: 2.0
static_map: false
rolling_window: true
width: 5.5
height: 5.5
resolution: 0.1
transform_tolerance: 0.5
plugins:
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
inflation_layer: {cost_scaling_factor: 7.0, enabled: true, inflate_unknown: false,
inflation_radius: 0.5}
#
obstacle_layer:
combination_method: 1
enabled: true
footprint_clearing_enabled: true
max_obstacle_height: 2.0
observation_sources: scan
obstacle_range: 3.0
raytrace_range: 3.5
scan: {clearing: true, data_type: LaserScan, marking: true, max_obstacle_height: 2.0,
min_obstacle_height: 0.0, sensor_frame: laser, topic: scanf}
The configuration file for TEB_local_planner
is :
TebLocalPlannerROS:
odom_topic: odom
# Trajectory
teb_autosize: True
dt_ref: 0.3
dt_hysteresis: 0.1
max_samples: 500
global_plan_overwrite_orientation: True
allow_init_with_backwards_motion: False
max_global_plan_lookahead_dist: 3.0
global_plan_viapoint_sep: -1
global_plan_prune_distance: 1
exact_arc_length: False
feasibility_check_no_poses: 5
publish_feedback: False
# Robot
max_vel_x: 0.4
max_vel_x_backwards: 0.2
max_vel_y: 0.0
max_vel_theta: 0.3
acc_lim_x: 0.5
acc_lim_theta: 1.0
min_turning_radius: 0.0 # diff-drive robot (can turn on place!)
footprint_model:
type: "point"
# GoalTolerance
xy_goal_tolerance: 0.2
yaw_goal_tolerance: 0.1 ...