Skip to content

nav2_smac_planner, path is not continuous #5192

@wang-fire

Description

@wang-fire

Required Info:

Operating System: Ubuntu22.04

Computer: X86_64

ROS2 Version:ros-humble(**humble_main branch**)

Version or commit hash: humble_main:latest

Steps to reproduce issue

Simulation Environment: Turtlebot3 + gazebo + nav2_smac_planner (Hybrid a star)

Question

I am using humble_main branch, nav2_smac_planner, I believe this route is divided into two segments: one segment is the forward extension, and the second segment is generated by the analytic_expansion. My questions are:
1) The endpoint of the forward extension and the starting point of the analytic_expansion should be coincide, rather than overlap?
2) If question1) is right, I want to avoid any backward motion caused by 1). Can this be achieved through a smoothing plugin?

Image
Image

#### Tuning / Configuration Goal
<!-- Description in a few sentences what the aim is that you're trying to tune / configure -->

local_costmap:
  local_costmap:
    ros__parameters:
      update_frequency: 4.0
      publish_frequency: 2.0
      global_frame: odom
      robot_base_frame: base_link
      rolling_window: true
      width: 3
      height: 3
      resolution: 0.05
      # footprint: "[[-0.27, -0.32], [-0.27, 0.32], [0.27, 0.32], [0.27, -0.32]]"
      footprint: "[[-0.125, -0.125], [-0.125, 0.125], [0.125, 0.125], [0.125, -0.125]]"
      #robot_radius: 0.22
      plugins: ["voxel_layer", "inflation_layer"]
      # filters: ["keepout_filter"]
      # keepout_filter:
      #   plugin: "nav2_costmap_2d::KeepoutFilter"
      #   enabled: True
      #   filter_info_topic: "costmap_filter_info"
      inflation_layer:
        plugin: "nav2_costmap_2d::InflationLayer"
        cost_scaling_factor: 3.0
        inflation_radius: 0.40
      voxel_layer:
        plugin: "nav2_costmap_2d::VoxelLayer"
        enabled: True
        publish_voxel_map: True
        origin_z: 0.0
        z_resolution: 0.05
        z_voxels: 16
        max_obstacle_height: 2.0
        mark_threshold: 0
        observation_sources: scan
        scan:
          # A relative topic will be appended to the parent of the local_costmap namespace.
          # For example:
          #   * User chosen namespace is `tb4`.
          #   * User chosen topic is `scan`.
          #   * Topic will be remapped to `/tb4/scan` without `local_costmap`.
          #   * Use global topic `/scan` if you do not wish the node namespace to apply
          topic: scan
          max_obstacle_height: 2.0
          clearing: True
          marking: True
          data_type: "LaserScan"
          raytrace_max_range: 3.0
          raytrace_min_range: 0.0
          obstacle_max_range: 2.5
          obstacle_min_range: 0.0
      static_layer:
        plugin: "nav2_costmap_2d::StaticLayer"
        map_subscribe_transient_local: True
      always_send_full_costmap: True
      service_introspection_mode: "disabled"

global_costmap:
  global_costmap:
    ros__parameters:
      update_frequency: 1.0
      publish_frequency: 1.0
      global_frame: map
      robot_base_frame: base_link
      #robot_radius: 0.22
      # footprint: "[[-0.27, -0.32], [-0.27, 0.32], [0.27, 0.32], [0.27, -0.32]]"
      footprint: "[[-0.125, -0.125], [-0.125, 0.125], [0.125, 0.125], [0.125, -0.125]]"
      resolution: 0.05
      track_unknown_space: true
      plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
      # filters: ["keepout_filter"]
      # keepout_filter:
      #   plugin: "nav2_costmap_2d::KeepoutFilter"
      #   enabled: True
      #   filter_info_topic: "costmap_filter_info"
      obstacle_layer:
        plugin: "nav2_costmap_2d::ObstacleLayer"
        enabled: True
        observation_sources: scan
        scan:
          # A relative topic will be appended to the parent of the global_costmap namespace.
          # For example:
          #   * User chosen namespace is `tb4`.
          #   * User chosen topic is `scan`.
          #   * Topic will be remapped to `/tb4/scan` without `global_costmap`.
          #   * Use global topic `/scan` if you do not wish the node namespace to apply
          topic: scan
          max_obstacle_height: 2.0
          clearing: True
          marking: True
          data_type: "LaserScan"
          raytrace_max_range: 3.0
          raytrace_min_range: 0.0
          obstacle_max_range: 2.5
          obstacle_min_range: 0.0
      static_layer:
        plugin: "nav2_costmap_2d::StaticLayer"
        map_subscribe_transient_local: True
      inflation_layer:
        plugin: "nav2_costmap_2d::InflationLayer"
        cost_scaling_factor: 3.0
        inflation_radius: 0.40
      always_send_full_costmap: True
      service_introspection_mode: "disabled"

map_server:
  ros__parameters:
    # yaml_filename: "map.yaml"
    service_introspection_mode: "disabled"

map_saver:
  ros__parameters:
    save_map_timeout: 5.0
    free_thresh_default: 0.25
    occupied_thresh_default: 0.65
    map_subscribe_transient_local: True
    service_introspection_mode: "disabled"

planner_server:
  ros__parameters:
    expected_planner_frequency: 20.0
    planner_plugins: ["GridBased"]
    costmap_update_timeout: 1.0
    service_introspection_mode: "disabled" 
    GridBased:
      plugin: "nav2_smac_planner::SmacPlannerHybrid" # In Iron and older versions, "/" was used instead of "::"
      downsample_costmap: False           # whether or not to downsample the map
      downsampling_factor: 2             
      tolerance: 0.10                     
      allow_unknown: true                 # allow traveling in unknown space
      max_iterations: 1000000            
      max_on_approach_iterations: 1000    # Maximum number of iterations after within tolerances to continue to try to find exact solution
      max_planning_time: 5.0              # max time in s for planner to plan, smooth
      motion_model_for_search: "REEDS_SHEPP"    # Hybrid-A* Dubin, Redds-Shepp
      angle_quantization_bins: 72         # Number of angle bins for search
      analytic_expansion_ratio: 1.0       # The ratio to attempt analytic expansions during search for final approach.
      analytic_expansion_max_length: 1.5  
      analytic_expansion_max_cost: 200.0  # The maximum single cost for any part of an analytic expansion to contain and be valid, except when necessary on approach to goal
      analytic_expansion_max_cost_override: False  #  Whether or not to override the maximum cost setting if within critical distance to goal (ie probably required)
      minimum_turning_radius: 0.40        # minimum turning radius in m of path / vehicle
      reverse_penalty: 100.0                # Penalty to apply if motion is reversing, must be => 1
      change_penalty: 0.3                 # Penalty to apply if motion is changing directions (L to R), must be >= 0
      non_straight_penalty: 1.5           # Penalty to apply if motion is non-straight, must be => 1
      cost_penalty: 5.0                  
      retrospective_penalty: 0.015
      lookup_table_size: 5.0             # Size of the dubin/reeds-sheep distance window to cache, in meters.
      cache_obstacle_heuristic: False    
      debug_visualizations: True         
      use_quadratic_cost_penalty: False
      downsample_obstacle_heuristic: False
      allow_primitive_interpolation: True
      coarse_search_resolution: 2         # Number of bins to skip when doing a coarse search for the path. Only used for all_direction goal heading mode.
      goal_heading_mode: "DEFAULT"       
      smooth_path: False                  
      smoother:
        max_iterations: 1000
        w_smooth: 0.3
        w_data: 0.2
        tolerance: 1.0e-10
        do_refinement: true
        refinement_num: 2

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions