SLAM 基础概念、KD 树加速搜索和视觉图像处理入门。
SLAM 基础
SLAM(Simultaneous Localization and Mapping),同时定位与建图。
经典框架
- 传感器信息读取:相机/激光雷达数据采集与预处理
- 前端里程计:估算相邻帧之间的运动
- 后端优化:处理里程计误差和回环检测信息,优化全局地图
- 回环检测:判断是否到达过先前位置
- 建图:根据轨迹建立地图
传感器方案
| 传感器 | 优势 | 局限 |
|---|---|---|
| 单目相机 | 成本低、结构简单 | 缺少绝对尺度 |
| 双目相机 | 可通过基线计算深度 | 算力要求高 |
| RGB-D 相机 | 直接获取深度 | 室外受阳光干扰 |
| 激光雷达 | 精度高、稳定 | 成本高、信息稀疏 |
FAST-LIO2
- 基于迭代卡尔曼滤波的 LiDAR-惯性里程计
- 融合 IMU 和激光雷达数据
- 实时性好,适用于无人机和移动机器人
三维空间刚体运动
旋转表示
- 旋转矩阵 $R \in SO(3)$:$3\times3$ 正交矩阵,$\det R = 1$
- 欧拉角:roll/pitch/yaw,直观但有万向锁
- 四元数:无奇异性,适合插值
- 旋转向量:方向+角度
刚体变换
$$T = \begin{bmatrix} R & t \ 0 & 1 \end{bmatrix} \in SE(3)$$
- $R$ 为旋转矩阵,$t$ 为平移向量
- $SE(3)$ 为特殊欧氏群
KD 树
KD 树(K-Dimensional Tree)是一种用于多维空间搜索的二叉树结构。常用于 SLAM 中的最近邻搜索(ICP 匹配、回环检测)。
构建原理
- 选择方差最大的维度作为划分维度
- 取该维度的中位数作为划分点
- 左右子空间递归构建
搜索
- 从根节点向下搜索到叶子节点
- 回溯检查另一侧子树是否有更近的点
- 时间复杂度从 $O(n)$ 降到 $O(\log n)$(平均)
计算机视觉基础
色彩分割
将图像按颜色划分为不同区域,常用于目标检测。
形态学处理
- 膨胀:扩大亮区域
- 腐蚀:缩小亮区域
- 开运算:先腐蚀后膨胀(去除小噪点)
- 闭运算:先膨胀后腐蚀(填充小孔洞)
深度相机
- 结构光(Kinect v1):投射编码图案
- ToF(Kinect v2):测量光的飞行时间
- 双目立体:通过视差计算深度
深度相机在 ROS 中通过
depth_image_proc处理,输出点云数据。