第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、传感器、控制的“空间总线”
1.2 课程目标 —— 学完你能带走什么?
这门课不是纯理论,也不是只敲命令。我的目标是:让你亲手搭出一套能跑、能调、能排错的TF+Nav2仿真系统。具体来说——
- 彻底搞懂TF树的设计原则,不再害怕
lookupTransform报错。 - 能独立配置Nav2的TF相关参数,让机器人稳定导航。
- 掌握Gazebo+Nav2联合仿真中TF的调试技巧,遇到问题知道从哪下手。
- 积累一套我多年总结的“避坑清单”,比如时间戳同步、帧名称规范。
我个人习惯把复杂问题拆成小块。每一章都会有一个可运行的例子,你跟着做,慢慢就能形成自己的“肌肉记忆”。
1.3 Ubuntu + ROS2 Humble 环境搭建
咱们用ROS2 Humble,因为它稳定、社区活跃,而且和Nav2的版本最匹配。如果你用的是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一起安装,但保险起见,我们单独确认一下。
| 组件 | 验证命令 | 预期输出 |
|---|---|---|
| Gazebo | gazebo --version | Gazebo multi-robot simulator, version 11.x |
| Nav2 | ros2 pkg list | grep nav2 | 显示 nav2_bringup, nav2_core 等包 |
| TF2 | ros2 pkg list | grep tf2 | tf2, tf2_ros, tf2_geometry_msgs 等 |
如果缺少Nav2相关包,手动安装:
sudo apt install ros-humble-nav2-bringup ros-humble-nav2-core ros-humble-nav2-msgs
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里显示地图和机器人模型,说明环境基本就绪。嗯,到这里,你的“台子”已经搭好了。