SLAM_NAV导航与避障

1、Navigation2简介

Navigation2整体架构图

image-20240126110308679

Navigation2具有下列工具:

Navigation 2(Nav 2)是ROS 2中自带的导航框架,其目的是能够通过一种安全的方式使移动机器人从A点移动到B点。所以,Nav 2可以完成动态路径规划、计算电机速度、避开障碍物和恢复结构等行为。

Nav 2使用行为树(BT,Behavior Trees)调用模块化服务器来完成一个动作。动作可以是计算路径、控制工作(control efforts)、恢复或其他与导航相关的动作。这些动作都是通过动作服务器与行为树(BT)进行通信的独立节点。

资料参考网址:

Navigation2 文档:https://navigation.ros.org/index.html

Navigation2 github:https://github.com/ros-planning/navigation2

Navigation2 对应的论文:https://arxiv.org/pdf/2003.00368.pdf

Navigation2提供的插件:https://navigation.ros.org/plugins/index.html#plugins

2、程序功能说明

小车连接上代理,运行程序,rviz中会加载地图。在rviz界面中,用【2D Pose Estimate】工具给定小车初始位姿,然后用【2D Goal Pose】工具给定小车一个目标点。小车结合自身环境,会规划出一条路径并且根据规划的路径移动到目的地,期间如果遇到障碍物,会自助避障,到达目的地后停车。

3、查询小车信息

3.1、启动并连接代理

RISC-V小车成功开机后,需要临时关闭掉自启动程序防止冲突(详情查看《0.开机自启动和临时关闭》),打开终端输入以下指令打开代理,连接成功如下图所示,

image-20240507165339617

注:如果卡在前面两条log,可以按一下小车上的复位按键,这是因为第二次连代理需要重置一下。

3、启动程序

首先启动小车处理底层数据程序,终端输入,

image-20240507185534062

输入指令启动rviz可视化建图

image-20240507185649617

此时还没有显示地图加载,因为还没有启动导航的程序,所以没有地图加载。接下来运行导航节点,终端输入,

image-20240508115946064

此时可以看到地图加载进去了,如果雷达点云和地图没有重合,我们点击【2D Pose Estimate】,给小车设置初始位姿,根据小车在实际环境中的位置,在rviz中用鼠标点击拖动,小车模型移动我们设置的位置。如下图所示,雷达扫描的区域与实际障碍物大致重合则表示位姿准确。

image-20240508120131210

单点导航,点击【2D Goal Pose】工具,然后在rviz中选择一个目标点,小车结合周围的情况,规划出一条路径并且沿着路径移动到目标点。

image-20240508120251255

多点导航,需要把nav2的插件添加进来,

image-20240508120423240

添加后,rviz显示如下,

image-20240508120447711

然后点击【Waypoint/Nav Through Poses Mode】,

image-20240508120519666

使用rivz工具栏中的【Nav2 Goal】给定任意的目标点 ,然后点击【Start Waypoint Following】开始规划路径导航。小车会根据选的点的先后顺序,到了目标点后会自动前往下一个点,无需进行操作。达到最后一个点后,小车停车等待下一个指令。

image-20240508121036748

5、查看节点通讯图

终端输入,

如果一开始没有显示,选择【Nodes/Topics(all)】,然后点击左上角的刷新按钮。

6、查看TF树

终端输入,

image-20240508121252344

运行完毕后,会在终端的目录下生成两个文件分别是.gv和.pdf文件,其中的pdf文件就是TF树。

image-20240126111739617

7、代码解析

这里只说明导航的navigation_dwb_launch.py,这个文件路径是,

navigation_dwb_launch.py,

这里启动了以下几个节点:

另外还加载了一个导航参数配置文件dwb_nav_params.yaml和加载地图文件yahboom_map.yaml,导航参数表的位于,

地图文件位于,

dwb_nav_params.yaml,

该参数表配置了导航launch文件中,启动的每个节点需要的参数。