一、课程导论与预备知识:Nav2概述、传感器融合概念、地图构建基础、ROS2环境搭建与验证

1.1 这门课到底讲什么?

大家好,我是你们这门课的主讲。在机器人行业摸爬滚打了十来年,我踩过的坑,比你们吃过的盐还多(笑)。

这门课,说白了就是教你怎么让一台机器人,在完全陌生的环境里,自己溜达一圈,然后画出一张地图来。并且,这张地图不是靠一个传感器瞎蒙的,而是融合了激光雷达、摄像头、IMU等多个传感器的数据,画得又准又稳。

你可能会问:「为什么要搞这么复杂?一个激光雷达不就能建图吗?」

嗯,我刚开始做项目时也这么想。直到有一次,在一个全是玻璃墙的展厅里,激光雷达直接「瞎」了,机器人撞得七荤八素。从那以后,我就再也不敢只依赖单一传感器了。

核心目标: 掌握 Nav2 框架下,基于多传感器融合的 SLAM(即时定位与地图构建)技术。学完这门课,你能独立搭建一套鲁棒的建图系统。

1.2 Nav2 到底是个啥?

Nav2,是 ROS2 生态下最主流的导航框架。你可以把它理解成一个「导航全家桶」。它不光管路径规划,还管行为树、代价地图、传感器数据处理……

我个人习惯把 Nav2 比作一个「机器人司机」:

  • 感知层: 司机的眼睛和耳朵(激光雷达、摄像头、声呐)。
  • 规划层: 司机的大脑(全局规划器、局部规划器)。
  • 控制层: 司机的手和脚(速度控制器、电机驱动)。
  • 地图层: 司机的记忆(代价地图、全局地图)。

我们这门课,重点就是改造「感知层」和「地图层」。我们要给这个司机装上「多只眼睛」,让他看得更清楚。

1.3 传感器融合:1+1 > 2 的艺术

传感器融合,不是简单地把数据加起来。它是一门「取长补短」的艺术。

举个例子:

  • 激光雷达: 精度高,但怕玻璃、怕雨雪、怕镜子。我在做仓储机器人时,遇到过货架反光条导致定位漂移,差点把货架撞倒。
  • IMU(惯性测量单元): 不怕遮挡,短时间精度高,但会随时间漂移。你想想看,手机导航在隧道里,是不是全靠 IMU 在撑?
  • 轮式里程计: 简单可靠,但打滑就完蛋。

融合的核心思想,就是用卡尔曼滤波或图优化这类算法,把各个传感器的优势结合起来,同时抑制它们的劣势。

避坑指南: 我曾经在一个项目中,IMU 的安装角度偏了 2 度,结果融合出来的地图全是歪的。所以,传感器标定是融合的前提,千万别偷懒。

1.4 地图构建基础:从点云到占据栅格

地图构建,就是把传感器看到的世界,变成机器人能理解的数学模型。

我们这门课主要用 占据栅格地图。说白了,就是把空间划分成一个个小格子,每个格子有三种状态:

  • 占据(黑色): 这里有障碍物,不能走。
  • 空闲(白色): 这里安全,可以走。
  • 未知(灰色): 还没探测到,不知道能不能走。

为什么用栅格地图?因为它简单、直观、计算快。Nav2 的代价地图,就是基于这个原理做的。

下面这张图,展示了我们这门课的核心知识体系:

Nav2 传感器融合地图构建知识体系 传感器输入 里程计输入 IMU 输入 传感器融合核心 扩展卡尔曼滤波 (EKF) / 图优化 SLAM 建图 (slam_toolbox) Nav2 导航与代价地图 最终输出:高精度占据栅格地图

1.5 ROS2 环境搭建与验证

工欲善其事,必先利其器。我们得先把 ROS2 环境搭好。

我个人推荐使用 Ubuntu 22.04 + ROS2 Humble。这个组合最稳定,社区支持也最好。

1.5.1 安装步骤(精简版)

# 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. 安装 ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop

# 4. 安装 slam_toolbox 和导航相关包
sudo apt install ros-humble-slam-toolbox
sudo apt install ros-humble-nav2-*

注意: 安装过程中如果遇到依赖冲突,不要慌。先运行 sudo apt --fix-broken install 修复依赖。我遇到过好几次因为网络问题导致下载中断,多试几次就好。

1.5.2 验证环境是否成功

装完之后,我们跑一个最简单的例子来验证:

# 打开终端1,启动 turtlesim
ros2 run turtlesim turtlesim_node

# 打开终端2,启动键盘控制
ros2 run turtlesim turtle_teleop_key

如果你能看到一只小海龟,并且能用键盘控制它移动,恭喜你,ROS2 环境搭建成功了!

我的习惯: 每次搭建新环境,我都会先跑一遍 turtlesim。它虽然简单,但能快速验证 ROS2 的核心通信机制是否正常。如果 turtlesim 都跑不起来,那后面 Nav2 肯定也跑不起来。

1.5.3 验证 Nav2 相关包

我们还需要确认 Nav2 和 slam_toolbox 是否安装正确:

# 查看 Nav2 包列表
ros2 pkg list | grep nav2

# 查看 slam_toolbox 包
ros2 pkg list | grep slam

如果能看到 nav2_bringup、nav2_planner、slam_toolbox 等包名,说明安装成功。

1.6 本章小结

这一章,我们搞清楚了三个核心问题:

  1. 为什么要学这门课? 因为单一传感器建图不靠谱,融合才是王道。
  2. Nav2 是什么? 一个强大的导航框架,我们用它来承载融合建图功能。
  3. 环境怎么搭? 用 Ubuntu 22.04 + ROS2 Humble,跑通 turtlesim 就算成功。

嗯,基础打牢了,后面才能盖高楼。下一章,我们就要开始真正动手,把激光雷达和 IMU 的数据融合起来。准备好了吗?