1. Nav2概述与环境准备:Nav2是什么、为什么选择Nav2、ROS2 Humble安装、Nav2源码编译与安装
1.1 Nav2到底是什么?
先说说我个人的理解。Nav2,说白了就是一套让机器人自己认路、自己走的软件框架。你给它一个目标点,它自己规划路径,自己避开障碍物,自己控制电机走过去。
我记得刚入行那会儿,做机器人导航还得自己写A*算法、自己调PID参数,折腾好几个月才能让机器人在实验室里走一圈。现在有了Nav2,这些底层工作基本不用你操心了。
Nav2是ROS2生态下的导航系统,它把定位、路径规划、控制、行为树这些模块都整合在了一起。你想想看,一个机器人要完成导航任务,至少需要知道三件事:
- 我在哪?—— 定位模块(AMCL)负责这个
- 我要去哪?—— 全局规划器帮你算出一条路
- 我怎么走?—— 局部规划器负责实时避障
Nav2把这些模块都封装好了,你只需要配置参数、写写行为树,就能让机器人跑起来。
核心要点:Nav2不是单一的程序,而是一套插件化的框架。每个模块都可以替换,你可以用自己的算法替换默认的规划器,灵活性很高。
1.2 为什么选择Nav2?
这个问题我经常被问到。其实选择Nav2的理由很直接:
- 生产级稳定性——我在项目中遇到过用其他导航方案,跑着跑着就崩了的情况。Nav2经过多年迭代,稳定性确实好很多。
- 行为树驱动——这是Nav2最大的亮点。以前写导航逻辑,if-else嵌套得让人崩溃。行为树把整个导航流程可视化,调试起来方便多了。
- 插件化架构——想换规划器?写个插件就行。想换代价地图?也是插件。这种设计让扩展变得非常容易。
- ROS2原生支持——如果你用ROS2,那Nav2就是最自然的选择。它充分利用了ROS2的分布式特性,支持多机器人、多传感器。
嗯,这里要注意一点:Nav2的学习曲线确实有点陡。我第一次看它的源码时,也被那些复杂的参数搞晕过。但一旦你理解了它的设计思路,后面就顺了。
1.3 ROS2 Humble安装
开始之前,先确认你的系统。我个人推荐Ubuntu 22.04 + ROS2 Humble,这个组合最稳定。
安装步骤其实很简单,我直接贴命令:
# 设置locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
# 安装ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop
# 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
小技巧:安装完成后,运行 ros2 run demo_nodes_cpp talker 测试一下。如果能听到"Hello World",说明安装成功了。
1.4 Nav2源码编译与安装
这里我建议用源码编译,而不是直接apt安装。为什么?因为源码编译能让你看到Nav2的完整结构,后面调试也方便。
我曾经踩过一个坑:直接用apt安装的Nav2版本比较旧,有些新功能用不了。后来改成源码编译,问题就解决了。
编译步骤:
# 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws
# 克隆Nav2源码
git clone https://github.com/ros-planning/navigation2.git src/navigation2
# 安装依赖
sudo apt install python3-pip
pip3 install -r src/navigation2/tools/requirements.txt
rosdep install -y --from-paths src --ignore-src
# 编译
colcon build --symlink-install
# 设置环境
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:编译时间比较长,大概20-30分钟。建议用 colcon build --parallel-workers 4 加速。我第一次编译时没加这个参数,等了快一个小时。
1.5 验证安装
装完了怎么知道能不能用?跑个最简单的例子:
# 启动Nav2示例
ros2 launch nav2_bringup tb3_simulation_launch.py
如果能看到Gazebo里出现一个TurtleBot3,并且Rviz2里显示了地图和路径,那就说明一切正常。
我个人习惯在第一次运行成功后,把整个工作空间备份一下。这样万一后面改坏了,还能快速恢复。
1.6 本章知识体系
下面这张图展示了本章的核心逻辑,我画了个简单的结构图:
这张图把本章的知识点串起来了。从Nav2的三大模块出发,到为什么选择它,再到环境准备的具体步骤,最后都指向同一个目标——让机器人自主导航。
个人建议:初学者不要急着跑复杂的功能。先把环境搭好,跑通一个最简单的示例,感受一下Nav2的工作流程。我当初就是太着急,一上来就想搞多机器人协同,结果折腾了两周才发现是环境没配好。
好了,环境准备好了,下一章我们开始真正接触Nav2的核心概念。