1 Nav2总体架构
头文件+源文件约八万行
安装cloc:sudo apt install cloc
bigdavid@bigdavid-Legion-Y9000P-IRX8:~/Nav2$ cloc .
1137 text files.
1133 unique files.
57 files ignored.
github.com/AlDanial/cloc v 1.90 T=0.58 s (1897.7 files/s, 328859.3 lines/s)
--------------------------------------------------------------------------------
Language files blank comment code
--------------------------------------------------------------------------------
C++ 399 12238 12520 59110
JSON 17 0 0 31059
C/C++ Header 308 5719 17438 20417
Python 73 1614 2085 5460
CMake 83 864 179 3725
XML 86 449 133 3464
YAML 27 99 72 3331
Markdown 52 783 0 2134
CSV 2 0 0 1941
C 9 424 717 1148
CSS 1 169 0 933
Dockerfile 3 83 123 369
SVG 3 12 135 300
Bourne Again Shell 5 31 31 162
Gencat NLS 18 17 0 104
Jupyter Notebook 1 0 82 88
Bourne Shell 6 33 19 72
HTML 1 2 0 34
reStructuredText 1 1 0 6
INI 1 0 0 2
--------------------------------------------------------------------------------
SUM: 1096 22538 33534 133859
--------------------------------------------------------------------------------
Nav2总体架构
BT行为树对下面三个服务器组织和调用
规划服务器:相当于全局规划器(全局路径)
控制服务器:相当于局部规划器(局部跟踪)
恢复服务器:处理系统的未知状况或故障状况并自主处理这些状况
两大代价地图:
(1)Global Costmap
图层:
● Static Map Layer:静态地图层,通常都是SLAM建立完成的静态地图。
● Obstacle Map Layer:障碍地图层,用于动态的记录传感器感知到的障碍物信息。
● Inflation Layer:膨胀层,在以上两层地图上进行膨胀(向外扩张),以避免机器人的外壳会撞上障碍物
(2)Local Costmap
● Obstacle Map Layer:障碍地图层,用于动态的记录传感器感知到的障碍物信息。
● Inflation Layer:膨胀层,在障碍地图层上进行膨胀(向外扩张),以避免机器人的外壳会撞上障碍物。
动作服务器:封装成了行为树的基础节点进行调用
通过动作服务器通信:计算路径规划、控制机器人运动和恢复
生命周期节点和绑定:包含状态机转换的用于加载和卸载ROS2服务器的节点
行为树:待完成任务的树形结构。行为树为定义多步或多状态应用程序创建了一个更具可扩展性和人类可理解性的框架。这与有限状态机 (FSM) 相反,后者可能有几十个状态和数百个状态过渡。
航点跟随:nav2_waypoint_follower
如果需要让机器人前往给定位姿并完成像拍照、捡起盒子或等待用户输入之类的特定任务,这会非常有用。
状态估计:自适应蒙特卡洛定位AMCL
里程计:提供 odom -> base_link
的坐标转换
目标是提供基于机器人运动的平滑和连续的局部坐标系。
通过使用成本地图过滤器可以实现以下功能:
● 机器人永远不会进入的禁区/安全区。
● 限速区,机器人进入这些区域的最大速度将受到限制。
● 机器人在工业环境和仓库中移动的首选通道。
在导航项目中,需要提供两个主要的坐标转换。map 到 odom 的坐标变换由定位系统 (定位,建图,SLAM)提供, odom 到 base_link 的坐标转换由里程计系统提供
map => odom
:AMCL
odom => base_link
:里程计系统使用传感器(例如车轮编码器)发布。
2 Nav2仿真环境搭建与导航测试
本文介绍Nav2的源码安装,虽然比apt install
麻烦,但是可以在Nav2框架里开发自己的代码
2.1 apt安装
sudo apt install ros-humble-nav2-*
2.2 源码安装
安装Turtlebot3
sudo apt install ros-humble-turtlebot3-gazebo
设置环境变量:gedit ~/.bashrc
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models
source ~/.bashrc
把该代码放到nav2/src里
mkdir -p nav2/src
cd nav2/src
git clone https://mirror.ghproxy.com/https://github.com/ros-planning/navigation2.git -b humble
cd ..
colcon build # 可以删掉一些功能包加快编译速度
rosdepc install -r --from-paths src --ignore-src --rosdistro $ROS_DISTRO -y
跑Nav2仿真,九根柱子
source install/setup.bash
ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False # 启动rviz和gazebo,不启动gazebo就把headless:=False去掉 ros2 launch nav2_bringup tb3_simulation_launch.py
2.3 导航测试
一开始机器人并不知道自己在哪里,默认情况下,Nav2
会等待用户提供一个大致的起始位置。查看机器人在Gazebo中的位置,并在地图中找到该位置;在Rviz2中点击2D Pose Estimate
按钮,然后在该位置下方点击地图来设置初始姿态,一旦设置了初始姿态,tf
变换将会完成,Nav2
将会完全激活并运行
接下来,点击Navigation2 Goal
按钮选择一个目的地,将通过一个动作服务器调用BT导航器向目标前进。
补充:ubuntu22.04好用的画图工具
安装:sudo apt install kolourpaint
键盘控制:ros2 run teleop_twist_keyboard teleop_twist_keyboard
q、z调车速
至此,Nav2仿真环境搭建和导航测试讲解完毕