Navigation2整体架构

注意:下面的解释说明是以Navigation2 v1.0.12来进行的。其对应的ROS2版本为Galactic

image-20220619212218877

Nav2具有下列工具:

● 加载、提供和存储地图的工具(地图服务器Map Server)

● 在地图上定位机器人的工具 (AMCL)

● 避开障碍物从A点移动到B点的路径规划工具(Nav2 Planner)

● 跟随路径过程中控制机器人的工具(Nav2 Controller)

● 将传感器数据转换为机器人世界中的成本地图表达的工具(Nav2 Costmap 2D)

● 使用行为树构建复杂机器人行为的工具(Nav2 行为树和BT Navigator)

● 发生故障时计算恢复行为的工具(Nav2 Recoveries)

● 跟随顺序航点的工具(Nav2 Waypoint Follower)

● 管理服务器生命周期的工具和看门狗(Nav2 Lifecycle Manager)

● 启用用户自定义算法和行为的插件(Nav2 Core)

Navigation2相比较与Navigation1有了较大的变化。而其中最为显著的变化则是使用行为树来组合各个功能模块,以实现搭乐高积木的开发效果。

Navigation1中的导航功能的实现是流水线式的,主要由move_base来组合各个模块的功能。在move_base中实现了一个状态机,全局路径规划器和局部路径规划器都是以插件的形式在相应的状态中被调用的。一个到点导航的流程是,先在一个状态里调用全局路径规划器,然后进入到另外一个状态传路径给局部路径规划器,并使其执行该路径。

Navigation2中,各个功能的组织则有所不同。全局路径规划功能由各个全局路径规划的插件实现,这些插件被加载到Planer Server中。可以通过相应的actionPlaner Server请求全局规划的路径。

同理,局部路径规划器也是以插件的形式实现的。它们有统一的接口,可以被加载到Controller Server中。当需要执行某条路径的时候,只需要通过相应的action将要执行的路径发送给Controller Server即可。

聪明的你,应该也想到了。Recovery Server也是以相同的逻辑来工作的。

Planer ServerController ServerRecovery Server分别实现了各自的功能,即全局路径规划,局部路径规划和恢复操作。但它们的功能是独立的,互不干扰的。而要实现一个完整的导航功能需要各个模块的配合。BT Navigator Server就是那个组装乐高积木的人。

每一个功能就是一颗行为树。这颗树上的节点将与Planer ServerController ServerRecovery Server通信,把各个server的功能组合起来。比如单点导航功能,行为树上的相应节点会向Planer Server 请求一条规划到目标点的路径。然后另一个树上的节点与Controller Server通信,将规划好的路径发给Controller Server去执行。当然这里只是简单说明一下流程,实际使用时可以组合更多的功能。

BT Navigator Server中实现了单点导航的功能,便可顺理成章的实现多点导航。Waypoint Follower通过连续向BT Navigator Server请求单点导航功能即可实现多点导航。当之前请求的单点导航完成后,再发送下一个单点导航请求。直到所有的点都已下发。

上面框图外围的mapSensor DataTf则是共有数据。各个功能模块都可以获取到,按需取用即可。

Navigation2初体验

  1. 安装Navigation2

可以参考我之前的文章来操作。

https://shoufei.blog.csdn.net/article/details/124394203

  1. 启动gazebo
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
  1. 启动导航
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True

Navigation2相关介绍材料

官方文档:

https://navigation.ros.org/getting_started/index.html

Navigation2官方github:

其中的issue讨论挺值得看的

https://github.com/ros-planning/navigation2

Navigation2 对应的论文:

https://arxiv.org/pdf/2003.00368.pdf

Navigation 2系列教程:

https://zhuanlan.zhihu.com/p/384099348

目前Navigation2提供的插件:

https://navigation.ros.org/plugins/index.html#plugins


觉得有用就点赞吧!

我是首飞,一个帮大家填坑的机器人开发攻城狮。

另外在公众号《首飞》内回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2等机器人行业常用技术资料。

公众号