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