2、环境搭建:ROS2 Humble安装,Nav2源码编译与安装,依赖包检查与配置

好,咱们正式开始动手了。这一章说白了就是「把家伙事儿备齐」。很多新手一上来就急着跑Demo,结果卡在各种依赖缺失、版本冲突上,一卡就是半天。我个人的习惯是,先把环境理得干干净净,后面才能睡个安稳觉。

咱们的目标很明确:装好ROS2 Humble,再把Nav2从源码拉下来编译一遍,最后检查所有依赖是否就位。嗯,一步步来。

2.1 安装ROS2 Humble

ROS2 Humble是Ubuntu 22.04上的长期支持版本,也是目前Nav2最稳定的搭档。你想想看,如果系统版本不对,后面全是坑。

先确认你的Ubuntu版本:

lsb_release -a

输出里应该能看到 Description: Ubuntu 22.04.x LTS。如果不是,我建议你重装系统,别在这上面浪费时间。

接下来按官方流程走,但我会把关键步骤拎出来:

  1. 设置语言环境:确保locale支持UTF-8,否则后面编译会报一些奇怪的编码错误。我在项目里遇到过因为locale没设对,导致colcon build时日志乱码,排查了半天。
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
  1. 添加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
  1. 安装桌面版(推荐):
sudo apt install ros-humble-desktop

这个包包含了Rviz2、TF2、各种常用工具。如果你硬盘空间紧张,可以只装ros-humble-ros-base,但后面调试时你会想念Rviz2的。

  1. 配置环境变量:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证一下:

ros2 run demo_nodes_cpp talker

如果能看到节点在发布消息,恭喜,ROS2 Humble装好了。

小技巧:我个人习惯把 source /opt/ros/humble/setup.bash 写到 ~/.bashrc 最末尾,这样每次开终端自动加载。另外,如果你同时装了ROS1,记得把ROS2的source放在ROS1后面,避免覆盖。

2.2 Nav2源码编译与安装

为什么要从源码编译?直接用apt安装不好吗?嗯,这里有个现实问题:apt上的Nav2版本往往滞后,而且你没法修改源码做二次开发。做机器人导航,迟早要改参数、调算法,源码在手,心里不慌。

我建议创建一个专门的工作空间:

mkdir -p ~/nav2_ws/src
cd ~/nav2_ws

拉取Nav2源码:

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

注意指定--branch humble,否则默认拉master分支,可能和ROS2 Humble不兼容。我曾经手滑没加分支参数,编译到一半报了一堆API错误,气得我直接删了重来。

安装依赖:

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

rosdep会自动解析package.xml里的依赖,并安装系统级的库。如果提示rosdep未初始化,先跑:

sudo rosdep init
rosdep update

然后编译:

colcon build --symlink-install

--symlink-install这个参数很实用,它让安装目录里的文件链接回源码目录。这样你修改Python脚本后不用重新编译,直接生效。对于调试阶段,能省不少时间。

编译完成后,别忘了source:

echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:编译时如果内存不足(比如虚拟机只给了2GB),可能会卡死或报错。我建议至少分配4GB内存,或者用 colcon build --parallel-workers 1 降低并行度,但编译时间会变长。

2.3 依赖包检查与配置

装完不等于万事大吉。Nav2依赖的包很多,漏一个后面就跑不起来。我习惯用下面这个命令做一次全面体检:

cd ~/nav2_ws
rosdep check --from-paths src --ignore-src --rosdistro humble

如果输出全是# #(已满足),说明依赖没问题。如果有红色报错,比如rosdep cannot find dependency,那就手动安装:

sudo apt install ros-humble-<缺失的包名>

常见的几个关键依赖,我列个表,你可以对照检查:

包名 作用 安装命令
nav2_msgs Nav2自定义消息 已包含在源码中
nav2_util 工具函数库 已包含在源码中
tf2_ros 坐标变换 sudo apt install ros-humble-tf2-ros
costmap_2d 代价地图 sudo apt install ros-humble-costmap-2d
nav_core2 导航核心接口 已包含在源码中
behavior_tree 行为树支持 sudo apt install ros-humble-behavior-tree

还有一个容易忽略的——Gazebo。虽然Nav2本身不依赖Gazebo,但你要做仿真测试就得装:

sudo apt install ros-humble-gazebo-ros-pkgs

最后,验证一下Nav2核心节点能否启动:

ros2 run nav2_bt_navigator bt_navigator --ros-args -h

如果能看到帮助信息,说明环境基本就绪。

避坑指南:我曾经在编译完Nav2后,直接运行ros2 launch nav2_bringup bringup_launch.py,结果报错说找不到nav2_params.yaml。后来发现是工作空间没source,系统还在用apt安装的旧版本。所以每次开新终端,记得source ~/nav2_ws/install/setup.bash,或者干脆写到.bashrc里。

2.4 本章知识体系总览

下面这张图帮你理清整个环境搭建的脉络:

环境搭建核心流程 ① 安装ROS2 Humble 系统准备 → 添加源 → 安装 ② 编译Nav2源码 创建工作空间 → 拉取 → 编译 ③ 检查依赖包 rosdep check → 补装 常见问题与对策 • 编译内存不足 → 降低并行度或增加内存 • 依赖缺失 → 手动安装对应 ros-humble-* 包 • 节点找不到 → 检查工作空间是否 source ✅ 环境就绪,可以开始导航集成

这张图把三步走清楚了:先装ROS2,再编译Nav2,最后检查依赖。每一步都有对应的验证方法,别跳步。

好了,环境搭好,咱们后面就可以真正开始玩导航了。记住,这一步慢一点没关系,基础打牢了,后面才飞得起来。

可可精品资料库