I'm trying to run a navigation with nav2 on a simulation on ignition gazebo with an ackermann robot type and been having some problems with collision avoidance. I send a goal msg on a navigation with a static map and if it's too close to the walls the robot collide with it anyway, not activating the collision checker on the BT as i could see from groot. Maybe there is something missing in my bt but i used the "navigate_to_pose_w_replanning_and_recovery.xml" from the nav2_bt. If i use footprint or radius for my robot marking it is still the same. I'm using DWB, but tried with regulated pure pursuit and had the same problem. I already tried to up the rate from 1hz
of my bt controller but nothing. I'm using smacplannerhybrid as my planner as you can see from my nav2_params.yaml, any suggestions will be welcomed.
Required Info:
Operating System:
Ubuntu 20.04
ROS2 Version:
ROS2 Galactic binaries
Version or commit hash:
ros-galactic-navigation2 1.0.12-1focal.20220526.142755
DDS implementation:
Eclipse’s Cyclone DDS
Steps to reproduce issue
Run a simulation with an ackermann robot, set initial pose on a static pre built map and try to navigate around it. Try to get to close to one of the walls or obstacles in your map and see what happens.
Expected behavior
Robot can replan paths to avoid colide with obstacles or stop if collision is eminent.
Actual behavior
Robot colide with obstacles or walls in the way of the path.
planner_server:
ros__parameters:
expected_planner_frequency: 20.0
use_sim_time: True
planner_plugins: ["GridBased"]
GridBased:
plugin: "nav2_smac_planner/SmacPlannerHybrid"
downsample_costmap: false # whether or not to downsample the map
downsampling_factor: 1 # multiplier for the resolution of the costmap layer (e.g. 2 on a 5cm costmap would be 10cm)
allow_unknown: true # allow traveling in unknown space
max_iterations: 1000000 # maximum total iterations to search for before failing (in case unreachable), set to -1 to disable
max_planning_time: 5.0 # max time in s for planner to plan, smooth
motion_model_for_search: "REEDS_SHEPP" # "DUBIN" # Hybrid-A* Dubin, Redds-Shepp
angle_quantization_bins: 72 # Number of angle bins for search
analytic_expansion_ratio: 3.5 # The ratio to attempt analytic expansions during search for final approach.
analytic_expansion_max_length: 3.0 # For Hybrid/Lattice nodes: The maximum length of the analytic expansion to be considered valid to prevent unsafe shortcutting
minimum_turning_radius: 0.40 # minimum turning radius in m of path / vehicle
reverse_penalty: 1.0 # Penalty to apply if motion is reversing, must be => 1
change_penalty: 0.0 # 0.0 # Penalty to apply if motion is changing directions (L to R), must be >= 0
non_straight_penalty: 1.2 # Penalty to apply if motion is non-straight, must be => 1
cost_penalty: 2.0 # Penalty to apply to higher cost areas when adding into the obstacle map dynamic programming distance expansion heuristic. This drives the robot more towards the center of passages. A value between 1.3 - 3.5 is reasonable.
retrospective_penalty: 0.015
lookup_table_size: 20.0 # Size of the dubin/reeds-sheep distance window to cache, in meters.
cache_obstacle_heuristic: false # Cache the obstacle map dynamic programming distance expansion heuristic between subsiquent replannings of the same goal location. Dramatically speeds up replanning performance (40x) if costmap is largely static.
smooth_path: True # If true, does a simple and quick smoothing post-processing to the path
Bug report
I'm trying to run a navigation with nav2 on a simulation on ignition gazebo with an ackermann robot type and been having some problems with collision avoidance. I send a goal msg on a navigation with a static map and if it's too close to the walls the robot collide with it anyway, not activating the collision checker on the BT as i could see from groot. Maybe there is something missing in my bt but i used the "navigate_to_pose_w_replanning_and_recovery.xml" from the nav2_bt. If i use footprint or radius for my robot marking it is still the same. I'm using DWB, but tried with regulated pure pursuit and had the same problem. I already tried to up the rate from 1hz of my bt controller but nothing. I'm using smacplannerhybrid as my planner as you can see from my nav2_params.yaml, any suggestions will be welcomed.
Required Info:
Steps to reproduce issue
Run a simulation with an ackermann robot, set initial pose on a static pre built map and try to navigate around it. Try to get to close to one of the walls or obstacles in your map and see what happens.
Expected behavior
Robot can replan paths to avoid colide with obstacles or stop if collision is eminent.
Actual behavior
Robot colide with obstacles or walls in the way of the path.
Robot collides with footprint:
Robot collides with radius:
My Behaviour Tree from Groot:
My nav2_params.yaml:
`amcl: ros__parameters: use_sim_time: True alpha1: 0.2 alpha2: 0.2 alpha3: 0.2 alpha4: 0.2 alpha5: 0.2 base_frame_id: "prius_hybrid/base_link" beam_skip_distance: 0.5 beam_skip_error_threshold: 0.9 beam_skip_threshold: 0.3 do_beamskip: false global_frame_id: "map" lambda_short: 0.1 laser_likelihood_max_dist: 2.0 laser_max_range: 50.0 laser_min_range: -1.0 laser_model_type: "likelihood_field" max_beams: 60 max_particles: 2000 min_particles: 500 odom_frame_id: "prius_hybrid/odom" pf_err: 0.05 pf_z: 0.99 recovery_alpha_fast: 0.0 recovery_alpha_slow: 0.0 resample_interval: 1 robot_model_type: "differential" save_pose_rate: 0.5 sigma_hit: 0.2 tf_broadcast: true transform_tolerance: 1.0 update_min_a: 0.2 update_min_d: 0.25 z_hit: 0.5 z_max: 0.05 z_rand: 0.5 z_short: 0.05 scan_topic: model/prius_hybrid/laserscan/scan
amcl_map_client: ros__parameters: use_sim_time: True
amcl_rclcpp_node: ros__parameters: use_sim_time: True
bt_navigator: ros__parameters: use_sim_time: True global_frame: map robot_base_frame: prius_hybrid/base_link odom_topic: /odom bt_loop_duration: 10 default_server_timeout: 20 enable_groot_monitoring: True groot_zmq_publisher_port: 1666 groot_zmq_server_port: 1667
bt_navigator_rclcpp_node: ros__parameters: use_sim_time: True
controller_server: ros__parameters: use_sim_time: True controller_frequency: 20.0 min_x_velocity_threshold: 0.001 min_y_velocity_threshold: 0.5 min_theta_velocity_threshold: 0.001 failure_tolerance: 0.3 progress_checker_plugin: "progress_checker" goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker" controller_plugins: ["FollowPath"]
controller_server_rclcpp_node: ros__parameters: use_sim_time: True
local_costmap: local_costmap: ros__parameters: update_frequency: 5.0 publish_frequency: 2.0 global_frame: prius_hybrid/odom robot_base_frame: prius_hybrid/base_link use_sim_time: True rolling_window: true width: 6 # 3 height: 6 # 3 resolution: 0.10 robot_radius: 2.0
footprint: "[ [2.43, 1.3], [2.43, -1.3], [-2.43, -1.3], [-2.43, 1.3] ]"
local_costmap_client: ros__parameters: use_sim_time: True local_costmap_rclcpp_node: ros__parameters: use_sim_time: True
global_costmap: global_costmap: ros__parameters: update_frequency: 1.0 publish_frequency: 1.0 global_frame: map robot_base_frame: prius_hybrid/base_link use_sim_time: True robot_radius: 2.0
footprint: "[ [2.43, 1.3], [2.43, -1.3], [-2.43, -1.3], [-2.43, 1.3] ]"
global_costmap_client: ros__parameters: use_sim_time: True global_costmap_rclcpp_node: ros__parameters: use_sim_time: True
map_server: ros__parameters: use_sim_time: True yaml_filename: "sonoma2.yaml"
map_saver: ros__parameters: use_sim_time: True save_map_timeout: 5.0 free_thresh_default: 0.25 occupied_thresh_default: 0.65 map_subscribe_transient_local: True
planner_server: ros__parameters: expected_planner_frequency: 20.0 use_sim_time: True planner_plugins: ["GridBased"] GridBased: plugin: "nav2_smac_planner/SmacPlannerHybrid" downsample_costmap: false # whether or not to downsample the map downsampling_factor: 1 # multiplier for the resolution of the costmap layer (e.g. 2 on a 5cm costmap would be 10cm) allow_unknown: true # allow traveling in unknown space max_iterations: 1000000 # maximum total iterations to search for before failing (in case unreachable), set to -1 to disable max_planning_time: 5.0 # max time in s for planner to plan, smooth motion_model_for_search: "REEDS_SHEPP" # "DUBIN" # Hybrid-A* Dubin, Redds-Shepp angle_quantization_bins: 72 # Number of angle bins for search analytic_expansion_ratio: 3.5 # The ratio to attempt analytic expansions during search for final approach. analytic_expansion_max_length: 3.0 # For Hybrid/Lattice nodes: The maximum length of the analytic expansion to be considered valid to prevent unsafe shortcutting minimum_turning_radius: 0.40 # minimum turning radius in m of path / vehicle reverse_penalty: 1.0 # Penalty to apply if motion is reversing, must be => 1 change_penalty: 0.0 # 0.0 # Penalty to apply if motion is changing directions (L to R), must be >= 0 non_straight_penalty: 1.2 # Penalty to apply if motion is non-straight, must be => 1 cost_penalty: 2.0 # Penalty to apply to higher cost areas when adding into the obstacle map dynamic programming distance expansion heuristic. This drives the robot more towards the center of passages. A value between 1.3 - 3.5 is reasonable. retrospective_penalty: 0.015 lookup_table_size: 20.0 # Size of the dubin/reeds-sheep distance window to cache, in meters. cache_obstacle_heuristic: false # Cache the obstacle map dynamic programming distance expansion heuristic between subsiquent replannings of the same goal location. Dramatically speeds up replanning performance (40x) if costmap is largely static. smooth_path: True # If true, does a simple and quick smoothing post-processing to the path
planner_server_rclcpp_node: ros__parameters: use_sim_time: True
recoveries_server: ros__parameters: costmap_topic: local_costmap/costmap_raw footprint_topic: local_costmap/published_footprint cycle_frequency: 10.0 recovery_plugins: ["spin", "backup", "wait"] spin: plugin: "nav2_recoveries/Spin" backup: plugin: "nav2_recoveries/BackUp" wait: plugin: "nav2_recoveries/Wait" global_frame: prius_hybrid/odom robot_base_frame: prius_hybrid/base_link transform_timeout: 0.1 use_sim_time: true simulate_ahead_time: 2.0 max_rotational_vel: 1.0 min_rotational_vel: 0.4 rotational_acc_lim: 3.2
robot_state_publisher: ros__parameters: use_sim_time: True
waypoint_follower: ros__parameters: loop_rate: 20 stop_on_failure: false waypoint_task_executor_plugin: "wait_at_waypoint"
wait_at_waypoint: plugin: "nav2_waypoint_follower::WaitAtWaypoint" enabled: True waypoint_pause_duration: 200`