Smac状态格规划器

由Smac状态格生成的路径

<name> 是为此类型选择的相应规划插件的标识符。

注意:由于最小控制集与生成时的地图分辨率相关联,状态格没有成本地图降采样器。最小转弯半径也不是状态格的参数,因为这在最小控制集预计算阶段已经确定。请查看Smac Planner包以生成适用于您的车辆的自定义控制集,或使用我们预先生成的示例之一。

如上图所示,您可以看到启用了反向扩展,这样机器人就能够倒车到靠近障碍物的狭小空间中。

参数

<name>.允许未知区域

类型

默认

布尔值

True

描述

是否允许在未知空间中进行穿越/搜索。

<name>.容差

类型

默认

双精度

0.25

描述

如果无法找到精确路径,则可以接受与所请求姿态的距离差异在启发式成本目标方面的容差。

<name>.max_iterations

类型

默认

int

1000000

描述

在超过最大搜索迭代次数之前进行搜索的最大次数,如果设为-1,则不限制计算时间。

<name>.max_on_approach_iterations

类型

默认

int

1000

描述

一旦访问的节点在目标容差范围内,继续尝试寻找精确匹配的最佳路径解,直到返回最佳路径解。

<name>.max_planning_time

类型

默认

双精度

5.0

描述

规划的最长时间(以秒为单位)。

<name>.analytic_expansion_ratio

类型

默认

双精度

3.5

描述

SE2节点将尝试按比例于该值和最小启发式频繁地完成分析扩展。负值将转换为无穷大。

<name>.analytic_expansion_max_length

类型

默认

双精度

3.0

描述

如果长度太长,则拒绝此扩展。这可以防止搜索在离目标很远的位置进行快捷方式计算(例如,不要在开放地图的中途倒车或穿过高代价区域)。这个值不应小于正在使用的最小转弯半径的4-5倍,否则规划时间将开始波动上升。

<name>.reverse_penalty

类型

默认

双精度

2.0

描述

如果在反向搜索中,对SE2节点应用启发式惩罚。仅在``allow_reverse_expansion = true``时使用。

<name>.change_penalty

类型

默认

双精度

0.05

描述

如果搜索中更改方向(例如从左到右),则要应用于SE2节点的启发式惩罚。

<name>.non_straight_penalty

类型

默认

双精度

1.05

描述

如果在非直线方向搜索,应用于SE2节点的启发式惩罚。

<name>.cost_penalty

类型

默认

双精度

2.0

描述

如果姿态的成本发生变化,要应用于SE2节点的启发式惩罚。允许状态格具有成本感知性。

<name>.rotation_penalty

类型

默认

双精度

5.0

描述

对于原地旋转而言,要应用的惩罚,如果最小控制集包含原地旋转。应始终将其设置为足够高的值,以便权衡原地旋转,除非对于避障来说绝对必要,否则计划中可能会出现频繁的不连续性,计划要求机器人原地旋转以便节省路径距离。

<name>.retrospective_penalty

类型

默认

双精度

0.015

描述

对SE2节点应用启发式惩罚。使状态网络在路径上更喜欢较晚的操作而不是较早的操作。这样可以节省搜索时间,因为较早(较短)的分支直到必要时才会被展开。必须 >= 0.0 并且 <= 1.0。必须为 0.0 才能完全符合要求。

<name>.lattice_filepath

类型

默认

string

""

描述

状态网络最小控制集图的文件路径,默认为一个16个bin、0.5m转弯半径的控制集,位于 test/ 用于基本测试和评估(与Hybrid-A*默认的0.5m相对)。

<name>.lookup_table_size

类型

默认

双精度

20.0

描述

以米为单位的Dubin/Reeds-Sheep距离窗口的大小。用于缓存。

<name>.cache_obstacle_heuristic

类型

默认

布尔值

false

描述

在同一目标位置的后续重新规划之间缓存障碍地图动态规划距离扩展启发式。如果代价地图基本静态,可以显著加快重新规划的性能(40倍)。

<name>.allow_reverse_expansion

类型

默认

布尔值

false

描述

如果为真,则允许机器人使用基元在当前机器人方向的镜像相反方向(即反向)进行扩展。

<name>.smooth_path

类型

默认

布尔值

true

描述

如果为true,则对搜索路径进行简单且快速的平滑后处理。

<name>.smoother.max_iterations

类型

默认

int

1000

描述

平滑器用于平滑路径的最大迭代次数,以限制潜在的计算量。

<name>.smoother.w_smooth

类型

默认

双精度

0.3

描述

平滑器应用于平滑数据点的权重。

<name>.smoother.w_data

类型

默认

双精度

0.2

描述

平滑器应用于保留原始数据信息的权重。

<name>.smoother.tolerance

类型

默认

双精度

1e-10

描述

平滑会话终止的参数容差变化量。

<name>.smoother.do_refinement

类型

默认

布尔值

true

描述

执行额外的细化平滑运行。实质上,这将递归地调用平滑器,使用上一次平滑循环的输出进一步平滑宏观趋势的路径。这通常在混合A*规划器中特别改善质量,但在状态格规划器中也可以帮助减少由有限方向数导致的"块状"运动。

<name>.smoother.refinement_num

类型

默认

int

2

描述

递归尝试平滑的次数,必须 >= 1

示例

planner_server:
  ros__parameters:
    planner_plugins: ["GridBased"]
    use_sim_time: True

    GridBased:
      plugin: "nav2_smac_planner/SmacPlannerLattice"
      allow_unknown: true                 # Allow traveling in unknown space
      tolerance: 0.25                     # dist-to-goal heuristic cost (distance) for valid tolerance endpoints if exact goal cannot be found.
      max_iterations: 1000000             # Maximum total iterations to search for before failing (in case unreachable), set to -1 to disable
      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
      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
      reverse_penalty: 2.0                # Penalty to apply if motion is reversing, must be => 1
      change_penalty: 0.05                # Penalty to apply if motion is changing directions (L to R), must be >= 0
      non_straight_penalty: 1.05          # 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.
      rotation_penalty: 5.0               # Penalty to apply to in-place rotations, if minimum control set contains them
      retrospective_penalty: 0.015
      lattice_filepath: ""                # The filepath to the state lattice graph
      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.
      allow_reverse_expansion: false      # If true, allows the robot to use the primitives to expand in the mirrored opposite direction of the current robot's orientation (to reverse).
      smooth_path: True                   # If true, does a simple and quick smoothing post-processing to the path
      smoother:
        max_iterations: 1000
        w_smooth: 0.3
        w_data: 0.2
        tolerance: 1.0e-10
        do_refinement: true
        refinement_num: 2