一、课程导论与环境准备:从零搭建你的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 本章知识体系

下面这张图,帮你理清本章的核心逻辑:

第一章:课程导论与环境准备 Nav2导航开发环境 ROS2 Humble Gazebo Fortress Nav2源码编译 工作空间搭建(src/build/install/log) 环境验证:tb3_simulation_launch.py 四个组件缺一不可,验证环节确保整体可用

1.8 常见问题与解决

问题 原因 解决方法
Gazebo启动后黑屏 显卡驱动或模型库缺失 安装显卡驱动,下载模型库
Nav2编译报错 依赖未安装或版本冲突 运行 rosdep install 更新依赖
ROS2命令找不到 环境变量未配置 检查 ~/.bashrc 中的source语句
仿真卡顿 虚拟机或性能不足 降低Gazebo渲染质量,或使用实体机

重要提醒:如果你用的是Windows WSL2,Gazebo Fortress的GUI支持有限。我建议直接用Ubuntu双系统或实体机,省去很多麻烦。

好了,环境准备就到这里。记住,这一步虽然枯燥,但基础打牢了,后面学起来会顺畅很多。下一章我们会正式进入Nav2的核心概念——行为树和规划器。到时候见!

可可精品资料库