鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    [ROS2 基础] Navigation2导航系统

    已定时 已固定 已锁定 已移动
    Nav2
    nav2 navigation2 nav
    1
    1
    6.7k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 首飞Kevin首
      首飞Kevin
      最后由 首飞Kevin 编辑

      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中。可以通过相应的action向Planer Server请求全局规划的路径。

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

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

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

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

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

      上面框图外围的map、Sensor Data和Tf则是共有数据。各个功能模块都可以获取到,按需取用即可。

      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


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

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

      1 条回复 最后回复 回复 引用 0
      • 第一个帖子
        最后一个帖子
      皖ICP备16016415号-7
      Powered by NodeBB | 鱼香ROS