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

大家好,我是你们这门课的讲师。做了快十年的机器人系统,从ROS1一路折腾到ROS2,踩过的坑比代码行数还多。今天咱们正式开始 TF坐标与Nav2联合仿真联调实战 的第一章。这一章说白了就是“搭台子”——把环境整利索,后面才能唱好戏。

1.1 TF坐标与Nav2的关系 —— 为什么它俩必须“绑”在一起?

很多人刚开始学Nav2,上来就配参数、调行为树,结果机器人原地转圈或者直接“飞”出去。我告诉你,十有八九是TF没搞对。TF(坐标变换)是Nav2的“眼睛”和“骨架”。没有准确的TF树,导航根本不知道机器人在哪、激光雷达朝哪、底盘怎么走。

你想想看,Nav2里的全局规划器、局部规划器、代价地图、AMCL……哪个不需要坐标帧?map、odom、base_link、laser_frame,这些帧之间的变换一旦断掉或者时间戳错乱,导航立马罢工。我在项目里遇到过最典型的一次:机器人定位漂移,折腾了两天,最后发现是TF的parent frame写错了字母大小写……嗯,从那以后我每次写TF都格外小心。

💡 核心认知: TF是Nav2的“神经系统”,Nav2的每个决策都依赖TF提供的空间关系。学Nav2不学TF,就像开车不看路。
TF坐标系统 Nav2 导航栈 传感器 & 里程计 底盘 & 执行器 全局/局部规划 AMCL定位 代价地图 行为树恢复 TF 连接所有模块 → 联合仿真联调

▲ 课程核心逻辑:TF是贯穿Nav2、传感器、控制的“空间总线”

1.2 课程目标 —— 学完你能带走什么?

这门课不是纯理论,也不是只敲命令。我的目标是:让你亲手搭出一套能跑、能调、能排错的TF+Nav2仿真系统。具体来说——

  • 彻底搞懂TF树的设计原则,不再害怕lookupTransform报错。
  • 能独立配置Nav2的TF相关参数,让机器人稳定导航。
  • 掌握Gazebo+Nav2联合仿真中TF的调试技巧,遇到问题知道从哪下手。
  • 积累一套我多年总结的“避坑清单”,比如时间戳同步、帧名称规范。

我个人习惯把复杂问题拆成小块。每一章都会有一个可运行的例子,你跟着做,慢慢就能形成自己的“肌肉记忆”。

1.3 Ubuntu + ROS2 Humble 环境搭建

咱们用ROS2 Humble,因为它稳定、社区活跃,而且和Nav2的版本最匹配。如果你用的是Ubuntu 22.04,那正好;如果是其他版本,建议装个虚拟机或者双系统。

⚡ 我的建议: 别用Windows + WSL2跑仿真,GPU和网络问题会让你怀疑人生。原生Ubuntu 22.04最省心。

安装步骤其实很标准,但我还是把关键命令列出来,方便你复制:

# 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 $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装Humble桌面版(包含Gazebo和Nav2依赖)
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions

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

装完之后,记得验证一下:ros2 run demo_nodes_cpp talker 能听到“Hello World”就对了。我曾经帮一个学员远程调试,他卡在这一步三天,最后发现是网络代理没关……所以如果你遇到下载慢,换个国内镜像源试试。

1.4 Gazebo 与 Nav2 安装验证

Gazebo和Nav2通常随ros-humble-desktop一起安装,但保险起见,我们单独确认一下。

组件验证命令预期输出
Gazebogazebo --versionGazebo multi-robot simulator, version 11.x
Nav2ros2 pkg list | grep nav2显示 nav2_bringup, nav2_core 等包
TF2ros2 pkg list | grep tf2tf2, tf2_ros, tf2_geometry_msgs 等

如果缺少Nav2相关包,手动安装:

sudo apt install ros-humble-nav2-bringup ros-humble-nav2-core ros-humble-nav2-msgs
⚠️ 注意: 我曾经在Ubuntu 22.04上遇到Gazebo黑屏,原因是显卡驱动没装好。运行 glxinfo | grep "OpenGL renderer" 看看是不是用的软渲染。如果是,装一下 sudo apt install mesa-utils 或者NVIDIA驱动。

最后,快速跑一个“空世界”测试:

# 启动Gazebo空世界
gazebo --verbose /opt/ros/humble/share/gazebo_plugins/worlds/empty.world

# 另开终端,启动Nav2自带的小车仿真(如果安装完整)
ros2 launch nav2_bringup tb3_simulation_launch.py

看到Gazebo里出现TurtleBot3,并且Rviz2里显示地图和机器人模型,说明环境基本就绪。嗯,到这里,你的“台子”已经搭好了。

✅ 第一章小结: