相关文章推荐
傻傻的饺子  ·  #error : WinSock.h ...·  1 年前    · 
路过的洋葱  ·  使用AssemblyScript 构建 ...·  1 年前    · 

Navigation 2(Nav 2)是ROS 2中自带的导航框架,其目的是能够通过一种安全的方式使移动机器人从A点移动到B点。所以,Nav 2可以完成动态路径规划、计算电机速度、避开障碍物和恢复结构等行为。

Nav 2使用行为树(BT,Behavior Trees)调用模块化服务器来完成一个动作。动作可以是计算路径、控制工作(control efforts)、恢复或其他与导航相关的动作。这些动作都是通过动作服务器与行为树(BT)进行通信的独立节点,如下图所示:

注意: 每个动作服务器可以有多个插件,并且有与之匹配的BT插件,可以用来创建具体环境的导航行为。

1.ROS 1与ROS 2中导航框架的对比

在Nav 2中, move_base 被拆分为多个组件。与单个状态机不同(ROS1),Nav 2利用动作服务器和ROS 2的低延迟、可靠通信来分离思想。行为树用于编排组织这些任务,这使得Nav 2无需通过编程来安排任务,通过行为树xml文件就可以拥有高度可配置的导航行为。

nav2_bt_navigator 在顶层替换了 move_base ,它使用一个 Action 接口来完成一个基于树的动作模型(tree-based action model)的导航任务。通过BT来实现更加复杂的状态机,并添加恢复行为作为额外的 Action Servers 。这些行为树是可配置的xml。

路径规划(planning)、恢复(recovery)和控制器(controller)服务器也是动作服务器,BT导航器可以调用这些服务器进行计算。所有的3个服务器都可以承载许多算法的许多插件,每个插件都可以单独从导航行为树中调用特定的行为。提供的默认插件是从ROS 1移植的,即:DWB, NavFn以及类似的恢复行为,如旋转和清除costmaps,另外还添加了一个等待固定时间的新恢复机制。这些服务器通过它们的动作服务器从BT导航器调用,以计算结果或完成任务。状态由BT导航器行为树维护,参考下图。

所有这些更改使得在启动/运行时通过实现相同接口的任何算法来替换这些节点,可以参阅每个包的README.md来获取更多信息。

注意: nav2_simple_navigator 不再使用,已经被 nav2_bt_navigator 所取代。

  • amcl:移植到nav2_amcl
  • map_server:移植到nav2_map_server
  • nav2_planner:替换global_planner,管理 N 个规划器插件
  • nav2_controlle:替换local_planner,管理 N 控制器插件
  • Navfn:移植到nav2_navfn_planner
  • DWB:替换DWA,并移植到ROS 2中的nav2_dwb_controller元包下
  • nav_core:移植为nav2_core,并对接口进行更新
  • costmap_2d:移植为nav2_costmap_2d
  • Nav2_bt_navigator:替换 move_base 状态机
  • nav2_lifecycle_manager:处理服务器程序的生命周期
  • nav2_waypoint_follower:可以通过许多路径点来执行复杂的任务
  • nav2_system_tests:一组用于CI的集成测试和模拟中的基本教程
  • nav2_rviz_plugins:一个rviz插件,用来控制Navigation2服务器、命令、取消和导航
  • nav2_experimental:深度强化学习控制器的实验(和不完整)工作
  • navigation2_behavior_trees:用于调用ROS动作服务器的行为树库的包装器
  • 2.Nav 2概述

    Nav2的预期输入是符合REP-105的TF转换、使用静态Costmap层的地图源、BT XML文件以及任何相关的传感器数据源。然后,它将为完整性或非完整性约束的机器人电机提供有效的速度命令。目前支持所有主要的机器人类型:完整性约束机器人、差分驱动型机器人、腿型机器人和阿克曼(类汽车)机器人等基础类型。同时,Nav2同时使用用于SE2碰撞检测的圆形和任意形状机器人为这些基本类型的机器人提供独特的支持。

    Nav具有以下工具:

  • 加载、服务和存储地图(Map Server)
  • 在地图上定位机器人(AMCL)
  • 在障碍物周围规划一条从A到B的路径(Nav2 Planner)
  • 控制机器人沿着路径行走(Nav2 Controller)
  • 将传感器数据转换为世界的costmap表示(Nav2 Costmap 2D)
  • 使用行为树构建复杂的机器人行为(Nav2 Behavior和BT Navigator)
  • 计算故障时的恢复行为(Nav2 Recoveries)
  • 跟随一系列的路径点(Nav2 Waypoint Follwer)
  • 管理服务器的生命周期(Nav2生命周期管理器)
  • 通过插件自定义算法和行为(Nav2 Core)
  • Nav 2还提供了一组启动插件来进行机器人导航。NavFn使用A *或Dijkstra算法计算从一个姿态到目标姿态的最短路径。DWB将使用DWA算法来计算沿着一条路径的控制工作,并带有自己的一些用于轨迹批评的插件。恢复行为包括:等待、旋转、清理cost map和备份。有一组BT插件可以调用这些服务器和计算条件。最后,还有一组Rviz插件用于与堆栈交互和控制生命周期。所有插件列表可以在 导航插件 中找到。

    如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习。
    都看到这了,点个推荐再走吧~
    未经允许,禁止转载。