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。如果不是,我建议你重装系统,别在这上面浪费时间。
接下来按官方流程走,但我会把关键步骤拎出来:
- 设置语言环境:确保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
- 添加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
- 安装桌面版(推荐):
sudo apt install ros-humble-desktop
这个包包含了Rviz2、TF2、各种常用工具。如果你硬盘空间紧张,可以只装ros-humble-ros-base,但后面调试时你会想念Rviz2的。
- 配置环境变量:
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
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
如果能看到帮助信息,说明环境基本就绪。
ros2 launch nav2_bringup bringup_launch.py,结果报错说找不到nav2_params.yaml。后来发现是工作空间没source,系统还在用apt安装的旧版本。所以每次开新终端,记得source ~/nav2_ws/install/setup.bash,或者干脆写到.bashrc里。
2.4 本章知识体系总览
下面这张图帮你理清整个环境搭建的脉络:
这张图把三步走清楚了:先装ROS2,再编译Nav2,最后检查依赖。每一步都有对应的验证方法,别跳步。
好了,环境搭好,咱们后面就可以真正开始玩导航了。记住,这一步慢一点没关系,基础打牢了,后面才飞得起来。