2、环境搭建:ROS2 Humble安装、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 Humble | ros2 --version | ros2 humble ... |
| Nav2 core | ros2 pkg list | grep nav2 | 至少出现 nav2_amcl, nav2_bt_navigator 等 |
| TF2 | ros2 run tf2_ros tf2_echo | 显示等待消息(无报错) |
| Gazebo / 仿真 | gazebo --version | Gazebo 11.x |
如果你发现某个包缺失,别慌。我一般先 rosdep check --from-paths src --ignore-src 看看缺什么,然后手动 sudo apt install ros-humble-xxx 补上。
避坑指南(我亲身经历):
• 编译时内存不够?加 swap 或者减少并行任务:
• 找不到
• 一运行就 segfault?检查一下显卡驱动和 OpenGL,Gazebo 和 rviz2 对图形要求挺高。
• 编译时内存不够?加 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。省下来的时间,喝杯咖啡不香吗?