一、课程导论与环境准备:从零搭建你的Nav2开发环境
大家好,我是你们的导航工程师老K。今天咱们正式开始这门课的第一章——环境准备。
说实话,我见过太多同学卡在环境搭建这一步。明明代码逻辑没问题,结果因为Gazebo版本不对、Nav2编译报错,折腾一整天。所以这一章,我会把每个坑都指出来。
1.1 为什么选择Gazebo + Nav2?
先聊聊这套技术栈的价值。
Gazebo Fortress是目前ROS2生态里最稳定的仿真器。它支持物理引擎、传感器模拟、甚至多机器人协同。而Nav2呢?它是ROS2官方推荐的导航框架,从路径规划到避障,一套全包。
我在项目里遇到过这种情况:实车测试前,先用Gazebo跑一遍Nav2,能发现80%的bug。说白了,仿真就是你的安。
核心逻辑:Gazebo提供虚拟世界,Nav2负责让机器人在里面自主移动。两者结合,就是低成本、高效率的导航开发方案。
1.2 ROS2 Humble安装——别踩这个坑
ROS2 Humble是长期支持版(LTS),稳定到2027年。我个人习惯用Ubuntu 22.04 + Humble,兼容性最好。
安装命令很简单,但有个细节:一定要先设置locale。我当初没注意,结果编译时一堆乱码报错。
# 1. 设置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
export LANG=en_US.UTF-8
# 2. 添加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
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop
# 4. 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
小技巧:安装完成后,运行 ros2 run demo_nodes_cpp talker 测试一下。如果能看到“Hello World”输出,说明环境OK。
1.3 Gazebo Fortress安装——版本匹配是关键
Gazebo Fortress对应的是ROS2 Humble。别装成Gazebo Classic(那是ROS1时代的产物)。
安装命令很简单,但有个坑:Gazebo Fortress默认不带模型库。我第一次启动时,世界一片空白,还以为装错了。
# 安装Gazebo Fortress
sudo apt install ros-humble-ros-gz
sudo apt install gz-fortress
# 下载模型库(可选,但强烈建议)
git clone https://github.com/osrf/gazebo_models.git ~/.gazebo/models
注意:如果你在虚拟机里跑Gazebo,记得开启3D加速。否则帧率会低到怀疑人生。
1.4 Nav2源码编译——为什么我不建议用apt安装?
你可能会问:直接用 sudo apt install ros-humble-nav2 不就行了?
嗯,这里要解释一下。apt安装的是稳定版,但Nav2迭代很快。我去年做项目时,apt版本缺少一个关键的行为树节点,折腾了两天才发现。所以,我建议源码编译,这样你能拿到最新特性,也方便调试。
编译步骤:
# 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src
# 克隆Nav2源码
git clone https://github.com/ros-planning/navigation2.git --branch humble
# 安装依赖
cd ~/nav2_ws
rosdep install -y --from-paths src --ignore-src --rosdistro humble
# 编译(第一次编译较慢,约15-30分钟)
colcon build --symlink-install
# 配置环境
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
避坑指南:编译时如果报错 Could not find a package configuration file,多半是缺少依赖。运行 rosdep update 再试一次。
1.5 工作空间搭建——我的个人习惯
工作空间的结构,我建议这样组织:
~/nav2_ws/
├── src/ # 源码目录
│ ├── navigation2/ # Nav2主仓库
│ ├── my_robot/ # 你的机器人模型
│ └── my_nav_config/ # 导航配置文件
├── build/ # 编译产物
├── install/ # 安装文件
└── log/ # 日志
为什么要单独建一个 my_nav_config 包?因为Nav2的配置文件(比如行为树、代价地图参数)经常要改。放在独立包里,方便版本管理。
我曾经把配置文件和代码混在一起,结果一次误操作把整个导航参数清空了……嗯,从那以后我就分开了。
1.6 验证环境——跑一个最简单的例子
环境搭好了,怎么确认一切正常?
我习惯用Nav2自带的 nav2_bringup 包来测试:
# 启动Gazebo世界
ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False
# 如果看到TurtleBot3在Gazebo里出现,并且Rviz2显示地图,说明环境OK
如果一切顺利,你会看到一个小机器人出现在仿真世界里。这时候,你可以用2D Nav Goal工具给它一个目标点,看看它能不能自己走过去。
验证清单:
- ✅ ROS2 Humble 安装成功(ros2 topic list 有输出)
- ✅ Gazebo Fortress 启动正常(能看到仿真世界)
- ✅ Nav2 编译通过(colcon build 无报错)
- ✅ 仿真导航能跑起来(机器人能自主移动)
1.7 本章知识体系
下面这张图,帮你理清本章的核心逻辑:
1.8 常见问题与解决
| 问题 | 原因 | 解决方法 |
|---|---|---|
| Gazebo启动后黑屏 | 显卡驱动或模型库缺失 | 安装显卡驱动,下载模型库 |
| Nav2编译报错 | 依赖未安装或版本冲突 | 运行 rosdep install 更新依赖 |
| ROS2命令找不到 | 环境变量未配置 | 检查 ~/.bashrc 中的source语句 |
| 仿真卡顿 | 虚拟机或性能不足 | 降低Gazebo渲染质量,或使用实体机 |
重要提醒:如果你用的是Windows WSL2,Gazebo Fortress的GUI支持有限。我建议直接用Ubuntu双系统或实体机,省去很多麻烦。
好了,环境准备就到这里。记住,这一步虽然枯燥,但基础打牢了,后面学起来会顺畅很多。下一章我们会正式进入Nav2的核心概念——行为树和规划器。到时候见!