# 10.8 为FishBot配置Nav2 安装好了Nav2,我们开始针对我们的fishbot改变一些参数进行导航相关的参数配置。Nav2可配置的参数比起Cartographer更多,但是不要害怕,因为大多数参数我们可能不会改变。 > 有关Nav2的更多参数介绍和详细的配置意义,可以参考**Nav2中文网配置指南**一节。 本节主要准备两个文件给launch节点使用,第一个是地图文件,第二个是nav2参数文件。 ## 1.创建fishbot_navigation2 ### 1.1创建功能包 和前面在Cartographer中一样,我们需要创建一个文件夹放置配置文件、launch文件、rviz配置和地图等。 进入到src目录下,使用下面指令创建功能包: ```shell ros2 pkg create fishbot_navigation2 --dependencies nav2_bringup ``` 这里我们添加了一个依赖`nav2_bringup`,后面写launch文件要用到,这里提前添加一下依赖。 创建完成后的目录结构: ``` . ├── CMakeLists.txt ├── include │ └── fishbot_navigation2 ├── package.xml └── src 3 directories, 2 files ``` ### 1.2 添加maps文件夹 ``` cd src/fishbot_navigation2 mkdir launch config maps param rviz ``` ### 1.3 复制地图文件 将上一节的地图文件复制到map文件夹下。 复制完成后`fishbot_navigation2`的文件结构如下 ``` . ├── CMakeLists.txt ├── config ├── launch ├── maps │ ├── fishbot_map.png │ ├── fishbot_map.pgm │ ├── fishbot_map.yaml ├── package.xml ├── param └── rviz 5 directories, 5 files ``` ## 2.添加Nav2配置文件 ### 2.1 创建参数文件 我们需要配置的文件是Nav2的参数文件,同样的,贴心的Nav2已经为我们准备好了参数模板 ``` src/navigation2/nav2_bringup/bringup/params/nav2_params.yaml ``` 在`src/fishbot_navigation2/param/`目录下创建`fishbot_nav2.yaml` ```shell cd src/fishbot_navigation2/param/ touch fishbot_nav2.yaml ``` ### 2.2 复制参数 然后将`src/navigation2/nav2_bringup/bringup/params/nav2_params.yaml`的内容复制粘贴到`fishbot_nav2.yaml`文件中。 > **参数文件中的参数是谁的?** > > 在[5.1.4章节保存参数](chapt5/5.1ROS2参数介绍?id=_4体验参数)中,我们曾用`ros2 param dump `指令将某个节点的参数保存为一个`.yaml`格式的文件。`fishbot_nav2.yaml`文件就是保存Nav2相关节点参数的文件。 ## 3. 配置参数 其实参数不配置也是可以将Nav2跑起来的,但是后期想要更改运行的效果就需要对参数进行修改,所以有必要大概了解下参数的配置项和含义查询方法和修改方法。 ### 3.1 参数列表 | 编号 | 配置项 | 用途 |对应模块与参数详解 | | ----| ---------------------- | ------------ | --------------------------- | | 1 | amcl| 机器人定位 | [nav2_amcl](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-amcl.html) | | 2| bt_navigator| 导航行为树(用于加载行为树节点并根据xml配置进行调度) | [nav2_bt_navigator](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-bt-navigator.html),[nav2_behavior_tree](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-bt-xml.html) | | 3| controller_server| 控制器服务器 | [nav2_controller](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-controller-server.html),[nav2_dwb_controller](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-dwb-controller.html),[nav2_regulated_pure_pursuit_controller](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-regulated-pp.html) | | 4 | planner_server| 规划服务器 | [nav2_planner](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-planner-server.html),[nav2_navfn_planner](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-navfn.html),[smac_planner](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-smac-planner.html) | | 5 | recoveries_server| 恢复服务器 | [nav2_recoveries](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-recovery-server.html) | | 6 | local_costmap| 局部代价地图 | [nav2_costmap_2d](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-costmaps.html),[static_layer](http://dev.nav2.fishros.com/doc/configuration/packages/costmap-plugins/static.html),[inflation_layer](http://dev.nav2.fishros.com/doc/configuration/packages/costmap-plugins/inflation.html) | | 7 | global_costmap| 全局代价地图 | [nav2_costmap_2d](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-costmaps.html),[nav2_map_server](http://dev.nav2.fishros.com/doc/configuration/packages/configuring-map-server.html) | 有关更多的Nav2所有参数的详细介绍,可以访问Nav2中文网中的配置指南章节,非常的详细,无比的具体。 ![](10.8%E4%B8%BAFishbot%E9%85%8D%E7%BD%AENav2/imgs/image-20220517203105467.png) ### 3.2 配置机器人半径和碰撞半径 在全局代价地图和局部代价地图配置用,默认的机器人半径是0.22,而我们fishbot的半径是0.12,所以需要修改机器人的半径为0.12。 ```yaml local_costmap: local_costmap: ros__parameters: robot_radius: 0.12 global_costmap: global_costmap: ros__parameters: robot_radius: 0.12 ``` 为了防止机器人发生碰撞,一般我们会给代价地图添加一个碰撞层(inflation_layer),在`local_costmap`和`global_costmap`配置中,你可以看到下面关于代价地图相关的配置: ```yaml global_costmap: global_costmap: ros__parameters: plugins: ["static_layer", "obstacle_layer", "inflation_layer"] inflation_layer: plugin: "nav2_costmap_2d::InflationLayer" cost_scaling_factor: 3.0 inflation_radius: 0.55 ``` 打开参数配置中的[inflation_layer](http://dev.nav2.fishros.com/doc/configuration/packages/costmap-plugins/inflation.html),我们来看看其配置项和含义。 此处截图 可以看到`inflation_radius`默认0.55对fishbot来说可能有些大了,我们改小些。 ``` global_costmap: global_costmap: ros__parameters: plugins: ["static_layer", "obstacle_layer", "inflation_layer"] inflation_layer: plugin: "nav2_costmap_2d::InflationLayer" cost_scaling_factor: 3.0 inflation_radius: 0.35 ``` **以上就是以代价地图碰撞半径为例的配置方法,nav2可以配置的参数非常多,假如你在导航过程中遇到问题,根据问题的表现推断下是哪个模块中造成的,接着修改其对应参数,大概率就可以解决问题,解决不了的可以看源码详细分析。** ### 3.3 配置frame_id和话题 这里也不用配置,因为我们的fishbot话题名称和tf名称都是遵循着默认的话题的。 如果你的机器人不是,或者你改变了话题,这里就需要重新配置。 - 默认全局的坐标系:map - 默认里程计坐标系:odom - 默认雷达话题:scan - 默认机器人基坐标系:base_link - 默认地图话题:map ## 4. 总结 本节我们简单的了解了Nav2各个模块参数的配置方法和参数的介绍,下一节就开始编写文件正式建图。 -------------- 技术交流&&问题求助: - **微信公众号及交流群:鱼香ROS** - **小鱼微信:AiIotRobot** - **QQ交流群:139707339** - 版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划