定位与 SLAM:一边走,一边知道自己在哪里
SLAM 同时估计机器人的轨迹和环境地图,用不断重访与校正对抗传感器积分漂移。
定位、建图与 SLAM 的区别
若地图已知,只估计机器人在地图中的位姿,称为定位;若机器人位姿由外部系统准确提供,只把观测写入地图,称为建图;地图和位姿都未知并相互依赖,就是同步定位与建图(SLAM)。位姿影响观测应该写到地图哪里,地图又提供位姿校正依据,因此这是一个“鸡与蛋”问题。
里程计根据轮速或 IMU 从上一时刻推到下一时刻,短时连续,误差会积累。扫描匹配或视觉里程计通过相邻帧对齐估计相对运动,也会缓慢漂移。SLAM 的关键额外信息是回环:机器人再次看到曾经到过的地方时,识别为同一位置,给整个历史轨迹增加一条长距离约束。
前端与后端
SLAM 系统通常分前端和后端。前端处理传感器数据:提取视觉特征、匹配点、对齐激光扫描、生成相对位姿约束,并判断是否发生回环。后端把机器人位姿和地标作为变量,优化所有约束的一致性。
位姿图优化可写为
\(\mathbf T_i\) 是第 \(i\) 个关键帧位姿,\(\mathbf Z_{ij}\) 是前端测得的 \(i\) 到 \(j\) 相对变换,\(\boldsymbol\Omega_{ij}\) 是信息矩阵,表示约束可信度;\(\operatorname{Log}\) 把 \(SE(3)\) 上的位姿误差映射到局部六维向量。优化在所有边 \(\mathcal E\) 上寻找最一致的轨迹。
只含相对约束的位姿图没有绝对原点,整体平移或旋转后残差不变,这称为规范自由度。优化时通常固定第一个位姿或加入先验;若忘记固定,线性系统会秩亏。固定原点只是在选择地图坐标,不会凭空提高轨迹的相对精度。
视觉 SLAM 还常使用重投影误差。三维地标 \(\mathbf P_l\) 经位姿投影到图像的预测像素,与实际观测 \(\mathbf u_{il}\) 的误差为
束调整同时优化相机位姿与地标,使 \(\sum\|\mathbf e_{il}\|^2\) 最小。\(\pi\) 是相机投影函数。真实数据会有误匹配,因此通常加入 Huber 等鲁棒损失,降低异常边影响。
地图并不只有一种
二维占据栅格适合室内轮式导航,容易做碰撞检查;点云地图保留三维几何,但数据量大;体素与截断符号距离场适合三维重建;视觉特征地图只保存可重定位地标,几何外观不完整;语义地图增加房间、门、桌子等对象与关系。
地图选择要服务任务。扫地机器人不必保存每个杯子的三维网格;机械臂抓取却需要局部高精度表面。常见架构把静态全局地图、动态局部代价地图和语义对象层分开,更新周期和生命周期也不同。
回环、数据关联与“灾难性自信”
数据关联判断当前观测对应哪个既有地标或位置。漏掉真实回环会保留漂移,影响是渐进的;接受错误回环会强行把两处不同地点拉到一起,可能使整张地图折叠。外观相似的走廊、重复货架和玻璃反射都会制造假回环。
可靠系统用多级验证:外观候选生成后,再做几何一致性检查、最小内点数、运动合理性和时间/拓扑限制;后端使用鲁棒核或可切换约束。重定位也应输出置信度,并保留“当前未知”的状态。
退化与动态环境
长直走廊对二维激光的纵向位置约束弱;纯白墙对视觉缺少特征;机器人原地匀速旋转时,单目尺度仍不可观;振动会污染 IMU;大量行人会让前端把动态物体当成静态地标。这些都称为可观测性或环境退化。
处理方法包括融合不同传感器、主动改变运动以获得视差、剔除动态物体、利用轮速或先验地图,以及检测退化后降低速度。系统应监控匹配内点数、残差、协方差、求解条件数和传感器健康,而不能只输出一个看似连续的位姿。
工程例子:仓库地图在夜间“弯了”
白天建图时货架通道里有人和叉车,夜间重定位时场景更空;重复货架纹理造成错误回环,后端把相隔几十米的两个通道合并。若系统自动保存覆盖原地图,第二天所有导航都会受影响。
工程上应把建图和在线定位的写权限分开;候选地图先离线验证或与基准锚点比较;关键区域添加可靠几何特征或人工标志;回环需几何验证;发生地图跃变时暂停机器人并保留原版本。地图是一项需要版本、来源和验收的生产资产。