第二章:环境搭建——ROS2 Humble安装、Nav2源码编译、依赖安装、TurtleBot3仿真环境搭建
说实话,做导航调参这件事,最怕的不是参数调不好,而是环境没搭对。我见过太多同学花了两周时间调参数,最后发现是安装的Nav2版本和ROS2对不上号。嗯,这一章我们就来把地基打牢。
本章核心目标:搭建一个纯净、可复现的Nav2开发环境。所有操作均在Ubuntu 22.04 + ROS2 Humble下完成。
2.1 ROS2 Humble 安装——选对版本很重要
ROS2的版本和Ubuntu是绑定的。Humble对应Ubuntu 22.04,这是目前最稳定的组合。我个人习惯用apt安装,干净利落。
# 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
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. 安装桌面版(推荐)
sudo apt update
sudo apt install ros-humble-desktop
# 4. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
我的小建议:安装完成后,务必运行 ros2 run demo_nodes_cpp talker 和 ros2 run demo_nodes_py listener 测试一下。如果能看到数据在跑,说明安装成功。我曾经在虚拟机里装过,网络配置不对导致节点通信失败,折腾了半天才发现是NAT模式的问题——换成桥接模式就好了。
2.2 Nav2 源码编译——为什么要从源码装?
你可能会问:直接用apt安装Nav2不行吗?行,但不推荐。原因有三:
- 调试需要:调参时经常要改源码里的参数默认值,apt装的是二进制,改不了。
- 版本控制:源码编译可以锁定特定commit,避免团队环境不一致。
- 学习价值:读源码是进阶的必经之路。
下面是我整理的编译步骤,踩过坑之后总结出来的。
# 1. 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src
# 2. 克隆Nav2源码(推荐使用humble分支)
git clone https://github.com/ros-planning/navigation2.git --branch humble
# 3. 安装依赖
cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
# 4. 编译(使用colcon)
colcon build --symlink-install
# 5. 设置环境
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:编译过程中如果报错缺少某个依赖包,别慌。用 sudo apt install ros-humble-<包名> 补上就行。我遇到过最坑的是 nav2_msgs 依赖冲突,原因是之前用apt装过Nav2的二进制包。解决办法:sudo apt remove ros-humble-nav2-* 清理干净再编译。
2.3 依赖安装——少了哪个都不行
Nav2的依赖其实挺多的。除了rosdep自动解析的那些,还有几个需要手动装。我整理了一张表,方便你对照检查。
| 依赖包 | 安装命令 | 说明 |
|---|---|---|
| Gazebo | sudo apt install ros-humble-gazebo-ros-pkgs |
仿真环境必备 |
| Navigation2 | sudo apt install ros-humble-navigation2 |
可选,但建议装以便对比 |
| Nav2 Bringup | sudo apt install ros-humble-nav2-bringup |
启动文件依赖 |
| TurtleBot3 | sudo apt install ros-humble-turtlebot3* |
仿真模型 |
| Cartographer | sudo apt install ros-humble-cartographer* |
建图算法(可选) |
避坑指南:我曾经在装TurtleBot3时漏了 turtlebot3_msgs,结果仿真跑起来后话题一直收不到。用 ros2 topic list 一看,少了 /odom 和 /scan。补装后一切正常。所以装完后建议用 ros2 pkg list | grep turtlebot3 检查一下。
2.4 TurtleBot3 仿真环境搭建——让机器人动起来
仿真环境是调参的试验场。TurtleBot3在Gazebo里的表现和真实机器人非常接近,这也是我选它的原因。
# 1. 设置TurtleBot3模型
echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc
source ~/.bashrc
# 2. 启动仿真环境
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
# 3. 另开终端,启动键盘控制
ros2 run turtlebot3_teleop teleop_keyboard
启动后你应该能看到一个带墙壁的仿真世界,中间停着一辆白色的小车。用键盘的 WASD 键可以控制它移动。如果小车不动,检查一下终端是否获得了焦点。
验证环境:运行 ros2 topic echo /scan,如果能看到激光雷达数据(一堆距离值在跳动),说明仿真环境搭建成功。这是Nav2导航的基础——没有激光数据,导航就是瞎子。
2.5 本章知识体系总览
下面这张图概括了本章搭建的完整环境结构。你可以把它当作一张地图,后续所有调参工作都在这个框架里进行。
说白了,整个环境就是一层叠一层:Ubuntu托着ROS2,ROS2上面跑着Nav2和TurtleBot3,依赖包像胶水一样把它们粘在一起。任何一个环节出问题,导航就跑不起来。所以,花点时间把环境搭扎实了,后面调参才能事半功倍。
最后检查清单:
- ✅
ros2 --version输出ros-humble - ✅
colcon build在 nav2_ws 中无报错 - ✅
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py能正常启动 - ✅
ros2 topic list能看到/scan、/odom等话题
全部通过?恭喜,你的环境搭建完成了!