1. Nav2概述与环境搭建:ROS2 Humble安装、Nav2源码编译、Turtlebot3仿真环境搭建

各位同学,欢迎来到《Nav2导航与地图无缝对接实战》的第一章。

说实话,做机器人导航这些年,我踩过的坑比走过的路还多。记得我第一次接触Nav2时,光环境搭建就折腾了两天——版本不对、依赖缺失、编译报错……那叫一个酸爽。所以这一章,我带你稳扎稳打,把地基打牢。

1.1 Nav2到底是什么?

Nav2,全称Navigation2,是ROS2生态下的导航框架。说白了,它就是机器人的「自动驾驶系统」。你给机器人一张地图,告诉它「去A点」,Nav2负责规划路径、避开障碍、控制底盘,最终到达目的地。

我个人习惯把Nav2拆成三个核心模块来看:

  • 全局规划器:负责宏观路径规划,比如从客厅到卧室怎么走
  • 局部规划器:负责微观避障,比如前面突然出现一只猫,怎么躲
  • 行为树:负责决策逻辑,比如「先定位,再规划,最后执行」

嗯,这里要注意:Nav2不是ROS1的简单移植,而是完全重写的。它用上了ROS2的很多新特性,比如生命周期节点、参数服务、更高效的消息传递。所以别再问「能不能把ROS1的导航包直接搬过来用」——不行,真的不行。

核心要点:Nav2 = 全局规划 + 局部规划 + 行为树 + 地图服务 + 定位模块。五个组件缺一不可。

Nav2 核心组件架构 Nav2 导航栈 全局规划器 局部规划器 行为树 地图服务 定位模块(AMCL)

1.2 ROS2 Humble 安装——别走弯路

ROS2的版本很多,为什么我推荐Humble?因为它是一个LTS(长期支持)版本,稳定到2027年。你想想看,学到一半突然要换版本,那得多崩溃。

我个人习惯用Ubuntu 22.04 + ROS2 Humble这套组合。下面直接上安装步骤:

# 1. 设置编码
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

# 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桌面版(推荐)
sudo apt update
sudo apt install ros-humble-desktop

# 4. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 5. 验证安装
ros2 --version

小技巧:安装完成后,建议用 ros2 run demo_nodes_cpp talker 和 ros2 run demo_nodes_py listener 测试一下。如果能看到数据收发,说明安装成功。

注意:千万不要用apt直接装ros-humble-desktop-full以外的包,除非你清楚自己在做什么。我曾经见过有人装了ros-humble-ros-base,结果后面编译Nav2时缺了一堆依赖,折腾了大半天。

1.3 Nav2源码编译——从源码开始,心里踏实

为什么非要源码编译?直接用apt安装不好吗?

好,但不够好。源码编译的好处是:你可以随时修改代码、调试、加日志。我在项目中遇到过好几次,导航效果不理想,最后都是通过修改Nav2源码里的参数默认值搞定的。如果用二进制包,你连改的机会都没有。

下面是编译步骤:

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

# 2. 克隆Nav2源码
git clone https://github.com/ros-planning/navigation2.git src/navigation2

# 3. 安装依赖
sudo apt install python3-pip
pip3 install -U colcon-common-extensions
cd ~/nav2_ws
rosdep install -y --from-paths src --ignore-src --rosdistro humble

# 4. 编译(第一次编译较慢,耐心等待)
colcon build --symlink-install

# 5. 设置环境
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

嗯,这里要注意:编译时如果报错,多半是依赖没装全。别慌,看报错信息,缺什么装什么。我建议用 rosdep install 自动解决依赖,省心很多。

1.4 Turtlebot3仿真环境搭建——让机器人跑起来

没有真机怎么办?仿真啊!Turtlebot3是ROS生态里最经典的仿真平台之一。我个人习惯用Gazebo做仿真,配合Nav2做导航测试,效果非常接近真实环境。

搭建步骤:

# 1. 安装Turtlebot3相关包
sudo apt install ros-humble-turtlebot3*
sudo apt install ros-humble-gazebo-*

# 2. 设置Turtlebot3模型
echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc
source ~/.bashrc

# 3. 启动仿真环境
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

# 4. 新开终端,启动键盘控制
ros2 run turtlebot3_teleop teleop_keyboard

验证方法:启动仿真后,用键盘控制机器人前后左右移动。如果机器人动了,说明环境搭建成功。如果没动,检查一下 TURTLEBOT3_MODEL 环境变量是否设置正确。

我曾经犯过一个低级错误:忘记设置 TURTLEBOT3_MODEL,结果Gazebo里显示的是空白世界,机器人死活不出来。后来发现默认值是空字符串……嗯,这种坑踩过一次就记住了。

1.5 环境验证——确保一切就绪

最后,我们来验证整个环境是否打通。启动仿真后,运行Nav2:

# 启动Nav2导航
ros2 launch nav2_bringup bringup_launch.py use_sim_time:=True

如果能看到Rviz界面,并且地图上有机器人模型,说明Nav2已经成功加载。你可以用「2D Nav Goal」工具给机器人设置目标点,看看它能不能自己规划路径走过去。

我第一次看到机器人自己绕过障碍物走到目标点时,说实话,挺激动的。那种感觉就像你写的代码突然有了生命。

组件 版本/路径 验证命令
ROS2 Humble ros2 --version
Nav2 源码编译(main分支) ros2 pkg list | grep nav2
Turtlebot3 waffle模型 ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
Gazebo 与Humble配套 gazebo --version

避坑指南:我曾经在编译Nav2时遇到 colcon build 卡在100%不动。后来发现是内存不够。建议编译时关闭其他应用,或者用 colcon build --parallel-workers 2 限制并行任务数。

好了,第一章的内容就到这里。环境搭好了,后面的事情就好办了。记住:基础不牢,地动山摇。花点时间把环境搞稳定,后面学起来会顺畅很多。

可可精品资料库