第2章 环境搭建:ROS2 Humble安装、Nav2源码编译、依赖检查

说实话,做机器人导航,环境搭建往往是第一个坑。我见过太多人在这一步卡了两三天,最后发现是依赖没装全,或者源选错了。这一章咱们就把 ROS2 Humble、Nav2 源码编译、还有那些烦人的依赖一次理清楚。跟着我的节奏走,基本不会出问题。

环境搭建核心 ROS2 Humble 安装 Nav2 源码编译 依赖检查 & 验证 apt + 语言环境 colcon build rosdep / 自检

2.1 安装 ROS2 Humble

我个人习惯用 Ubuntu 22.04 搭配 ROS2 Humble。为什么选 Humble?因为它 LTS,稳定,社区支持强。你想想看,导航这种对实时性要求高的东西,用滚动版容易出幺蛾子。

先把语言环境设好,不然编译时一堆乱码警告:

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

然后添加 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
sudo apt update
💡 我的小习惯: 装完源之后,先 apt upgrade 一下,把系统包更新到最新,避免后面出现 ABI 不兼容。

安装桌面版(包含 RViz、demo 等):

sudo apt install ros-humble-desktop python3-colcon-common-extensions

装完记得 source 一下:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证一下:ros2 run demo_nodes_cpp talker 能听到 "Hello World" 就对了。

2.2 Nav2 源码编译

虽然 Nav2 有二进制包,但我强烈建议你编译源码。为什么?因为后面调参数、改规划器、加自定义行为树,源码在手才方便。我在项目里吃过二进制的亏——想加个自定义 costmap layer,发现二进制没带头文件,最后还得重新编译。

创建工作空间并拉代码:

mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src
git clone https://github.com/ros-planning/navigation2.git --branch humble

注意分支一定要选 humble,别拉到 main 了,那个是给 Rolling 的。

⚠️ 我曾经踩过的坑: 直接 git clone 默认分支,结果编译时一堆 API 不匹配。后来乖乖加 --branch humble,一次过。

安装依赖(rosdep 是关键):

cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble

如果提示 rosdep not found,先装:sudo apt install python3-rosdep,然后 sudo rosdep init && rosdep update。

编译:

colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

加 --symlink-install 方便改 Python 文件后不用重新编译。Release 模式让规划器跑得更快。

编译时间取决于机器,一般 10~20 分钟。你可以去泡杯咖啡。

2.3 依赖检查 & 常见问题

编译完别急着跑,先检查关键依赖。我一般用下面这个列表核对:

依赖包用途验证命令
ros-humble-nav2-bringup启动文件与参数模板ros2 pkg list | grep nav2_bringup
ros-humble-tf2-geometry-msgs坐标变换ros2 pkg list | grep tf2
libceres-dev非线性优化 (用于平滑)dpkg -l | grep libceres
python3-sphinx文档生成 (可选)sphinx-build --version

如果缺了 libceres-dev,导航的平滑规划器会罢工。安装:

sudo apt install libceres-dev
🔍 快速自检脚本: 我写了个小命令,一键检查环境变量和关键包:
source ~/nav2_ws/install/setup.bash && ros2 run nav2_util lifecycle_bringup --help 如果打印出帮助信息,说明核心库没问题。

还有一个容易忽略的点——Gazebo 与 Nav2 的桥接。如果你用仿真,记得装 ros-humble-gazebo-ros-pkgs,不然机器人出不来。

2.4 验证整体环境

最后一步,跑一个最小系统验证。打开终端,启动 Nav2 自带的小车示例:

source ~/nav2_ws/install/setup.bash
ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False

如果看到 RViz 里出现 TurtleBot3 和地图,并且机器人能接受 2D Nav Goal,恭喜你,环境搭建成功了。

嗯,这里要注意:第一次启动可能会因为 NAV2_WS 没 source 而报错。我习惯在 .bashrc 里加一行 source ~/nav2_ws/install/setup.bash,省得每次手动敲。

📌 避坑指南: 如果你在虚拟机里跑,记得给至少 4GB 内存,否则编译到一半会 OOM。我曾经用 2GB 虚拟机编译,等了半小时然后崩了……后来加了 swap 才搞定。