第2章:环境搭建与工具链

说实话,做机器人导航调试,环境搭不好,后面全是坑。我见过太多人花了一周时间在编译上,结果还没开始调导航就崩溃了。这一章,咱们就把ROS2环境、Nav2源码、调试工具、仿真环境一次性搞定。

本章核心目标:让你能在30分钟内搭建一个可用的Nav2调试环境,而不是花三天去解决依赖冲突。

2.1 ROS2 Humble/Galactic 环境配置

先说说版本选择。我个人习惯用Humble,因为它支持到2025年,稳定性也最好。Galactic其实也不错,但2022年底就EOL了,除非你项目有特殊要求,否则我建议直接上Humble。

2.1.1 系统要求

ROS2版本 推荐Ubuntu版本 支持周期
Humble Hawksbill Ubuntu 22.04 (Jammy) 2025年5月
Galactic Geochelone Ubuntu 20.04 (Focal) 2022年12月(已结束)

注意:千万别在Ubuntu 22.04上装Galactic,依赖会炸。我曾经帮一个学员远程调试,他硬是在22.04上装Galactic,结果rosdep resolve报了一堆错,最后重装了系统。

2.1.2 安装步骤(以Humble为例)

嗯,这里我直接给最稳的安装方式。别去网上找那些花里胡哨的一键脚本,老老实实按官方来。

# 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

# 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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

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

# 4. 安装开发工具
sudo apt install ros-dev-tools python3-colcon-common-extensions python3-rosdep

# 5. 初始化rosdep
sudo rosdep init
rosdep update

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

小技巧:装完后记得跑一下 ros2 run demo_nodes_cpp talker 和 ros2 run demo_nodes_py listener,能通信就说明环境没问题。我每次装完新环境都这么测,省得后面出问题到处找原因。

2.2 Nav2源码编译与安装

为什么非要编译源码?直接用apt安装不好吗?你想想看,调试导航问题时,你经常需要改Nav2内部的参数甚至代码,apt安装的二进制版本你根本改不了。所以,源码编译是必须的。

2.2.1 创建工作空间并拉取源码

# 创建workspace
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src

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

# 安装依赖
cd ~/nav2_ws
rosdep install -y --from-paths src --ignore-src --rosdistro humble

# 编译(第一次编译会比较慢,大概10-15分钟)
colcon build --symlink-install

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

避坑指南:我曾经在编译时遇到 nav2_behavior_tree 报错,原因是系统默认的gcc版本太高。解决办法是安装gcc-11:sudo apt install gcc-11 g++-11,然后设置 export CC=gcc-11 CXX=g++-11 再编译。

2.2.2 验证安装

编译完成后,跑一下Nav2自带的测试:

# 启动Nav2的bringup(需要先有仿真环境,我们后面会搭)
ros2 launch nav2_bringup navigation_launch.py

# 如果能看到类似下面的输出,说明安装成功
# [INFO] [launch]: Default logging verbosity is set to INFO
# [INFO] [lifecycle_manager-1]: lifecycle manager started

2.3 必备调试工具

调试导航问题,工具选对了能省一半时间。我平时最常用的就这四个:rqt、rviz2、tf2、ros2cli。别贪多,先把这几个玩熟。

2.3.1 rqt - 可视化调试面板

rqt是个大杂烩,里面集成了好多插件。我最常用的是 rqt_graph(看节点通信拓扑)和 rqt_reconfigure(动态调参)。

# 启动rqt
rqt

# 在Plugins菜单里选择需要的插件
# 比如:Plugins -> Visualization -> Plot(看数据曲线)
# 或者:Plugins -> Introspection -> Node Graph(看节点图)

个人经验:调导航参数时,我习惯把rqt_reconfigure和rviz2并排放在两个屏幕上。左边调参数,右边看效果,效率翻倍。

2.3.2 rviz2 - 3D可视化

rviz2是导航调试的核心工具。你看到的机器人模型、激光雷达数据、代价地图、路径规划,全在这里展示。

# 启动rviz2
rviz2

# 常用显示项(Add按钮添加):
# - RobotModel:显示机器人模型
# - LaserScan:显示激光雷达数据
# - Map:显示地图
# - Path:显示规划路径
# - TF:显示坐标系变换

2.3.3 tf2 - 坐标变换调试

导航出问题,十有八九是tf树没对。tf2就是用来查这个的。

# 查看tf树
ros2 run tf2_tools view_frames.py

# 或者实时查看tf变换
ros2 run tf2_ros tf2_monitor

# 查看特定坐标系之间的变换
ros2 run tf2_ros tf2_echo base_link odom

核心经验:导航启动后,第一件事就是看tf树。如果 map -> odom -> base_link 这条链路断了,机器人肯定动不了。我曾经花了两小时查路径规划失败的原因,最后发现是tf树里少了一个 base_footprint 到 base_link 的变换。

2.3.4 ros2cli - 命令行瑞士军刀

别小看命令行工具,很多时候比图形界面好用。我调试时几乎离不开这几个命令:

# 查看所有话题
ros2 topic list

# 查看话题数据(实时打印)
ros2 topic echo /scan

# 查看话题频率(看数据是否正常发布)
ros2 topic hz /scan

# 查看节点列表
ros2 node list

# 查看节点信息
ros2 node info /amcl

# 查看参数
ros2 param list /nav2_controller

# 动态设置参数
ros2 param set /nav2_controller max_vel_x 0.5

2.4 仿真环境搭建(Gazebo + TurtleBot3)

没有真机怎么办?仿真环境就是你的最佳调试场。我建议用TurtleBot3,因为它模型简单、文档齐全,而且Nav2官方示例就是基于它做的。

2.4.1 安装Gazebo和TurtleBot3

# 安装Gazebo(Humble自带Gazebo Fortress)
sudo apt install ros-humble-gazebo-ros2-pkgs

# 安装TurtleBot3相关包
sudo apt install ros-humble-turtlebot3*
sudo apt install ros-humble-cartographer
sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup

2.4.2 配置环境变量

# 设置TurtleBot3模型
echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc
echo "export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models" >> ~/.bashrc
source ~/.bashrc

2.4.3 启动仿真环境

# 启动Gazebo世界(带TurtleBot3)
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

# 启动导航(在另一个终端)
ros2 launch nav2_bringup bringup_launch.py use_sim_time:=True

# 启动rviz2(在第三个终端)
rviz2 -d /opt/ros/humble/share/nav2_bringup/launch/nav2_default_view.rviz

调试技巧:启动后如果机器人不动,先检查 /odom 话题有没有数据。用 ros2 topic echo /odom 看一下,如果没数据,说明里程计没工作。这时候去查tf树,大概率是 odom -> base_link 的变换没发布。

2.5 本章知识体系

下面这张图是我自己整理的,把本章的核心内容串起来了。你照着这个思路去搭建环境,基本不会漏东西。

Nav2调试环境搭建知识体系 Nav2调试环境 ROS2 Humble/Galactic Nav2源码编译 调试工具链 Gazebo+TurtleBot3 Ubuntu 22.04 rosdep依赖 colcon编译 symlink-install rqt/rviz2 tf2/ros2cli TurtleBot3模型 Gazebo世界 核心调试流程: 启动仿真 → 检查tf树 → 查看话题数据 → 动态调参 → 观察rviz2效果

2.6 常见问题与避坑

最后,我把自己踩过的坑整理一下,你遇到了直接对照着查:

  • 编译报错:先检查gcc版本,Nav2 Humble需要gcc-11以上。用 gcc --version 查看。
  • Gazebo启动黑屏:可能是显卡驱动问题。试试 export LIBGL_ALWAYS_SOFTWARE=1 强制使用软件渲染。
  • rviz2看不到机器人模型:检查 robot_description 话题有没有发布。用 ros2 topic echo /robot_description 查看。
  • 导航启动后机器人不动:先看 /cmd_vel 话题有没有数据。如果没数据,说明规划器没输出速度指令,去查全局路径规划。

一句话总结:环境搭好了,调试就成功了一半。别急着跑导航,先把工具链玩熟,后面遇到问题才能快速定位。

可可精品资料库