Nav2地图定位与导航工程 - 第2节

2. 环境搭建

2、环境搭建:Ubuntu 22.04 + ROS2 Humble安装、Nav2源码编译与二进制安装、工作空间配置与验证

说实话,做机器人导航这几年,我见过太多人卡在环境搭建这一步了。明明算法逻辑都懂,结果装个系统折腾了两三天,热情直接凉了一半。所以这一章,我带你稳扎稳打,把地基打牢。

我个人习惯把环境搭建分成三个层次:操作系统层、ROS2框架层、Nav2导航栈层。每一层都有坑,咱们一个一个填。

环境搭建三层架构 操作系统层 Ubuntu 22.04 LTS ROS2框架层 Humble Hawksbill Nav2导航栈层 源码 + 二进制 核心逻辑 ① 操作系统是底座,选错版本后面全是坑 ② ROS2是中间件,Humble与Ubuntu 22.04天生一对 ③ Nav2是主角,二进制安装省事,源码编译灵活 ④ 工作空间是战场,配置好才能愉快地写代码

2.1 操作系统:Ubuntu 22.04 LTS

为什么选22.04?说白了,ROS2 Humble就是为它量身定做的。你想想看,用20.04装Humble也能跑,但总有些依赖包版本对不上,折腾起来很烦。我去年帮一个学员排查问题,搞了半天发现是他用的Ubuntu 20.04里某个库版本太老,导致Nav2的behavior tree节点一直崩溃。换回22.04,一次过。

我的建议:如果你手头是Windows或macOS,直接用虚拟机(VMware/VirtualBox)装Ubuntu 22.04桌面版。分配至少4核CPU、8GB内存、50GB硬盘。别用WSL2,虽然能跑ROS2,但涉及到Nav2的硬件接口和可视化工具时,坑太多。

2.2 ROS2 Humble 安装

ROS2的安装其实就几条命令,但顺序很重要。我见过有人先装了一堆Python包,结果和ROS2的依赖冲突,最后只能重装系统。

正确的姿势是这样的:

# 1. 设置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
export LANG=en_US.UTF-8

# 2. 添加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 $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装ROS2 Humble桌面版(包含rqt、rviz2等工具)
sudo apt update
sudo apt install ros-humble-desktop

# 4. 安装开发工具(编译、测试用)
sudo apt install ros-dev-tools python3-colcon-common-extensions
注意:安装过程中如果遇到网络超时,换个时间再试,或者用国内的镜像源。我曾经在下午高峰期装ROS2,下载到一半断了三次,气得我直接换了清华源,十分钟搞定。

装完之后,别忘了配置环境变量。我个人习惯把下面这行加到 ~/.bashrc 里:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证一下:

ros2 run demo_nodes_cpp talker
# 另开终端
ros2 run demo_nodes_py listener

如果能看到talker在发消息,listener在收消息,恭喜你,ROS2装好了。

2.3 Nav2 安装:二进制 vs 源码

Nav2的安装有两种方式,我分别说说它们的适用场景。

安装方式 优点 缺点 适用场景
二进制安装 一条命令搞定,省时省力 版本固定,不能修改源码 快速上手、生产部署
源码编译 可以调试、修改、定制 编译耗时,依赖复杂 学习研究、二次开发

二进制安装(推荐新手)

sudo apt install ros-humble-nav2-bringup

就这一条命令,Nav2的核心包就装好了。你可以直接跑官方示例:

ros2 launch nav2_bringup tb3_simulation_launch.py

嗯,这里要注意,第一次启动会下载Gazebo模型,可能有点慢。耐心等一会儿,看到TurtleBot3在仿真环境里出现,就说明成功了。

源码编译(进阶推荐)

如果你想深入理解Nav2的内部机制,或者想改代码加功能,那就得源码编译。我在做项目时经常需要修改Nav2的规划器逻辑,所以源码编译是我的标配。

步骤:

# 1. 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws

# 2. 克隆Nav2源码(建议用humble分支)
git clone https://github.com/ros-planning/navigation2.git src/navigation2 --branch humble

# 3. 安装依赖
sudo apt install python3-pip
pip3 install -r src/navigation2/tools/requirements.txt
rosdep install -y --from-paths src --ignore-src --rosdistro humble

# 4. 编译(第一次编译大概20-30分钟)
colcon build --symlink-install

# 5. 配置环境
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
避坑指南:编译时如果报错找不到某个依赖包,别慌。先运行 rosdep update 更新一下依赖数据库,再重新 rosdep install。我曾经因为网络问题导致rosdep没下载全,卡了整整一个下午。

2.4 工作空间配置与验证

工作空间说白了就是你的项目文件夹。我习惯把不同项目放在不同的工作空间里,比如 nav2_ws 专门放Nav2相关代码,robot_ws 放机器人驱动,互不干扰。

验证工作空间是否配置正确,可以这样做:

# 检查环境变量
echo $ROS_DISTRO
# 应该输出 humble

# 检查Nav2包是否可用
ros2 pkg list | grep nav2
# 应该看到 nav2_bringup, nav2_planner, nav2_controller 等

# 运行一个简单的测试
ros2 run nav2_planner demo

如果以上命令都能正常执行,说明你的环境搭建已经完成了。嗯,这一步虽然看起来简单,但它是后续所有工作的基础。我见过太多人跳过验证直接写代码,结果跑起来才发现环境有问题,排查起来比重新装一遍还费劲。

我的小技巧:每次打开新终端,先跑一下 ros2 topic list,如果能正常输出,说明环境没问题。如果报错,大概率是 setup.bash 没source上。

好了,环境搭好了,下一章我们正式开始写代码。记住,基础打得牢,后面才能飞得高。