第1章 课程导论与环境准备
URDF模型与Nav2系统联调实战 · 开篇
1.1 URDF 与 Nav2 的关系 —— 机器人的“骨架”与“灵魂”
URDF 是什么?说白了,它就是机器人的“身份证”。描述轮子多大、底盘多高、传感器装在哪。我刚开始接触 ROS 时,觉得 URDF 就是个 XML 文件,没什么了不起。直到有一次,我偷懒没写碰撞参数,结果 Gazebo 里机器人直接穿模到地底下……嗯,从那以后我再也不敢小看它了。
而 Nav2 呢,是 ROS2 上的导航系统。它负责让机器人知道“我在哪”、“要去哪”、“怎么去”。但 Nav2 本身不知道你的机器人长什么样——它需要 URDF 告诉它:轮子差速还是全向?激光雷达装在车头还是中间?
我个人习惯把 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
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 上,看到机器人自己避开障碍物时,说实话挺激动的。
验证方法很简单:
- 启动 Gazebo 空世界:
gazebo --verbose - 另开终端,启动 Nav2 示例:
ros2 launch nav2_bringup tb3_simulation_launch.py - 如果看到 Gazebo 里出现一个小机器人,并且 Rviz2 中显示地图和路径,说明环境全部就绪。
export LIBGL_ALWAYS_SOFTWARE=1 临时用软件渲染,或者更新一下驱动。
1.4 本章小结 · 地基已经打好
到这,ROS2、Gazebo、Nav2 的基础环境就齐了。你想想看,URDF 是机器人的“身体描述”,Nav2 是“导航大脑”,Gazebo 是“训练场”。这三者缺一不可。
我个人习惯在开始每个新项目前,先跑一遍 TurtleBot3 的仿真,确保整个链路没断。这就像木工开工前先试一下电锯——花不了几分钟,但能避免后面手忙脚乱。
下一章我们会正式进入 URDF 语法,从最简单的 link 和 joint 开始,亲手搭建一个能动的机器人模型。嗯,到时候见。