第1章:Nav2安装与编译——从零搭建你的导航系统

大家好,我是你们的老朋友。今天咱们正式开始Nav2的实战之旅。第一件事,就是把环境搭起来。别小看这一步,我见过太多人卡在安装上,折腾一整天最后发现是系统版本不对。

嗯,咱们先把话说清楚。Nav2不是个独立软件,它跑在ROS2上面。所以你得先有ROS2,才能谈Nav2。我个人习惯用Ubuntu 22.04 + ROS2 Humble,这套组合最稳,社区支持也最好。

1.1 系统要求:别在版本上翻车

先看看你的电脑够不够格。说白了,Nav2对硬件要求不高,但系统版本必须对。

项目 要求 备注
操作系统 Ubuntu 22.04 LTS 其他发行版也能用,但坑多
ROS2版本 Humble Hawksbill 长期支持版,最稳定
CPU 双核以上 建议4核,编译快很多
内存 4GB以上 8GB更舒服
硬盘 20GB空闲 源码编译需要空间
⚠️ 注意: 千万别用Ubuntu 20.04 + ROS2 Foxy来装Nav2的最新版。我去年踩过这个坑,编译到一半报错,查了半天才发现是依赖版本不匹配。Ubuntu 22.04 + Humble是官方推荐组合,省心。

1.2 两种安装方式:你选哪个?

安装Nav2有两种路子:源码编译和二进制包安装。你想想看,这就像做饭——你是想从种菜开始,还是直接买现成的菜来炒?

源码编译:适合想深入理解Nav2内部机制的人。你能看到所有源代码,想改哪里改哪里。但代价是——编译时间很长,我第一次编译等了快40分钟。

二进制包安装:适合只想用Nav2做项目的人。一条命令搞定,省时省力。我建议初学者先用二进制包,等熟悉了再回头玩源码。

1.3 源码编译Nav2(硬核玩家路线)

如果你决定走源码路线,先把ROS2 Humble装好。怎么装?去官网看教程,这里不展开。装好ROS2后,按下面步骤来:

# 1. 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws

# 2. 克隆Nav2源码
git clone https://github.com/ros-planning/navigation2.git src/navigation2

# 3. 安装依赖
sudo apt update
rosdep install -y --from-paths src --ignore-src --rosdistro humble

# 4. 编译(这步最耗时)
colcon build --symlink-install

# 5. 设置环境变量
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
💡 我的经验: 编译时加个 --parallel-workers 4 参数,能快不少。我习惯用 colcon build --symlink-install --parallel-workers 4,这样改Python代码不用重新编译。

为什么会编译这么久?因为Nav2依赖一大堆库,比如tf2、nav_msgs、costmap_2d等等。colcon会把这些依赖全部编译一遍。我第一次编译时,看着终端刷刷刷地滚,还以为死机了。

1.4 二进制包安装(省心路线)

不想折腾?那就用二进制包。一条命令搞定:

sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup

就这么简单。装完就能用。我刚开始学Nav2时用的就是二进制包,先跑起来再说,后面再慢慢啃源码。

不过要注意,二进制包版本可能比源码慢一两个小版本。如果你需要最新特性,还是得走源码路线。

1.5 验证安装:跑个Demo看看

装完别急着走,先验证一下。我最怕的就是装完发现跑不起来,那才叫崩溃。

# 启动Nav2的示例
ros2 launch nav2_bringup tb3_simulation_launch.py

如果一切正常,你会看到Gazebo里出现一个TurtleBot3,Rviz2里显示地图和导航界面。嗯,看到这个画面,基本就稳了。

再跑个命令确认一下:

ros2 node list

你应该能看到一堆节点,比如/amcl、/controller_server、/planner_server等等。这些就是Nav2的核心组件。

✅ 验证清单:
  • Gazebo中能看到机器人模型
  • Rviz2中能看到地图和机器人位姿
  • ros2 node list能列出Nav2相关节点
  • ros2 topic list能看到/scan、/odom等话题

1.6 避坑指南:我踩过的那些坑

讲几个我亲身经历的问题,你遇到了别慌。

坑1:编译时提示找不到某个包

我曾经遇到Could not find a package configuration file provided by "nav2_msgs"。后来发现是忘了安装依赖。运行rosdep install就能解决。

坑2:Gazebo启动后黑屏

这个我遇到过两次。第一次是显卡驱动问题,更新驱动就好了。第二次是Gazebo版本不对,Ubuntu 22.04默认的Gazebo是Fortress,但Nav2需要Ignition Gazebo。解决办法:sudo apt install ros-humble-ignition-bridge。

坑3:Rviz2里看不到机器人

多半是TF树没建立起来。检查一下ros2 run tf2_tools view_frames,看看TF树是不是完整的。我那次是odom到base_link的变换没发布,加了个robot_state_publisher就好了。

1.7 本章知识体系

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

Nav2安装与编译知识体系 系统要求 Ubuntu 22.04 + Humble 安装方式 源码编译 二进制包安装 验证安装:跑Demo + 检查节点 避坑指南:依赖缺失、Gazebo黑屏、TF树问题

这张图把本章内容串起来了。从系统要求出发,分两条路走——源码编译和二进制包安装,最后都要验证。避坑指南是保命用的,建议收藏。

好了,第一章就到这里。安装环境是基础,基础打牢了,后面学起来才顺。下一章咱们聊聊Nav2的架构,看看它到底是怎么工作的。

可可精品资料库