第一讲:课程导论与预备知识

各位同学好,我是你们这门课的主讲。在机器人行业摸爬滚打了十几年,从最早的激光SLAM做到现在的多传感器融合,踩过的坑确实不少。今天咱们开始第一讲,先把地基打牢。

说实话,多传感器融合路径规划这个方向,这几年越来越热。自动驾驶、AGV、无人机,哪个领域都离不开它。但很多新手一上来就盯着算法看,忽略了基础,结果后面越学越吃力。我个人习惯是,先把整个知识地图铺开,再一步步深入。

1.1 什么是多传感器融合路径规划?

说白了,就是让机器人知道「我在哪」、「周围有什么」、「该怎么走」这三个问题。单个传感器总有短板——激光雷达怕雨雾,相机怕光照变化,IMU有漂移。多传感器融合,就是取长补短。

举个例子。我之前做AGV项目时,只用激光雷达做定位,结果在长走廊里经常丢失。后来加了轮式里程计和IMU,定位稳定性明显提升。嗯,这就是融合的价值。

1.2 应用场景

我挑三个最典型的场景说说:

  • 自动驾驶:需要融合GPS、IMU、激光雷达、摄像头、毫米波雷达。城市道路中,GPS信号会被高楼遮挡,这时候就需要视觉和激光雷达做联合定位。我在测试时遇到过GPS跳变十几米的情况,全靠融合算法兜底。
  • AGV/AMR:工厂里的移动机器人。环境相对结构化,但金属货架会干扰激光雷达。我建议至少融合激光、IMU和轮式编码器。成本可控,效果也够用。
  • 无人机:空中飞行器,动态性强。GPS室外可用,但室内或桥下就得靠视觉+IMU。我记得有个项目,无人机在桥底飞行,GPS完全失效,全靠VIO撑着。

1.3 课程大纲与学习路径

这门课一共30章,我按「基础→核心→进阶→实战」四个阶段来组织:

阶段章节核心内容
基础1-5数学基础、ROS2环境、传感器模型、坐标变换
核心6-15卡尔曼滤波、图优化、多传感器时空同步、路径规划算法
进阶16-25语义SLAM、动态环境规划、故障检测与降级策略
实战26-30完整项目:自动驾驶泊车、AGV调度、无人机巡检

学习路径上,我建议你按顺序来。跳过基础直接看核心,很容易卡住。我曾经带过一个实习生,上来就啃图优化,结果连雅可比矩阵都推导不明白,又回头补线性代数。

1.4 数学基础

做多传感器融合,数学是绕不开的。但别怕,咱们用到的就两块:

线性代数

  • 矩阵运算:旋转矩阵、变换矩阵、协方差矩阵。说白了就是描述位置和不确定性。
  • 特征值与特征向量:PCA降维、协方差分析时会用到。
  • 最小二乘:优化问题的核心。你想想看,SLAM后端本质上就是个大规模最小二乘问题。

概率论

  • 高斯分布:传感器噪声建模的基础。我习惯用多元高斯分布来描述状态的不确定性。
  • 贝叶斯公式:卡尔曼滤波的底层逻辑。先验+观测=后验,就这么简单。
  • 最大似然估计:参数估计的常用方法。图优化里用的就是它。

小提示:如果你线性代数有点生疏,我建议花一周时间复习一下矩阵求导和坐标变换。概率论重点看高斯分布和贝叶斯公式。这两块搞定了,后面90%的公式你都能看懂。

1.5 编程环境搭建

这门课统一用ROS2 + Python。为什么选ROS2?因为它是目前机器人领域的事实标准,而且支持多传感器数据流的实时处理。Python则方便快速验证算法。

环境要求

  • 操作系统:Ubuntu 22.04 LTS
  • ROS2版本:Humble Hawksbill
  • Python版本:3.10+
  • 依赖库:numpy, scipy, matplotlib, opencv-python, tf-transformations

安装步骤

我整理了一份快速安装脚本,你照着跑就行:

# 1. 安装ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop

# 2. 安装Python依赖
pip install numpy scipy matplotlib opencv-python

# 3. 安装tf相关工具
sudo apt install ros-humble-tf2-tools

# 4. 验证安装
source /opt/ros/humble/setup.bash
ros2 run tf2_echo /map /base_link

注意:我曾经遇到过Python版本冲突的问题。建议用虚拟环境管理依赖,避免和系统Python打架。另外,ROS2的source命令要加到.bashrc里,不然每次开终端都得手动执行。

测试环境

装好后,跑一个简单的发布-订阅测试:

# 终端1:启动发布节点
ros2 run demo_nodes_cpp talker

# 终端2:启动订阅节点
ros2 run demo_nodes_py listener

如果能看到「I heard: Hello World」之类的输出,说明环境没问题。

1.6 避坑指南

最后,分享几个我踩过的坑:

  • 时间同步:多传感器数据必须对齐时间戳。我早期做项目时没注意,结果融合出来的轨迹全是锯齿。后来加了硬件同步才解决。
  • 坐标系统一:每个传感器都有自己的坐标系。一定要先做标定,再谈融合。否则数据都是乱的。
  • 不要过度依赖仿真:仿真环境太干净了。真实场景有噪声、有遮挡、有延迟。我建议尽早拿真实传感器跑数据。

好了,第一讲就到这里。下一讲咱们开始聊传感器模型,把激光雷达、相机、IMU的数学模型讲透。记得先把环境搭好,后面咱们要动手写代码了。