第1章 课程导论与环境准备

URDF模型与Nav2系统联调实战 · 开篇

URDF 模型 机器人描述 · 传感器 · 执行器 Nav2 导航栈 规划 · 控制 · 定位 · 行为树 Gazebo 仿真 物理引擎 · 传感器仿真 URDF 提供机器人“身体”,Nav2 赋予“大脑与导航能力” Gazebo 作为虚拟试验场,三者联调实现从模型到自主导航

1.1 URDF 与 Nav2 的关系 —— 机器人的“骨架”与“灵魂”

URDF 是什么?说白了,它就是机器人的“身份证”。描述轮子多大、底盘多高、传感器装在哪。我刚开始接触 ROS 时,觉得 URDF 就是个 XML 文件,没什么了不起。直到有一次,我偷懒没写碰撞参数,结果 Gazebo 里机器人直接穿模到地底下……嗯,从那以后我再也不敢小看它了。

而 Nav2 呢,是 ROS2 上的导航系统。它负责让机器人知道“我在哪”、“要去哪”、“怎么去”。但 Nav2 本身不知道你的机器人长什么样——它需要 URDF 告诉它:轮子差速还是全向?激光雷达装在车头还是中间?

核心逻辑: URDF 提供运动学与感知的“物理基础”,Nav2 基于这些信息做路径规划与避障。两者通过 TF 树、传感器话题、里程计数据紧密耦合。

我个人习惯把 URDF 比作“骨架”,Nav2 比作“小脑加大脑”。骨架歪了,大脑再聪明也走不稳。所以这门课的第一个目标,就是让你把骨架搭结实。

1.2 ROS2 环境搭建 —— 别让工具成为拦路虎

我见过太多同学卡在环境安装上。其实 ROS2 的安装已经非常成熟了,但有几个坑得提前避开。

  • 系统选择: 推荐 Ubuntu 22.04 + ROS2 Humble。长期支持,稳定。
  • 语言环境: 确保 locale 支持 UTF-8,否则编译会报一些奇怪错误。
  • 源与密钥: 添加 ROS2 官方源时,注意用 curl 导入密钥,别漏了 sudo。

下面是我常用的安装步骤(Humble 版本):

# 设置 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

# 添加 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

# 安装 ROS2 Humble 桌面版
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions
💡 我的小习惯: 装完 ROS2 后,立刻把 source /opt/ros/humble/setup.bash 写到 ~/.bashrc 里。不然每次开终端都要手动 source,太烦了。

1.3 Gazebo 与 Nav2 安装验证 —— 跑一个“Hello World”

环境装没装好,拉出来遛遛就知道。Gazebo 和 Nav2 的安装其实可以一步到位:

sudo apt install ros-humble-gazebo-ros-pkgs ros-humble-nav2-bringup ros-humble-turtlebot3-gazebo

为什么装 TurtleBot3 相关包?因为它是 URDF + Nav2 联调最经典的参考平台。我当年第一次跑通 Nav2 就是在 TurtleBot3 上,看到机器人自己避开障碍物时,说实话挺激动的。

验证方法很简单:

  1. 启动 Gazebo 空世界:gazebo --verbose
  2. 另开终端,启动 Nav2 示例:ros2 launch nav2_bringup tb3_simulation_launch.py
  3. 如果看到 Gazebo 里出现一个小机器人,并且 Rviz2 中显示地图和路径,说明环境全部就绪。
⚠️ 我曾经踩过的坑: 第一次启动 Gazebo 时,发现世界一片漆黑,模型加载不出来。后来发现是显卡驱动问题。如果你也遇到类似情况,试试 export LIBGL_ALWAYS_SOFTWARE=1 临时用软件渲染,或者更新一下驱动。

1.4 本章小结 · 地基已经打好

到这,ROS2、Gazebo、Nav2 的基础环境就齐了。你想想看,URDF 是机器人的“身体描述”,Nav2 是“导航大脑”,Gazebo 是“训练场”。这三者缺一不可。

我个人习惯在开始每个新项目前,先跑一遍 TurtleBot3 的仿真,确保整个链路没断。这就像木工开工前先试一下电锯——花不了几分钟,但能避免后面手忙脚乱。

下一章我们会正式进入 URDF 语法,从最简单的 link 和 joint 开始,亲手搭建一个能动的机器人模型。嗯,到时候见。