一.前言
本节开始我们就来学习一下关于导航的内容。
二.ros2学习
前19小节内容可订阅往期博客
20.Nav2
20.1 Nav2下载安装
这里采用源码安装
这里我把源码放到了~/urdf/src
安装依赖
编译
这里有一个命令--packages-up-to,意思是其所有依赖后再编译该包。具体来说,它告诉 colcon 构建系统在构建指定的软件包及其依赖项时,只构建到哪个软件包为止。
测试是否安装成功
20.2 为FishBot配置Nav2
创建功能包
添加maps文件夹
将上一节的地图文件复制到map文件夹下。
添加Nav2配置文件
在src/fishbot_navigation2/param/
目录下创建fishbot_nav2.yaml
将src/navigation2/nav2_bringup/params/nav2_params.yaml
的内容复制粘贴到fishbot_nav2.yaml
文件中。
配置参数
Nav2中文网配置指南 — Navigation 2 1.0.0 文档
配置机器人半径和碰撞半径
在全局代价地图和局部代价地图配置用,默认的机器人半径是0.22,而fishbot的半径是0.12,所以需要修改机器人的半径为0.12。
为了防止机器人发生碰撞,一般会给代价地图添加一个碰撞层(inflation_layer),在local_costmap
和global_costmap
配置中,可以看到下面关于代价地图相关的配置:
默认0.55对fishbot来说可能有些大了,我们改小些。
配置frame_id和话题
- 默认全局的坐标系:map
- 默认里程计坐标系:odom
- 默认雷达话题:scan
- 默认机器人基坐标系:base_link
- 默认地图话题:map
20.3 使用FishBot进行自主导航
1.编写launch文件
2.安装并添加依赖
修改CMakeLists.txt
添加install指令,将文件拷贝到install目录
添加依赖
编译运行
运行仿真
运行Nav2
启动后正常应该会在RVIZ2和终端看到一个错误,这是因为没有给定初始化位置(告诉机器人它在地图的大概位置)导致的。
通过RVIZ2的工具栏上的 2D Pose Estimate
可以给迷茫的fishbot指明“机生方向”。
点击 2D Pose Estimate
,选中机器人在Gazebo位置差不多的点,初始化完后,左边的Global Status 就正常了。
单点导航
点击RVIZ2工具栏上的 就可以给fishbot安排一个目标点了,点击按钮,到地图上任意一点击鼠标左键,注意不要松开,移动鼠标给定一个方向。
多点(路点)导航
左下角,有一个Nav2的Rviz2小插件,可以进行启动停止和导航模式的切换,点击切换到路点模式。
接着你可以使用工具栏的 按钮,给FishBot指定多个要移动的点,接着点击左下角的启动,就可以看到FishBot依次到达这些目标点。
查看机器人当前在地图中的位置
打开终端,输入指令:
ros2 run tf2_ros tf2_echo map base_link
20.4 使用Nav2导航API进行导航
安装简单命令器:
创建一个nav2_new_features的新包
ros2 pkg create --build-type ament_python nav2_new_features --dependencies rclpy geometry_msgs
在这个包中添加scripts的文件夹并添加名为navigate_to_pose.py的脚本
也可通过命令行控制