1. Nav2概述与环境准备:Nav2是什么、为什么选择Nav2、ROS2 Humble安装、Nav2源码编译与安装

1.1 Nav2到底是什么?

先说说我个人的理解。Nav2,说白了就是一套让机器人自己认路、自己走的软件框架。你给它一个目标点,它自己规划路径,自己避开障碍物,自己控制电机走过去。

我记得刚入行那会儿,做机器人导航还得自己写A*算法、自己调PID参数,折腾好几个月才能让机器人在实验室里走一圈。现在有了Nav2,这些底层工作基本不用你操心了。

Nav2是ROS2生态下的导航系统,它把定位、路径规划、控制、行为树这些模块都整合在了一起。你想想看,一个机器人要完成导航任务,至少需要知道三件事:

  • 我在哪?—— 定位模块(AMCL)负责这个
  • 我要去哪?—— 全局规划器帮你算出一条路
  • 我怎么走?—— 局部规划器负责实时避障

Nav2把这些模块都封装好了,你只需要配置参数、写写行为树,就能让机器人跑起来。

核心要点:Nav2不是单一的程序,而是一套插件化的框架。每个模块都可以替换,你可以用自己的算法替换默认的规划器,灵活性很高。

1.2 为什么选择Nav2?

这个问题我经常被问到。其实选择Nav2的理由很直接:

  1. 生产级稳定性——我在项目中遇到过用其他导航方案,跑着跑着就崩了的情况。Nav2经过多年迭代,稳定性确实好很多。
  2. 行为树驱动——这是Nav2最大的亮点。以前写导航逻辑,if-else嵌套得让人崩溃。行为树把整个导航流程可视化,调试起来方便多了。
  3. 插件化架构——想换规划器?写个插件就行。想换代价地图?也是插件。这种设计让扩展变得非常容易。
  4. 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 环境准备 定位模块 规划模块 控制模块 行为树 生产级稳定 插件化架构 ROS2原生 可视化调试 ROS2安装 依赖安装 源码编译 验证运行 目标:让机器人自主导航

这张图把本章的知识点串起来了。从Nav2的三大模块出发,到为什么选择它,再到环境准备的具体步骤,最后都指向同一个目标——让机器人自主导航。

个人建议:初学者不要急着跑复杂的功能。先把环境搭好,跑通一个最简单的示例,感受一下Nav2的工作流程。我当初就是太着急,一上来就想搞多机器人协同,结果折腾了两周才发现是环境没配好。

好了,环境准备好了,下一章我们开始真正接触Nav2的核心概念。

可可精品资料库