Rotation Shim Controller

源代码在 Github.

nav2_rotation_shim_controller 将检查相对于机器人和新接收路径的粗略航向差异。如果在阈值内,它将把请求传递给 primary_controller 以执行任务。如果超出阈值,该控制器将使机器人原地旋转朝向该路径航向。一旦在公差范围内,它将把控制执行从此旋转垫片控制器传递到主控制器插件。此时,机器人的主插件将接管控制,以便顺利交接任务。

rotate_to_goal_heading 参数设置为 true 时,当达到目标检查器的 XY 目标公差时,此控制器还能够重新控制机器人。在这种情况下,机器人将朝着目标航向旋转,直到目标检查器验证目标并结束当前导航任务。

RotationShimController 最适合:

  • 可以原地旋转的机器人,例如差速机器人和全向机器人。

  • 当开始跟踪与机器人当前航向有显著不同航向的新路径时,或者当调整控制器以执行其任务使得紧密旋转变得困难时,优先原地旋转。

  • 使用非运动学上可行的规划器,例如 NavFn、Theta* 或 Smac 2D(可行的规划器,例如 Smac Hybrid-A* 和 State Lattice 将从机器人的实际起始航向开始搜索,不需要旋转,因为它们的路径由物理约束保证可驾驶)。

请参阅该包的“README”来获取更完整的信息。

旋转垫片控制器参数

angular_dist_threshold:

Type

Default

double

0.785

Description

以弧度为单位,远离路径航向直至触发旋转的最大角距离。

forward_sampling_distance:

Type

Default

double

0.5

Description

沿路径前进的距离(以米为单位)选择一个采样点来近似路径前进方向

rotate_to_heading_angular_vel:

Type

Default

double

1.8

Description

旋转至路径方向的角旋转速度,以弧度/秒为单位

primary_controller:

Type

Default

string

N/A

Description

内部控制器插件用于旋转至航向后的实际控制行为

max_angular_accel:

Type

Default

double

3.2

Description

旋转至航向的最大角加速度(rad/s/s)

simulate_ahead_time:

Type

Default

double

1.0

Description

以秒为单位模拟旋转命令以检查碰撞的时间。如果发现碰撞,则将控制权转发回主控制器插件。

rotate_to_goal_heading:

Type

Default

bool

false

Description

如果为真,当处于目标的 XY 公差范围内时,rotationShimController 将会重新接管机器人的控制权并开始朝目标方向旋转。

Example

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
    progress_checker_plugins: ["progress_checker"] # progress_checker_plugin: "progress_checker" For Humble and older
    goal_checker_plugins: ["goal_checker"]
    controller_plugins: ["FollowPath"]

    progress_checker:
      plugin: "nav2_controller::SimpleProgressChecker"
      required_movement_radius: 0.5
      movement_time_allowance: 10.0
    goal_checker:
      plugin: "nav2_controller::SimpleGoalChecker"
      xy_goal_tolerance: 0.25
      yaw_goal_tolerance: 0.25
      stateful: True
    FollowPath:
      plugin: "nav2_rotation_shim_controller::RotationShimController"
      primary_controller: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"
      angular_dist_threshold: 0.785
      forward_sampling_distance: 0.5
      rotate_to_heading_angular_vel: 1.8
      max_angular_accel: 3.2
      simulate_ahead_time: 1.0
      rotate_to_goal_heading: false

      # Primary controller params can be placed here below
      # ...