旋转衬垫控制器 ( Rotation Shim Controller ) 是什么

旋转衬垫控制器 ( Rotation Shim Controller ) 是什么?

  旋转衬垫控制器是为了解决 TEB 和 DWB 中的一些问题而开发的,但同样适用于其他希望具有旋转就位行为的控制器插件类型。由于 TEB 采用了弹性带方法,其行为倾向于通过小幅转向将机器人迅速转向,或者当路径的起始方向与当前方向相差较大时,以一种令人惊讶的方式进行转向。DWB 可以调整为具有任何类型的行为,但通常将其调整为优秀的路径跟踪器也会使其在远离当前路径方向的新路径上的平滑过渡能力降低-这总是存在权衡的。为 TEB 和 DWB 提供更好的起始点来跟踪路径使得控制器的调整更加容易,并为旁观者创造出更直观的结果。
  请注意,并不必须需要使用这个控制器插件。许多用户在没有使用此控制器的情况下也能成功地仿真机器人,但如果机器人在开始路径跟踪任务(或其他任务)之前需要原地旋转,那么使用此控制器可能会更有优势。
  nav2_rotation_shim_controller 会检查机器人与新接收到的路径之间的大致航向差异。如果在一个阈值范围内,它将将请求传递给 primary_controller 来执行任务。如果超出阈值范围,该控制器将使机器人原地旋转,朝向路径的航向。一旦在容差范围内,它将把控制执行从旋转shim控制器转移到主要的控制器插件上。此时,机器人的主要插件将接管控制,以平稳过渡到任务执行阶段。

RotationShimController最适合于以下情况:
  1.可以原地旋转的机器人,例如差分和全向轮机器人。
  2.在开始跟踪一个方向与机器人当前朝向显著不同的新路径时,或者在为其任务调整控制器时,希望进行原地旋转。
  3.使用非运动学可行的规划器,例如 NavFn、Theta 或 Smac 2D(运动学可行的规划器,如 Smac Hybrid-A 和 State Lattice ,将从机器人的实际起始航向开始搜索,不需要旋转,因为它们的路径受物理约束保证可行)。

备注:
  Regulated Pure Pursuit(RPP)已经内置了这个功能,因此不需要与RPP配对使用。但是,它适用于其他所有控制器插件。请参阅导航插件以获取当前控制器插件的完整列表。
配置旋转shim控制器:

  该控制器是一个shim,因为它位于主要控制器插件和控制器服务器之间。它接收命令并对其进行预处理以旋转到指定的航向,一旦满足条件,就将执行控制转交给主要插件,起到简单的传递作用。
  因此,它的配置与其他插件非常相似。在下面的代码块中,您可以看到我们将 RotationShimController 作为路径跟踪的插件添加到控制器服务器中。您还可以看到我们在下面配置了其内部参数,从 angular_dist_threshold 到 max_angular_accel。

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"
      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

注意:上述代码块是一个示例,其中包含了 RotationShimController 的配置参数。实际应用中,您需要根据您的具体需求进行配置。
angular_dist_threshold:机器人当前朝向与近似路径朝向之间的角度距离(以弧度表示),当机器人在此阈值内时,控制将转交给主要控制器插件。
forward_sampling_distance:从机器人选择一个点以近似路径的起始朝向的距离(以米为单位)。这类似于“前瞻”点。
rotate_to_heading_angular_vel:当激活该行为时,机器人旋转到目标朝向的角速度(以弧度/秒为单位)。
max_angular_accel:当激活该行为时,机器人旋转到目标朝向的角加速度(以弧度/秒²为单位)。
simulate_ahead_time:将旋转命令向前推进以检查碰撞的时间(以秒为单位)。
  还有一个未在上面提到的 RotationShimController 的参数,即 primary_controller 。这是您的应用程序希望用作主要操作方式的控制器类型。它将与 shim 插件具有相同的名称和 yaml 命名空间。下面的示例中,将主要控制器设置为 DWB(为简洁起见,省略了进度检查器和目标检查器)。

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
controller_plugins: ["FollowPath"]
FollowPath:
plugin: "nav2_rotation_shim_controller::RotationShimController"
primary_controller: "dwb_core::DWBLocalPlanner"
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

  # DWB parameters
  ...
  ...
  ...

重要的一点是,在相同的 yaml 命名空间中,您还可以包括适用于主控制器的任何所需参数。因此,在max_angular_accel 之后,您可以包括 DWB 的任何参数以适应您的平台。

参考 navigation2 官方文档
希望对您有所帮助!

你可能感兴趣的:(navigation2,机器人,c++)