ROS Navigation-----navfn简介

本文详细介绍了navfn规划器的功能及使用方法。navfn适用于圆形机器人的导航规划,支持Dijkstra和A*算法,可在ROS环境中使用。文章还列举了navfn的相关参数设置及其作用。

   navfn规划器假定机器人是圆形,并会在起点到终点之间寻找代价最小的规划。它的导航功能支持了Dijkstra和A*算法。此外,navfn也提供了ROS封装接口供调用,也继承了接口nav_core::BaseGlobalPlanner

1 概述

    本package实现了快速内插值导航功能,使用navfn::NavFn 类给机器人底座创建导航规划。navfn::NavfnROS对象是navfn::NavFn类的ROS封装,其继承了nav_core包中接口nav_core::BaseGlobalPlannernavfn::NavfnROS 对象在move_base中被作为全局规划器插件使用。

  navfn::NavfnROSnavfn::NavFn的ROS封装,导出了可用的ROS接口,可以在初始化时指定的ROS命名空间使用,继承了nav_core::BaseGlobalPlanner接口。


下面是创建navfn::NavfnROS 对象的一个例子:

#include <tf/transform_listener.h>
#include <costmap_2d/costmap_2d_ros.h>
#include <navfn/navfn_ros.h>

...

tf::TransformListener tf(ros::Duration(10));
costmap_2d::Costmap2DROS costmap("my_costmap", tf);

navfn::NavfnROS navfn;
navfn.initialize("my_navfn_planner", &costmap);

2.1 API Stability

  • The ROS API is stable
  • The C++ API is stable

2.2 ROS API

2.2.1 Published Topics
~<name>/plan ( nav_msgs/Path)
  • 通过navfn计算的上一个最新规划, 规划器每次都会计算一条新路径并发布。
2.2.2 Parameters
~<name>/allow_unknown ( bool, default: true)
  • 指定是否允许navfn在unknown空间创建规划。 NOTE: if you are using a layered costmap_2d costmap witha voxel or obstacle layer, you must also set the track_unknown_space param for that layer to be true, or it will convert all your unknown space to free space (which navfn will then happily go right through).
~<name>/planner_window_x ( double, default: 0.0)
  • 指定可选窗口的x大小以限定规划器工作空间。This can be useful for restricting NavFn to work in a small window of a large costmap.
~<name>/planner_window_y ( double, default: 0.0)
  • 指定可选窗口的y大小以限定规划器工作空间。 This can be useful for restricting NavFn to work in a small window of a large costmap.
~<name>/default_tolerance ( double, default: 0.0)
  • 定义规划器目标点公差范围。 NavFn will attempt to create a plan that is as close to the specified goal as possible but no further thandefault_tolerance away. New in navigation 1.3.0
~<name>/visualize_potential ( bool, default: false)
  • 指定是否对navfn通过PointCloud2计算的potential区域可视化。 New in navigation 1.3.1

2.3 C++ API

  navfn::NavfnROS继承了nav_core::BaseGlobalPlanner,细节请看 NavfnROS C++ Documentation

  navfn::NavFn 额提供了上述导航功能,且可以免费使用,但是请记住我们不保证其API是稳定的。

3.1 API Stability

  • C++ API不稳定. It is subject to change at any time.

3.2 C++ API

  •  navfn::NavFn类的C++ API请参考: NavFn Documentation. 此外,请记住C++ API不保证是稳定的

4 Reference

Rationale of Dijkstra being used in navfn instead of A*



shr@ubuntu:~$ sudo apt install ros-noetic-navigation 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 将会同时安装下列软件: ros-noetic-amcl ros-noetic-base-local-planner ros-noetic-carrot-planner ros-noetic-clear-costmap-recovery ros-noetic-costmap-2d ros-noetic-dwa-local-planner ros-noetic-fake-localization ros-noetic-global-planner ros-noetic-move-base ros-noetic-move-base-msgs ros-noetic-move-slow-and-clear ros-noetic-nav-core ros-noetic-navfn ros-noetic-rotate-recovery ros-noetic-voxel-grid 下列【新】软件包将被安装: ros-noetic-amcl ros-noetic-base-local-planner ros-noetic-carrot-planner ros-noetic-clear-costmap-recovery ros-noetic-costmap-2d ros-noetic-dwa-local-planner ros-noetic-fake-localization ros-noetic-global-planner ros-noetic-move-base ros-noetic-move-base-msgs ros-noetic-move-slow-and-clear ros-noetic-nav-core ros-noetic-navfn ros-noetic-navigation ros-noetic-rotate-recovery ros-noetic-voxel-grid 升级了 0 个软件包,新安装了 16 个软件包,要卸载 0 个软件包,有 64 个软件包未被升级。 需要下载 1,931 kB 的归档。 解压缩后会消耗 9,841 kB 的额外空间。 您希望继续执行吗? [Y/n] y 获取:1 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-amcl amd64 1.17.3-1focal.20250521.001518 [268 kB] 获取:2 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-voxel-grid amd64 1.17.3-1focal.20250519.231756 [16.7 kB] 获取:3 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-costmap-2d amd64 1.17.3-1focal.20250521.001646 [449 kB] 获取:4 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-nav-core amd64 1.17.3-1focal.20250521.004844 [8,784 B] 获取:5 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-base-local-planner amd64 1.17.3-1focal.20250521.005206 [243 kB] 获取:6 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-carrot-planner amd64 1.17.3-1focal.20250521.010103 [35.6 kB] 获取:7 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-clear-costmap-recovery amd64 1.17.3-1focal.20250521.005210 [42.4 kB] 获取:8 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-dwa-local-planner amd64 1.17.3-1focal.20250521.005823 [123 kB] 获取:9 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-fake-localization amd64 1.17.3-1focal.20250520.001758 [104 kB] 获取:10 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-navfn amd64 1.17.3-1focal.20250521.005304 [122 kB] 获取:11 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-global-planner amd64 1.17.3-1focal.20250521.005728 [145 kB] 获取:12 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-move-base-msgs amd64 1.14.2-1focal.20250516.000952 [32.9 kB] 获取:13 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-rotate-recovery amd64 1.17.3-1focal.20250521.010109 [39.4 kB] 获取:14 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-move-base amd64 1.17.3-1focal.20250521.010519 [249 kB] 获取:15 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-move-slow-and-clear amd64 1.17.3-1focal.20250521.005242 [49.3 kB] 获取:16 http://packages.ros.org/ros/ubuntu focal/main amd64 ros-noetic-navigation amd64 1.17.3-1focal.20250521.011054 [3,064 B] 已下载 1,931 kB,耗时 50秒 (38.6 kB/s) 正在选中未选择的软件包 ros-noetic-amcl。 (正在读取数据库 ... 系统当前共安装有 250290 个文件和目录。) 准备解压 .../00-ros-noetic-amcl_1.17.3-1focal.20250521.001518_amd64.deb ... 正在解压 ros-noetic-amcl (1.17.3-1focal.20250521.001518) ... 正在选中未选择的软件包 ros-noetic-voxel-grid。 准备解压 .../01-ros-noetic-voxel-grid_1.17.3-1focal.20250519.231756_amd64.deb . .. 正在解压 ros-noetic-voxel-grid (1.17.3-1focal.20250519.231756) ... 正在选中未选择的软件包 ros-noetic-costmap-2d。 准备解压 .../02-ros-noetic-costmap-2d_1.17.3-1focal.20250521.001646_amd64.deb . .. 正在解压 ros-noetic-costmap-2d (1.17.3-1focal.20250521.001646) ... 正在选中未选择的软件包 ros-noetic-nav-core。 准备解压 .../03-ros-noetic-nav-core_1.17.3-1focal.20250521.004844_amd64.deb ... 正在解压 ros-noetic-nav-core (1.17.3-1focal.20250521.004844) ... 正在选中未选择的软件包 ros-noetic-base-local-planner。 准备解压 .../04-ros-noetic-base-local-planner_1.17.3-1focal.20250521.005206_amd6 4.deb ... 正在解压 ros-noetic-base-local-planner (1.17.3-1focal.20250521.005206) ... 正在选中未选择的软件包 ros-noetic-carrot-planner。 准备解压 .../05-ros-noetic-carrot-planner_1.17.3-1focal.20250521.010103_amd64.de b ... 正在解压 ros-noetic-carrot-planner (1.17.3-1focal.20250521.010103) ... 正在选中未选择的软件包 ros-noetic-clear-costmap-recovery。 准备解压 .../06-ros-noetic-clear-costmap-recovery_1.17.3-1focal.20250521.005210_ amd64.deb ... 正在解压 ros-noetic-clear-costmap-recovery (1.17.3-1focal.20250521.005210) ... 正在选中未选择的软件包 ros-noetic-dwa-local-planner。 准备解压 .../07-ros-noetic-dwa-local-planner_1.17.3-1focal.20250521.005823_amd64 .deb ... 正在解压 ros-noetic-dwa-local-planner (1.17.3-1focal.20250521.005823) ... 正在选中未选择的软件包 ros-noetic-fake-localization。 准备解压 .../08-ros-noetic-fake-localization_1.17.3-1focal.20250520.001758_amd64 .deb ... 正在解压 ros-noetic-fake-localization (1.17.3-1focal.20250520.001758) ... 正在选中未选择的软件包 ros-noetic-navfn。 准备解压 .../09-ros-noetic-navfn_1.17.3-1focal.20250521.005304_amd64.deb ... 正在解压 ros-noetic-navfn (1.17.3-1focal.20250521.005304) ... 正在选中未选择的软件包 ros-noetic-global-planner。 准备解压 .../10-ros-noetic-global-planner_1.17.3-1focal.20250521.005728_amd64.de b ... 正在解压 ros-noetic-global-planner (1.17.3-1focal.20250521.005728) ... 正在选中未选择的软件包 ros-noetic-move-base-msgs。 准备解压 .../11-ros-noetic-move-base-msgs_1.14.2-1focal.20250516.000952_amd64.de b ... 正在解压 ros-noetic-move-base-msgs (1.14.2-1focal.20250516.000952) ... 正在选中未选择的软件包 ros-noetic-rotate-recovery。 准备解压 .../12-ros-noetic-rotate-recovery_1.17.3-1focal.20250521.010109_amd64.d eb ... 正在解压 ros-noetic-rotate-recovery (1.17.3-1focal.20250521.010109) ... 正在选中未选择的软件包 ros-noetic-move-base。 准备解压 .../13-ros-noetic-move-base_1.17.3-1focal.20250521.010519_amd64.deb .. . 正在解压 ros-noetic-move-base (1.17.3-1focal.20250521.010519) ... 正在选中未选择的软件包 ros-noetic-move-slow-and-clear。 准备解压 .../14-ros-noetic-move-slow-and-clear_1.17.3-1focal.20250521.005242_amd 64.deb ... 正在解压 ros-noetic-move-slow-and-clear (1.17.3-1focal.20250521.005242) ... 正在选中未选择的软件包 ros-noetic-navigation。 准备解压 .../15-ros-noetic-navigation_1.17.3-1focal.20250521.011054_amd64.deb . .. 正在解压 ros-noetic-navigation (1.17.3-1focal.20250521.011054) ... 正在设置 ros-noetic-amcl (1.17.3-1focal.20250521.001518) ... 正在设置 ros-noetic-voxel-grid (1.17.3-1focal.20250519.231756) ... 正在设置 ros-noetic-move-base-msgs (1.14.2-1focal.20250516.000952) ... 正在设置 ros-noetic-costmap-2d (1.17.3-1focal.20250521.001646) ... 正在设置 ros-noetic-fake-localization (1.17.3-1focal.20250520.001758) ... 正在设置 ros-noetic-nav-core (1.17.3-1focal.20250521.004844) ... 正在设置 ros-noetic-clear-costmap-recovery (1.17.3-1focal.20250521.005210) ... 正在设置 ros-noetic-move-slow-and-clear (1.17.3-1focal.20250521.005242) ... 正在设置 ros-noetic-rotate-recovery (1.17.3-1focal.20250521.010109) ... 正在设置 ros-noetic-navfn (1.17.3-1focal.20250521.005304) ... 正在设置 ros-noetic-base-local-planner (1.17.3-1focal.20250521.005206) ... 正在设置 ros-noetic-carrot-planner (1.17.3-1focal.20250521.010103) ... 正在设置 ros-noetic-move-base (1.17.3-1focal.20250521.010519) ... 正在设置 ros-noetic-global-planner (1.17.3-1focal.20250521.005728) ... 正在设置 ros-noetic-dwa-local-planner (1.17.3-1focal.20250521.005823) ... 正在设置 ros-noetic-navigation (1.17.3-1focal.20250521.011054) ... shr@ubuntu:~$ rospack find gmapping /opt/ros/noetic/share/gmapping shr@ubuntu:~$ rospack find map_server /opt/ros/noetic/share/map_server shr@ubuntu:~$ rospack find navigation [rospack] Error: package 'navigation' not found shr@ubuntu:~$ rospack find navigation [rospack] Error: package 'navigation' not found shr@ubuntu:~$
07-29
ROS 2中,`planner_server` 是 Navigation Stack 的核心组件之一,支持通过插件机制配置多个规划器。如果需要同时使用 `ZigzagPlanner` 和 `GridBased` 规划器,可以通过修改参数文件(如 `custom_nav_params.yaml`)来实现多规划器的加载和切换。 ### 配置多规划器插件 在参数文件中,`planner_server` 的插件列表 `planner_plugins` 可以包含多个规划器名称,并为每个规划器指定对应的插件类。例如,将 `ZigzagPlanner` 和 `GridBased` 同时配置到 `planner_server` 中: ```yaml planner_server: ros__parameters: planner_plugins: ["ZigzagPlanner", "GridBased"] ZigzagPlanner: plugin: "custom_nav_planners/ZigzagPlanner" GridBased: plugin: "custom_nav_planners/GridBased" ``` 上述配置定义了两个全局规划器插件:`ZigzagPlanner` 和 `GridBased`,并分别指定了它们的类路径[^1]。 ### 插件注册与加载 为了确保这些插件能够被正确加载,必须保证以下几点: - **插件描述文件**:每个插件都需要一个 `.xml` 文件来声明其类名、库路径及基类类型。例如,`zigzag_plugin_description.xml` 应该如下所示: ```xml <library path="lib/libzigzag_plugin"> <class name="navigation_plugins/ZigzagPlanner" type="nav_core::BaseGlobalPlanner" base_class_type="nav_core::BaseGlobalPlanner"> <description> A global planner that generates a zigzag path for coverage tasks. </description> </class> </library> ``` - **package.xml 更新**:在 `package.xml` 中添加导出信息,确保 ROS 2 能够找到插件描述文件: ```xml <export> <nav_core_base_global_planner plugin="${prefix}/zigzag_plugin_description.xml"/> </export> ``` - **编译插件库**:确保插件库已正确编译,并存在于 `install` 或 `build` 目录中。 - **运行参数文件**:启动 `planner_server` 时,通过 `--ros-args --params-file` 指定参数文件路径,例如: ```bash ros2 run nav2_planner planner_server --ros-args --params-file ~/custom_nav_params.yaml ``` ### 动态切换规划器 在运行时,可以使用 `planner_selector` 工具或服务调用来动态切换当前使用的规划器。例如,切换到 `ZigzagPlanner`: ```bash ros2 service call /planner_server/select_planner std_srvs/srv/Trigger {} ``` 随后在响应中会返回当前激活的规划器名称。这种方式允许根据任务需求灵活选择不同类型的路径规划策略。 ### 示例代码片段 以下是完整的 `custom_nav_params.yaml` 参数文件示例: ```yaml planner_server: ros__parameters: planner_plugins: ["ZigzagPlanner", "GridBased"] ZigzagPlanner: plugin: "custom_nav_planners/ZigzagPlanner" GridBased: plugin: "custom_nav_planners/GridBased" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值