1、简介
在ROS2中自动导航使用Nav2来实现。
Nav2 使用几个独立的模块化服务,通过 ROS 2接口(例如动作服务器或服务)与行为树 (BT) 通信。
Nav2 输入包括:TF转换、一个地图源、一个行为树 (BT) XML 文件和相关的传感器数据源;
Nav2 输出速度命令;
Nav2 支持多种机器人,比如:四足机器人、履带机器人、轮式机器人等
2、概念
1)动作服务器(Action Server):由话题和服务协作完成,例如:开始执行动作、动作是否响应、传输执行动作时的过程数据、动作完成反馈等。
2)生命周期节点(Lifecycle Nodes):管理ROS2系统中的节点生命周期,比如节点的启动、未激活、激活、关闭等行为
3)行为树(BT,Behavior Trees):创建了一个更具可扩展性和人类可理解的框架,用于定义多步骤或多状态应用程序,构建复杂的机器人行为
4)Planner:路径规划,比如,最短路径、路径全覆盖、预定义路径
5)Controller:控制,ROS1中称为本地规划,比如,解决动态障碍物的情况
6)Smoother:平滑器,减少不规则路径,比如突然旋转等情况
7)Recovery:恢复,当机器人遇到复杂障碍物或者控制算法有bug时,导致机器人卡住不动,可以执行原地倒退或旋转等操作,来恢复自主导航;实在不行,给操作者发求救信息
8)Waypoint Following:航点跟随,即导航到达多个目的地
9)REP-105:一个标准,定义机器人导航所需的位置、姿态的框架和约定,比如至少需要的功能包:map -> odom -> base_link -> [sensor frames]
10)Odometry:里程计,里程计使用激光雷达、雷达、车轮编码器、VIO 或 IMU等信息,为机器人提供局部坐标系
11)Global Positioning:全球定位,包括GPS、SLAM等,提供全局坐标,并解决里程计的漂移
12)Costmap:代价地图,用相机或深度传感器检测和跟踪场景中的障碍物,避免碰撞
13)Costmap Filters:代价地图过滤器,使机器人不会进入禁区、限制机器人速度、使机器人进入首选通道等
3、Navigation和Nav2的区别
3.1 升级包
Navigation | Nav2 |
---|---|
amcl | nav2_amcl |
map_server | nav2_map_server |
global_planner | nav2_planner |
local_planner | nav2_controller |
Navfn | nav2_navfn_planner |
DWA | DWB(av2_dwb_controller metapackage) |
nav_core | nav2_core |
costmap_2d | nav2_costmap_2d |
3.2 Nav2新增加的包
nav2_bt_navigator: 替换move_base状态机
nav2_lifecycle_manager: 处理服务器程序生命周期
nav2_waypoint_follower: 可以通过接收多个航点来执行复杂的任务
nav2_system_tests: 一套CI集成测试和模拟基础教程
nav2_rviz_plugins: 一个 rviz 插件,用于控制 Navigation2 服务器、命令、取消和导航
navigation2_behavior_trees:用于调用 ROS 动作服务器的行为树库的包装器
4、Nav2框架
5、安装
安装Nav2及示例turtlebot3
注意:本人的环境为ubuntu22.04,需要各位同学根据自己的环境来修改版本号-humble
sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup
sudo apt install ros-humble-turtlebot3-gazebo
6、运行示例
在终端中执行:
source /opt/ros/humble/setup.bash
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models
ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False
注意:参数headless默认为真;如果未设置为 false,则不会启动 gzclient(3d 视图)
启动成功后,会出现如下界面:
点击按钮“2D Pose Estimate”来设置初始姿势
点击按钮“Nav2 goal”来设置运动的目标
设置好目标,就开始自动导航了
7、错误处理
1)如果左下角的按键“Pause、Startup”不能点,Navigation状体为Error,并且在终端报错:
……tf error: Invalid frame ID "odom" passed to canTransform argument target_fra……
可以点击左下角Reset按键来重置RViz
2)如果没有启动,点击“Startup”
8、RViz使用
参见:【ROS】RViz使用详解
下面补充工具栏的几个按钮的说明
Move Camera :移动相机工具。使用此工具可以通过鼠标拖动来移动相机视角,从不同角度查看场景
Select :选择工具。使用此工具可以选择和操作RViz中的对象,如机器人模型、传感器数据等
Focus Camera :调整相机的焦点
Measure :用于测量3D场景中物体的尺寸、距离和角度。
2D Pose Estimate:2D姿态估计工具。使用此工具可以通过在地图上点击来估计机器人的2D姿态,用于定位和导航。
Publish Point :发布点工具。使用此工具可以通过在RViz中点击来发布一个点消息,用于标记感兴趣的位置或目标点。
2D Goal Pose :2D导航目标工具。使用此工具可以通过在地图上点击来设置机器人的2D导航目标,用于路径规划和导航。
Nav2 Goal :用于设置机器人的目标点
Interact :Interact按钮用于启用或禁用交互模式
+ :用于添加工具栏按钮
- :用于删除工具栏按钮
2D Goal Pose和Nav2 Goal按钮都用于设置导航目标点,区别如下:
-
2D Goal Pose按钮:简单的目标设置功能,适用于基本的导航任务,不需要考虑避障和路径规划等复杂问题。
-
Nav2 Goal按钮:是ROS Navigation2软件包中的一个功能,提供了更高级的目标设置选项。
通过这个按钮,用户可以设置更复杂的导航目标,例如指定一个目标点、一个目标姿态或一个目标区域。Nav2 Goal按钮还提供了更多的导航参数设置选项,例如路径规划算法、避障策略等。这个按钮适用于需要更高级导航功能的场景,例如导航到一个特定的姿态或避开障碍物。