2、环境搭建:ROS2 Humble安装、Nav2源码编译与安装、依赖检查与常见问题

说实话,做导航最怕什么?不是算法调不好,而是环境搭到一半崩了。我见过太多人在安装阶段就放弃了,其实没必要。这一章,我就带你稳扎稳打把 ROS2 Humble 和 Nav2 源码环境跑起来。你跟着我的习惯来,基本不会踩坑。

Nav2 环境搭建 ROS2 Humble 安装 Nav2 源码编译 依赖检查 & 排坑 系统层 工作空间 验证

2.1 ROS2 Humble 安装 —— 别用 apt 乱装

我个人习惯,装 ROS2 之前先把 Ubuntu 22.04 的源换成国内镜像。你想想看,如果从官方源拖包,一个 ros-humble-desktop 能下半小时。我一般用清华或者中科大的镜像,快很多。

# 设置 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

# 添加 ROS2 源(我习惯用清华镜像)
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu.key | sudo apt-key add -
sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" > /etc/apt/sources.list.d/ros2.list'

# 安装桌面版(包含 rviz2 和 demos)
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions
装完之后记得 source 一下:source /opt/ros/humble/setup.bash。我建议直接写到 ~/.bashrc 里,省得每次开终端都要敲一遍。

2.2 Nav2 源码编译 —— 别怕,其实就三步

为什么要源码编译?因为二进制包里的 Nav2 版本可能比较老,而且有些调试参数没暴露出来。我在项目里吃过这个亏——二进制包跑得好好的,一换场景就崩,查了半天发现是某个 planner 的补丁没打上。所以,源码编译更可控。

先建一个工作空间,然后拉代码:

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

接下来装依赖。这一步很多人翻车,我建议用 rosdep 一条龙搞定:

sudo apt install python3-rosdep
sudo rosdep init
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro humble
如果你遇到 rosdep init 报网络错误,八成是 raw.githubusercontent.com 被墙了。我曾经在客户现场折腾了半小时,最后用手机热点才搞定。你可以试试把 20-default.list 里的地址换成 gitee 镜像,或者直接手动下载。

依赖装完,编译就简单了:

cd ~/nav2_ws
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

嗯,这里要注意,--symlink-install 可以让你修改 Python 文件后不用重新编译,调试时特别爽。我第一次用这个参数时还觉得没啥,直到有一天改了十几次行为树……真香。

2.3 依赖检查与常见问题

编译完别急着跑,先检查一下关键依赖。我列一个快速自检表,你可以对照着看:

依赖项验证命令正常输出示例
ROS2 Humbleros2 --versionros2 humble ...
Nav2 coreros2 pkg list | grep nav2至少出现 nav2_amcl, nav2_bt_navigator 等
TF2ros2 run tf2_ros tf2_echo显示等待消息(无报错)
Gazebo / 仿真gazebo --versionGazebo 11.x

如果你发现某个包缺失,别慌。我一般先 rosdep check --from-paths src --ignore-src 看看缺什么,然后手动 sudo apt install ros-humble-xxx 补上。

避坑指南(我亲身经历):
• 编译时内存不够?加 swap 或者减少并行任务:colcon build --parallel-workers 2
• 找不到 nav2_msgs?多半是 workspace 没 source,记得 source install/setup.bash
• 一运行就 segfault?检查一下显卡驱动和 OpenGL,Gazebo 和 rviz2 对图形要求挺高。

最后,验证一下你的环境是否真的通了。打开两个终端,一个跑 ros2 run nav2_amcl amcl,另一个 ros2 node list,如果能看见 /amcl,恭喜你,环境搭建成功了。

我个人习惯把 source ~/nav2_ws/install/setup.bash 也加到 .bashrc 里,这样每次打开终端就能直接用 Nav2 的命令,不用再手动 source。省下来的时间,喝杯咖啡不香吗?