一、课程导论与预备知识: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 的代价地图,就是基于这个原理做的。
下面这张图,展示了我们这门课的核心知识体系:
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 本章小结
这一章,我们搞清楚了三个核心问题:
- 为什么要学这门课? 因为单一传感器建图不靠谱,融合才是王道。
- Nav2 是什么? 一个强大的导航框架,我们用它来承载融合建图功能。
- 环境怎么搭? 用 Ubuntu 22.04 + ROS2 Humble,跑通 turtlesim 就算成功。
嗯,基础打牢了,后面才能盖高楼。下一章,我们就要开始真正动手,把激光雷达和 IMU 的数据融合起来。准备好了吗?