Skip to content

Jazzy 迁移指南

从 ROS 2 Jazzy 迁移到 Kilted 时,我们添加了许多稳定性改进,此处不再逐一赘述。

nav2_route 中的路线服务器通过预定义导航图计算路线,而非像规划器服务器那样使用自由空间规划。 当需要紧密沿特定路线行驶时,可完全替代自由空间规划;也可用于增强全局规划器,为长距离目标提供路由。 此时,规划器仅针对路线上前方的必要区段,结合局部环境信息生成可行路径。

这在工业应用中非常有用:机器人应确定性地沿已知区域、车道和路线进行规划,而非在全球范围内自由导航。 同样适用于户外导航,例如城市中心道路或跨越长距离的自然环境。

路线服务器还包含跟踪功能,可跟踪路线进度并提供实时状态反馈,同时支持在各个节点和边事件处触发上下文相关操作(改变速度、开灯等)。

有关更多配置信息、生成和使用路线图的教程,以及 nav2_bringup 和 nav2_route 中的示例图,请参阅配置指南(Configuring Route Server)。

PR #4459 为所有动作结果消息添加了 error_msg,PR #4460 则通过 bt_navigator 捕获并传播 error_msg 结果字符串。 为此引入了 BT Navigator 的新参数 error_code_name_prefixes,它是 error_code_names 的强制替代项。

换言之,error_code_names 参数将在启动时触发运行时异常而被拒绝,必须将其移除。

正确配置参数并适当修改行为树 XML 后,错误代码及上下文相关的错误消息将传播到 Nav2 动作服务器请求的 Result 消息中。

这样,应用客户端在调用 Nav2 或其服务器时,就能根据更多上下文信息来处理特定错误,而非仅依赖错误代码。

对于基于行为树的 Navigator 动作请求,需要增强相关行为树元素,使其支持 error_code_id 和 error_msg 输出端口。

相应的属性值必须使用端口变量名,这些变量名由 error_code_names_prefix 分别与后缀 _error_code 和 _error_msg 组合而成。

以下是被替换掉的 error_code_names 参数的示例:

error_code_names:
- compute_path_error_code
- follow_path_error_code

替换为指定当前内置动作服务器前缀集合的 error_code_name_prefixes 参数:

error_code_name_prefixes:
- assisted_teleop
- backup
- compute_path
- dock_robot
- drive_on_heading
- follow_path
- nav_thru_poses
- nav_to_pose
- spin
- route
- undock_robot
- wait

以下示例展示了应如何修改行为树配置,以将错误消息和错误代码传播到 BT Navigator 的结果中。

<ComputePathToPose goal="{goal}" path="{path}" planner_id="{selected_planner}" error_code_id="{compute_path_error_code}" error_msg="{compute_path_error_msg}"/>
<FollowPath path="{path}" controller_id="{selected_controller}" error_code_id="{follow_path_error_code}" error_msg="{follow_path_error_msg}"/>
<Spin spin_dist="1.57" error_code_id="{spin_error_code}" error_msg="{spin_error_msg}"/>
<Wait wait_duration="5.0" error_code_id="{wait_error_code}" error_msg="{wait_error_msg}"/>
<BackUp backup_dist="0.30" backup_speed="0.15" error_code_id="{backup_error_code}" error_msg="{backup_error_msg}"/>
<DriveOnHeading dist_to_travel="2.0" speed="0.2" time_allowance="12" error_code_id="{drive_on_heading_error_code}" error_msg="{drive_on_heading_error_msg}"/>
<UndockRobot dock_type="{dock_type}" error_code_id="{undock_robot_error_code}" error_msg="{undock_robot_error_msg}" />
<DockRobot dock_id="{dock_id}" error_code_id="{dock_robot_error_code}" error_msg="{dock_robot_error_msg}"/>
<NavigateToPose goal="{picking_location}" error_code_id="{nav_to_pose_error_code}" error_msg="{nav_to_pose_error_msg}"/>

在行为树 XML 中为 error_code_id 和 error_msg 显式指定 error_code_names_prefix,可通过基于配置的间接寻址解决内置 Nav2 动作服务器与第三方动作服务器之间的命名空间冲突。

如果你的系统中存在自定义的 BTActionServer、BehaviorTreeNavigator 或相关的任务服务器 BT 节点,请查看该 PR 更新相应文件以支持错误代码传播。

在 Kilted 及更新版本中,所有 Twist 发布者和订阅者的默认 cmd_vel 话题已更改为 TwistStamped,以支持更广泛的应用场景。 这样还可以过滤掉过时的速度消息,在某些应用中很有用。 机器人现在应订阅 TwistStamped 消息而非 Twist 消息,并相应地更新仿真。 话题名称保持不变。

如果需要,可在 nav2_params.yaml 文件中为所有涉及 Twist 订阅或发布的节点将 enable_stamped_cmd_vel 设置为 false 来禁用此功能。 有关如何为每个节点配置此参数的更多信息,请参阅配置指南。

可以在针对 TurtleBot 3 和 4 的以下拉取请求中看到使用 Gazebo 进行仿真迁移的示例。

新的 Nav2 回环仿真器(Loopback Simulator)

Section titled “新的 Nav2 回环仿真器(Loopback Simulator)”

nav2_loopback_sim 是一个独立的仿真器,通过为非物理仿真创建「回环(loopback)」来替代机器人硬件和物理仿真器(Gazebo、Bullet、Isaac Sim 等)。 它根据输出的指令速度计算机器人里程计,创建理想的「无摩擦平面」式仿真。 适用于单元测试、系统测试、更高级别系统的研发、在不关心定位精度或系统动力学的情况下测试行为,以及多机器人仿真。

使用静态基础设施停靠或动态停靠

Section titled “使用静态基础设施停靠或动态停靠”

PR #4627 添加了一种新的停靠插件类型和相应逻辑,以支持 nav2 docking server 中的非充电停靠场景。 用户可以指定停靠到静态基础设施(如传送带)或动态停靠位置(如托盘)。 还包含一个新的停靠插件 simple_non_charging_dock,用于演示新的停靠服务器功能。

PR #4458 添加了一个新的 RViz 面板,用于与 Docking Server 交互。

该面板支持以下操作:

  • 将机器人停靠到充电器,选择停靠 ID 或停靠位姿和类型。还可以设置是否导航到暂存位姿(staging pose)。
  • 将机器人从充电器上解除停靠。

面板显示 nav2_msgs/DockRobot 和 nav2_msgs/UndockRobot 动作发布的目标状态和反馈,包括已用时间、重试次数、动作当前状态(staging、controlling 等)以及错误代码等信息。

以下是该插件的工作演示:

docking_panel

警告:如果 Docking Server 不可用,停靠类型的组合框将为空。

以下是新增的 BT 节点列表:

  • GetPoseFromPath:从输入路径中获取特定位姿的动作。
  • RemoveInCollisionGoals:移除代价高于阈值的航点的动作。
  • IsStopped:检查机器人是否已停止一定时长的条件。

以下是对现有 BT 节点的更改列表:

  • GoalUpdater:现在也支持更新目标列表(对 NavigateThroughPoses 接口很有用)。

用于代价地图代价单元检查的新 RViz 工具

Section titled “用于代价地图代价单元检查的新 RViz 工具”

PR #4546 添加了一个新的 RViz 工具,用于获取代价地图中各代价单元(cost cell)的代价值,还提供了一个可在足迹位姿处获取代价值的服务。

用法:

  • 使用代价地图 RViz 工具点击代价地图上的任意点,即可检索并显示该单元处的代价值。
  • 可使用 nav2_msgs/GetCosts 服务检索足迹位姿处的代价值。

以下是该工具的工作演示:

rviz_costmap_cost_tool

警告:如果代价地图服务不可用,该工具将无法获取并显示代价值。

PR #4561 为 Costmap2DROS 引入了 map_vis_z 参数,可将地图略微下移至默认平面以下,以消除 RViz 可视化中的闪烁问题。

默认值:

  • map_vis_z: 0.0

无闪烁的最小值:

  • map_vis_z: -0.008

之前:

fix_flickering_visualization_before

之后:

fix_flickering_visualization_after

PR #4663 为 DWB 局部规划器引入了 limit_vel_cmd_in_traj 参数,可根据机器人当前速度限制轨迹生成中使用速度的上限。

默认值:

  • false

在到达目标时禁用零速度发布的选项

Section titled “在到达目标时禁用零速度发布的选项”

PR #4675 为控制器服务器引入了 publish_zero_velocity 参数,可在到达目标时禁用零速度发布。

默认值:

  • true

引入了参数 angular_disengage_threshold,作为旋转 shim 控制器中旋转脱离的新阈值。 此前,控制器会将机器人旋转到 angular_dist_threshold 指定的角度;现在可以改为旋转到 angular_disengage_threshold,如有需要,可将其设置为更接近路径朝向的值。

PR #4752 为停靠服务器添加了可选的碰撞检测功能,用于检查机器人与停靠位之间的碰撞。

默认值:

  • true

重构多机器人 bringup 与配置文件以使用命名空间

Section titled “重构多机器人 bringup 与配置文件以使用命名空间”

PR #4715 彻底重构了多机器人 bringup 和命名空间的使用方式,使其开箱即用地兼容 ROS 命名空间,并移除了自定义逻辑。具体包括:

  • use_namespace 参数已从 nav2_bringup 的 launch 文件中移除。namespace 参数现在将始终被使用,并默认为 /(「全局命名空间」)。
  • 现在普通机器人和使用命名空间的机器人共用一个 RViz 配置文件。话题已改为相对路径(例如 /map -> map),RViz 的 namespace 将自动添加。
  • 现在单机器人和多机器人 bringup 共用一个 nav2_params.yaml 配置文件。所有话题都已改为相对路径(例如 /scan -> scan)。

某些插件/节点可能拥有自身的局部命名空间。CostmapLayer 就是如此,它将位于 /ns/[layer_name] 命名空间下。针对这种情况,新增了 joinWithParentNamespace 函数,以确保连接相对路径时得到的是 /ns/topic_name 而非 /ns/[layer_name]/topic_name。

例如,如果你不需要多机器人支持,在 nav2_params.yaml 和 RViz 配置文件中保留绝对路径即可保持现有行为。

例如,假设你在 local_costmap 的 voxel_layer 中指定了 topic: scan,并以 tb4 命名空间启动 bringup:

  • 用户选择的命名空间为 tb4。
  • 用户选择的话题为 scan。
  • 该话题将被重映射为 /tb4/scan,不包含 local_costmap。
  • 如果不希望应用节点命名空间,请使用全局话题 /scan。

从 Costmap 节点移除全局 map_topic 参数

Section titled “从 Costmap 节点移除全局 map_topic 参数”

PR #4715 从 Costmap2DROS 节点中移除了全局 map_topic 参数。该参数仅在 StaticLayer 中使用,现在应改为在 StaticLayer 中定义为局部参数,例如:

global_costmap:
global_costmap:
ros__parameters:
[...]
# Not supported anymore
map_topic: my_map
static_layer:
plugin: "nav2_costmap_2d::StaticLayer"
map_subscribe_transient_local: True
# Do this instead
map_topic: my_map

以下 Costmap2DROS 的构造函数已被移除:

explicit Costmap2DROS(
const std::string & name,
const std::string & parent_namespace,
const std::string & local_namespace,
const bool & use_sim_time);
explicit Costmap2DROS(const std::string & name, const bool & use_sim_time = false);

它们被合并为一个构造函数:

explicit Costmap2DROS(
const std::string & name,
const std::string & parent_namespace = "/",
const bool & use_sim_time = false);

local_namespace 参数已被移除,现在会自动设置为节点名称(这正是第二个被移除的构造函数所实现的行为)。 参数 parent_namespace / use_sim_time 均提供了默认值,以保持仅通过指定名称即可创建 Costmap2DROS 对象的能力。

在 DriveOnHeading、BackUp 和 Spin 动作中禁用碰撞检测的选项

Section titled “在 DriveOnHeading、BackUp 和 Spin 动作中禁用碰撞检测的选项”

PR #4785 为 DriveOnHeading、BackUp 和 Spin 动作添加了一个名为 disable_collision_checks 的新布尔参数,用于可选地禁用碰撞检测。 例如,当即使存在已知障碍物也需要移动机器人时,此参数非常有用。

默认值:

  • false

新的插件容器层(Plugin Container Layer)

Section titled “新的插件容器层(Plugin Container Layer)”

PR #4781 添加了一种代价地图层插件类型,用于将不同的代价地图层分组到单个代价地图层之下。这样可以将各自独立的代价地图层组合在一个父代价地图之下,而非像当前实现那样将所有代价地图层不加区分地合并在一起。

PR #4795 将 nav2_graceful_controller 更新为迭代式地选择运动目标。这是一次大规模重构,显著提升了控制器性能。motion_target_dist 参数已被 min_lookahead 和 max_lookahead 参数取代。其他变更包括:

  • 改进了底层控制律 k_phi、k_delta、beta 参数的默认值。
  • 如果规划路径中缺少朝向信息,则自动生成朝向。
  • 添加了 v_angular_min_in_place 参数,以避免机器人因机械限制在原地旋转时卡住。
  • final_rotation 已更名为 prefer_final_rotation,行为略有调整。

遵循 ROS 2 launch 语法的 TurtleBot 3 多机器人 launch 文件

Section titled “遵循 ROS 2 launch 语法的 TurtleBot 3 多机器人 launch 文件”

PR #5000 更新了 cloned_multi_tb3_simulation_launch.py launch 文件,使机器人配置解析符合 ROS 2 launch 文件标准。此变更允许用户通过 launch_arguments 从另一个 launch 文件传入 robots 参数,旧版本无法做到这一点。

在另一个 launch 文件中包含 cloned_multi_tb3_simulation_launch.py 的示例:

IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(get_package_share_directory('nav2_bringup'), "launch", "cloned_multi_tb3_simulation_launch.py")
),
launch_arguments={"robots": "{name: 'robot1', pose: {x: 0.5, y: 0.5, yaw: 1.5707}}"}.items(),
)

ComputePathThroughPoses、NavigateThroughPoses 等 BT 节点改用 nav_msgs/Goals 替代 vector<PoseStamped>

Section titled “ComputePathThroughPoses、NavigateThroughPoses 等 BT 节点改用 nav_msgs/Goals 替代 vector<PoseStamped>”

PR #269 在 nav_msgs 包中引入了新的消息类型 Goals。 PR #4980 将所有 PoseStamped 集合迁移为使用 nav_msgs::msg::Goals 消息。最重要的是,NavigateThroughPoses.action 和 ComputePathThroughPoses.action 已更新为使用 nav_msgs/Goals。 由于 nav_msgs/Goals 包含 header 字段,位姿现在需通过 NavigateThroughPoses.poses.goals 而非 NavigateThroughPoses.poses 访问,或通过 ComputePathThroughPoses.goals.goals 而非 ComputePathThroughPoses.poses 访问。在使用这些接口时,请相应地更新你的代码。

使用 Eigen 库重新实现的 MPPI 控制器,性能提升 40-45%

Section titled “使用 Eigen 库重新实现的 MPPI 控制器,性能提升 40-45%”

PR #4621 使用 Eigen 完全重新实现了 MPPI 控制器。Eigen 是广受支持的高性能计算(HPC)库,更适合二维轨迹批量处理场景。未来基于 Eigen 在 GPU 上 rollout 轨迹也成为可能。 MPPI 优化器的性能提升了 40-50%。此外,MPPI 控制器现在还可以在缺乏广泛 SIMD 指令支持的 ARM 处理器上运行。

PR #4148 在 smac planner 中引入了两个新参数(goal_heading_mode、coarse_search_resolution),该变更涉及 smac planner hybrid 和 smac planner lattice,允许规划器规划到具有多种朝向的目标,并在一次规划调用中返回最佳路径。这对于可以从多个朝向接近目标、且不想为每个朝向单独规划的机器人非常有用。 此外,还为 smac planner lattice 添加了 coarse_search_resolution 参数,以加速最佳路径的搜索。

以下是一个使用默认 goal_heading_mode 的 smacHybrid 规划器示例,用于对比规划路径的差异。

Navigation2 with smacHybrid planner with default goal_heading_mode

以下是一个使用双向(bidirectional)goal_heading_mode 的 smacHybrid 规划器示例,用于对比规划路径的差异。

Navigation2 with smacHybrid planner with bidirectional goal_heading_mode

以下是一个使用 all_directions goal_heading_mode 的 smacHybrid 规划器示例,用于对比规划路径的差异。

Navigation2 with smacHybrid planner with all_direction goal_heading_mode

DriveOnHeading 和 BackUp 行为:新增加速度约束

Section titled “DriveOnHeading 和 BackUp 行为:新增加速度约束”

PR #4810 为 DriveOnHeading 和 BackUp 行为添加了新参数 acceleration_limit、deceleration_limit、minimum_speed。默认值如下:

  • acceleration_limit: 2.5
  • deceleration_limit: -2.5
  • minimum_speed: 0.10

PR #4864 将旋转 Shim 控制器更新为根据目标朝向进行减速。这样机器人在接近目标朝向时会减速,从而减少移交给主控制器时的超调。减速行为由 max_angular_accel 参数控制。

以下是使用以下参数的演示:

[...]:
plugin: "nav2_rotation_shim_controller::RotationShimController"
angular_dist_threshold: 1.22 # (70 degrees)
angular_disengage_threshold: 0.05 # (3 degrees)
rotate_to_heading_angular_vel: 0.8
max_angular_accel: 0.5

Rotation Shim Deceleration

旋转 Shim 控制器中引入了参数 closed_loop,允许用户在开环和闭环控制之间选择。设置为 false 时,rotationShimController 将使用上一次的指令速度作为下一次迭代的当前速度。当加速度限制设置得当且机器人控制器响应迅速时,这是一个合理的假设。设置为 true 时,则使用里程计来估计机器人的当前速度。此时,数据源应具有高频率和低延迟,以补偿控制延迟。

默认值:

  • true

PR #4996 为 MPPI cost critic 添加了新参数 near_collision_cost,用于设置避障的最大接近距离。代价值超过该值时,即使尚未发生碰撞,也会被施加临界代价(critical cost)。

默认值:

  • 253

PR #4955 为 Nav2 技术栈引入了参数 service_introspection_mode,允许对服务进行内省。选项为 “disabled”、“metadata”、“contents”。

默认值:

  • “disabled”

旋转 Shim 控制器中引入了参数 use_path_orientations,允许用户选择使用路径点的朝向来计算路径的航向,而非从路径点的相对位置推算航向。这对于生成具有前进和后退运动朝向的可行路径的规划器(如 Smac Planner)非常有用。

默认值:

  • false

当 publish_optimal_trajectory 启用时,完整的以 nav2_msgs/Trajectory 形式表示的最优轨迹将被发布,用于调试、可视化或由其他系统注入。这不仅提供位姿信息,还提供 MPC 轨迹路径点的速度和时间戳,对于多级控制系统、加加速度(jerk)最小化或碰撞避免系统非常有用。

Section titled “NavigateThroughPoses - 上报航点状态信息”

PR #4994 增强了 NavigateThroughPoses 导航器,为航点提供实时状态反馈。 引入了 WaypointStatus 消息类型,用于指示航点状态:pending(待处理)、complete(已完成)、skipped(已跳过)或 failed(已失败)。 这也取代了 WaypointFollower 中已弃用的 MissedWaypoint 类型。 该更新还使行为树节点 RemovePassedGoals 和 RemoveInCollisionGoals 在动作进行时标记航点状态。 NavigateThroughPoses 现在通过黑板(blackboard)检索航点状态(类似于路径和目标),并将其组织到动作服务器的反馈和结果消息中,向用户公开航点的执行状态。

参数 waypoint_statuses_blackboard_id 被引入到 bt_navigator 节点中,允许用户自定义黑板中 waypoint_statuses 的变量名。 在行为树 XML 中,RemovePassedGoals 和 RemoveInCollisionGoals 节点必须暴露相应的端口,以与 waypoint_statuses 工作流对齐,从而在因完成而移除或因碰撞而跳过时管理航点状态。 这确保了 NavigateThroughPoses 可以通过黑板检索和传播航点状态。 该动作在填充动作结果时,还会在末尾补充已完成的航点。

以下是 RemovePassedGoals 和 RemoveInCollisionGoals 节点配置的示例:

<RemovePassedGoals input_goals="{goals}" output_goals="{goals}" radius="0.7" input_waypoint_statuses="{waypoint_statuses}" output_waypoint_statuses="{waypoint_statuses}"/>
<RemoveInCollisionGoals input_goals="{goals}" output_goals="{goals}" cost_threshold="254.0" use_footprint="true" service_name="/global_costmap/get_cost_global_costmap" input_waypoint_statuses="{waypoint_statuses}" output_waypoint_statuses="{waypoint_statuses}" />

waypoint_statuses 数组的长度与原始输入 goals 向量一致,每个元素都是一个 WaypointStatus 消息。 RemovePassedGoals 和 RemoveInCollisionGoals 节点会从 goals 向量中剔除无效或已完成的目标,并同步更新它们在 waypoint_statuses 数组中对应的条目。

如果在处理多个有序目标时还出现了其他跳过、移除、完成或失败的情况,自定义节点也可以访问或修改 waypoint_statuses 数组。可使用工具方法 find_next_matching_goal_in_waypoint_statuses(来自 nav2_utils)将目标映射到其状态条目。 修改后的状态随后应通过输出端口传播给下游节点。

NavigateThroughPoses 导航器在其 onLoop 回调中从黑板检索 waypoint_statuses 实例,并将其写入反馈消息。 在 goalCompleted 回调期间,它会获取 waypoint_statuses 实例,并根据 BT 的最终执行状态(final_bt_status),将仍处于 PENDING 状态的所有航点更新为 COMPLETED(当 final_bt_status 为 SUCCEEDED 时)或 FAILED(其他情况)。

PR #5065 使 BT 导航器(navigate_to_pose 和 navigate_through_poses)支持使用 Groot 2 对行为树进行实时监控和可视化。同时还提供 JSON 转换以查看黑板(Blackboard)的内容,从而可以对 BT 节点进行内省。此外,还包括通过新的目标请求在运行时切换 bt-xmls 的功能。

由于对超过 20 个节点的行为树进行实时监控以及可视化黑板内容是 Groot 2 的 PRO(付费)功能,此功能默认处于禁用状态。

注意:目前存在一个已知问题:在可视化黑板中包含向量及相关类型(例如 Goals 和 Path)时,会导致 Groot 2 崩溃。开发团队正在努力解决此问题。有关最新进展,请参阅以下链接:Groot2 issue #55 和 BehaviorTree PR #958。

PR #5079 将 dock_backwards 布尔参数从 docking server 移至停靠插件中,并改为字符串参数 dock_direction。这样,用户可以在同一个 docking server 中使用不同方向的多个停靠插件。默认值为 forward,也可设置为 backward。

有关更多信息,请参阅 Docking Server 配置指南(Configuring Docking Server)。

新的位置目标检查器(Position Goal Checker)

Section titled “新的位置目标检查器(Position Goal Checker)”

PR #5162 在 Nav2 中添加了一个名为 PositionGoalChecker 的新目标检查器插件。该插件仅关注机器人位姿的位置分量而忽略朝向,为现有目标检查器提供了替代方案。RPP 控制器使用它来创建有状态行为:一旦达到目标容差,就旋转到目标航向。

PR #5153 更新了 docking server,允许在没有传感器进行检测的情况下向后停靠。具体流程为:机器人以向前方向接近停靠位的暂存位姿(staging pose),并利用传感器覆盖范围进行停靠检测;检测到后,机器人将旋转以倒车进入停靠位,仅使用初始检测到的位姿进行航位推算(deadreckoning)。

新参数 reverse_to_dock 被添加到 SimpleChargingDock 和 SimpleNonChargingDock 插件中以支持此功能。

默认值:

  • false

有关更多信息,请参阅 Docking Server 配置指南(Configuring Docking Server)。

这里可以看到该功能的工作演示:

reverse_to_dock

RegulatedPurePursuit 控制器 [RPP]:新增参数 stateful

Section titled “RegulatedPurePursuit 控制器 [RPP]:新增参数 stateful”

PR #5167 为受调控纯追踪控制器添加了一个新参数 stateful。该参数启用有状态目标处理行为。当设置为 true 时,一旦机器人达到 XY 容差,控制器将保持目标状态,然后专注于对齐目标航向,而不会回退到 XY 位置修正。

Controller Server 移除 control_frequency 动态参数

Section titled “Controller Server 移除 control_frequency 动态参数”

PR #5106 移除了 control_frequency 作为动态参数。 此举是为了让插件能够明确区分哪些参数属于自己、哪些属于更大的服务器,以执行动态重新配置。 控制器服务器会更新此值,但内部插件不会正确更新,因此它被移除了。 如果你依赖此行为,请提交 issue 并与维护者讨论如何重新添加。

默认 bringup 支持 keepout 区域、速度区域和路线规划

Section titled “默认 bringup 支持 keepout 区域、速度区域和路线规划”

PR #5125 在 Gazebo 中 Turtlebot4 仿真的 depot 和 warehouse 地图中添加了 keepout 区域。

对于 depot 地图,keepout 区域用于防止机器人进入货架下方、阻挡楼梯间入口,以及进入周围有八个托盘的区域,以避开高运动区域(high-movement regions)。

对于 warehouse 地图,keepout 区域用于防止机器人规划穿过空椅子和仓库中部高运动区域的路径。

PR #5146 在 Gazebo 中 Turtlebot4 仿真的 depot 和 warehouse 地图中添加了速度区域。

对于 depot 地图,货架被纳入一个最大速度 75% 的速度区域,托盘周围的区域被限制为最大速度的 50%。

对于 warehouse 地图,横梁周围和仓库中部的区域被限制为最大速度的 80%。

depot_graph

keepout 区域以粉色标记,速度区域以灰色标记,其不透明度与速度限制成比例。

PR #5160 为 Gazebo 中 Turtlebot4 仿真的 warehouse 世界添加了图(graph)支持。 这样用户可以可视化路线服务器的运行并测试其新功能。该演示包含一条带有几个航点的简单路线和一个可跟随的图。

warehouse_graph

warehouse 环境路线图的 RViz 可视化。除标注的节点外,所有节点都是双向的。速度区域以灰色标记,不透明度为 0.8,以匹配速度限制。