Dashing 迁移指南
从 ROS 2 Dashing 迁移到 Eloquent 时,新增了大量稳定性改进,此处不一一赘述。
新包(New Packages)
Section titled “新包(New Packages)”Navigation2 现在包含一个新包 nav2_waypoint_follower。
航点跟随器(waypoint follower)是一个动作服务器(action server),它接收一个航点列表并依次跟随。
参数 stop_on_failure 用于决定:当单个航点跟随失败时,机器人是继续前往下一个航点,还是向动作客户端返回失败。
航点跟随器同时也是一个参考示例,展示了如何利用 Navigation2 动作服务器完成基本的自主任务。
Navigation2 现在支持用于控制和 SLAM 的新算法。 新增了 Timed-Elastic Band(TEB)控制器,详见此处。 它是一个独立的控制器插件,可用于替代 DWB 控制器。 Nav2 还支持将 SLAM Toolbox 作为 ROS 2 的默认 SLAM 实现,取代了此前的 Cartographer。
新插件(New Plugins)
Section titled “新插件(New Plugins)”Eloquent 将 pluginlib 插件重新引入了导航栈。
nav2_core 定义了用于实现控制器(controller)、规划器(planner)、恢复(recovery)和目标检查器(goal checker)插件的插件头文件接口。
所有算法(NavFn、DWB、各类恢复行为)均以插件接口的形式集成,并为各服务器创建了通用包。
nav2_planner 是负责规划的动作服务器,托管一个规划器插件。
nav2_controller 是负责控制的动作服务器,托管一个控制器插件。
nav2_recovery 是负责恢复的动作服务器,托管一个恢复插件。
新增了 backup(后退)恢复插件:它接收一个后退距离参数,在确认路径无碰撞风险后向后移动。 此外还添加了 wait(等待)恢复插件,它会在再次尝试导航前等待一段可配置的时间。 该插件对于随时间变化的障碍物特别有用,也可以暂停导航,等待环境恢复稳定。
新增了许多行为树(behavior tree)节点,这些节点目前硬编码在行为树引擎中。 BehaviorTree.CPP v3 已支持插件机制,相关转换将在下一个版本中完成。
Navigation2 架构变更(Architectural Changes)
Section titled “Navigation2 架构变更(Architectural Changes)”nav2_world_model 包已被移除。nav2_planner 和 nav2_controller 服务器现在各自托管与自身相关的代价地图(costmap)。
这样做是为了减少网络流量,并确保系统的安全关键组件能够获得最新信息。
如上所述,导航栈引入了插件机制,这些服务器各自托管用于导航、控制和代价地图图层的插件。
地图服务器(map server)经过了大幅重构,但外部 API 保持不变。它现在使用 SDL 库来加载图像。
现在导航栈中所有位姿估计都基于 TF 定位。
此前,导航栈的某些组件只能从不定期发布的 /amcl_pose 话题更新其位姿。
这显然存在精度低、延迟高的问题。
现在所有定位都基于从全局坐标系(global frame)到机器人坐标系(robot frame)的 TF 树。
在 Eloquent 之前,没有可用的 ROS 2 action server 和 action client。 Navigation2 转而使用了一种我们称之为 Tasks 的接口。 Eloquent 现在引入了 actions,并创建了一个简单的 action server 接口,该接口现已应用于整个导航栈。 Tasks 接口已被移除。