使用旋转微调控制器 [待校准@1463]

概述

本教程将讨论如何设置您的机器人使用 RotationShimController 来帮助您的机器人在开始跟踪路径时创建直观的就地旋转行为。本教程的目的是向读者解释控制器的值,如何配置它,如何用它配置主控制器,最后是使用它的一个例子。 [待校准@1468]

在开始本教程之前,强烈建议您完成 入门 ,尤其是如果您是ROS和Nav2的新手。要求是最新安装的Nav2/ROS 2包含这个包。 [待校准@1469]

什么是旋转微调控制器? [待校准@1470]

这是开发由于怪癖TEB和DWB,但适用于任何其他控制器插件类型想旋转到位行为。 TEB 的行为往往鞭机器人小结果,或当路径开始非常不同标题比电流在一个有点奇怪方式由于松紧带方法。 DWB 可以调整到有任何类型的行为,但通常调整它是一个优秀路径追随者还少优化能够平滑过渡到新路径远标题 -- 总是权衡。同时给出TEB和DWB更好起点开始跟踪路径调整控制器显着容易创建更直观结果作壁上观。 [待校准@1471]

请注意,不需要在任何插件中使用它。许多用户在不使用该控制器的情况下是完全成功的,但是如果机器人可以在开始其路径跟踪任务 (或其他任务) 之前就地旋转,这样做是有利的。 [待校准@1472]

参数 nav2_rotation_shim_controller 将检查机器人和新接收路径的大致航向差异。如果在阈值内,它将把请求传递给 primary_controller 执行任务。如果超出阈值,该控制器将机器人旋转至该路径方向的适当位置。一旦它在公差范围内,它就会将控制执行从这个旋转微调控制器传递到主控制器插件上。此时,机器人的主插件将控制顺利完成任务。 [待校准@1473]

The RotationShimController is most suitable for:

  • 可以就地旋转的机器人,如差分和全向机器人。 [待校准@1475]

  • 当开始跟踪与机器人当前航向明显不同的航向的新路径时,或者当为其任务调整控制器时,优先选择旋转。 [待校准@1476]

  • 使用非运动学上可行的planner,如NavFn、Theta *,或Smac 2D (可行planner等Smac Hybrid-A*和点阵将启动搜索机器人的实际启动标题,无需旋转以来路径保证驱动物理约束)。 [待校准@1477]

备注

稳压纯追求此内置因此不必对RPP。然而,它适用于所有其他。看到 导航插件 的完整列表电流控制器插件。 [待校准@1478]

配置旋转微调控制器 [待校准@1479]

该控制器是 shim,因为它位于主控制器插件和控制器服务器之间。它需要命令并对其进行预处理以旋转到标题,然后在满足该条件后将执行控制传递给主插件-充当简单的传递。 [待校准@1480]

因此,它的配置看起来与任何其他插件非常相似。在下面的代码块中,您可以看到我们已经添加了 RotationShimController 作为控制器服务器中路径跟踪的插件。你可以看到我们也在下面配置了它的内部参数, angular_dist_thresholdmax_angular_accel[待校准@1481]

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_plugin: "progress_checker"
    goal_checker_plugin: "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

旋转微调控制器很简单只有几个参数决定条件应颁布。 [待校准@1482]

  • 参数``angular_dist_threshold``:角距离 (弧度) 除了机器人的电流标题和近似路径前往触发旋转行为。一旦机器人在这个门槛,控制交给初级控制器插件。 [待校准@1483]

  • 参数``forward_sampling_distance``:距离机器人的距离 (以米为单位),以选择路径上的一个点来近似路径的开始方向。这类似于 "lookahead" 乙。 [待校准@1484]

  • 参数``rotate_to_heading_angular_vel``:角速度 (rad/s) 机器人旋转标题,当行为制定。 [待校准@1485]

  • 参数``max_angular_accel``:角加速度 (rad/s) 机器人旋转标题,当行为制定。 [待校准@1486]

  • 参数``simulate_ahead_time``:前进的时间项目旋转命令来检查碰撞 [待校准@1487]

配置主控制器 [待校准@1488]

还有一个上面没有提到的 RotationShimController 的剩余参数, primary_controller 。这是应用程序希望用作主要操作方式的控制器类型。它将与shim插件共享相同的名称和yaml命名空间。在主控制器设置 DWB 的情况下,你可以观察到这一点 (为简洁起见,移除进度和目标检查员)。 [待校准@1489]

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命名空间中,您还可以包括机器人所需的任何 primary_controller 特定参数。因此,在 max_angular_accel 之后,你可以为你的平台包括 DWB 的任何参数。 [待校准@1490]

演示执行 [待校准@1491]