作者:张哲,纽约州立大学机器人方向博士,清华大学自动化系本科。研发方向:地图重建、位置跟踪、机器人自主避障导航、设备端和云端的算法优化。2009-2014年在微软,2014-2016年初在Magic Leap工作。
责编:周建丁(zhoujd@csdn.net)
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2016年《程序员》
SLAM技术随着最近几年机器人、VR、AR的火爆而为人所知,在传感器、算法、软件、硬件等方向都有不同的进展。本文简要解释了SLAM的定义和分类,具体分析了当前VR、AR、机器人等各种应用需要什么类别的SLAM,探讨了在实际应用中实现SLAM的一些工程细节,并展望了SLAM刚刚开始的未来。
什么是SLAM
SLAM是什么?根据Wikipedia的介绍:“Simultaneous Localization and Mapping (SLAM) is the computational problem of constructing or updating a map of an unknown environment while simultaneously keeping track of an agent’s location within it.”最简单而又直指本质的理解,SLAM指的是当某种设备(如机器人、VR设备等)来到一个完全陌生的环境时,它需要精准地建立时间和空间的对应关系,并能完美地回答以下一系列问题:我刚才在哪里,现在在哪里?我看到了什么,现在看到的和之前看到的有哪些异同?我过去的行走轨迹是什么?我现在看到的世界是什么样子,和过去相比有怎样的变化?我的轨迹抖吗,我的位置飘吗?我还能跟踪到自己的轨迹吗,如果我丢了应该怎么办?我过去建立的对世界的认识还有用吗?我能在已有世界的抽象里快速对我现在的位置进行定位吗?
SLAM的主要分类
robotic SLAM
从最早期军事用途的雏形到后来的机器人应用,业界对SLAM有了进一步的研究。robotic SLAM主要包括卡尔曼滤波和粒子滤波。卡尔曼滤波在很多工程领域中都有应用,最早期用于机器人的卡尔曼滤波,默认系统是线性的且带高斯分布的噪音,经典的卡尔曼滤波可以直接给出最优解,但现实比这复杂太多,所以有了卡尔曼滤波的很多变种。而如果不是线性系统或噪音不是高斯分布,那么粒子滤波算法生成很多粒子,并且每个粒子是模型状态的一种可能,再根据观察和更新得到粒子群的状态趋于一致的收敛结果。当然粒子滤波也有实际的问题,比如经典的粒子衰减问题(particle depletion),和工程上如何控制准确性和收敛速度很好平衡的问题。
PTAM
PTAM(Parallel Tracking and Mapping)架构更多的是系统上的设计,姿态跟踪(Tracking)和建立地图(Mapping)两个线程是并行的,这实质上是一种针对SLAM的多线程设计。PTAM在当前SLAM领域看来是小儿科,但在当时是一个创举,第一次让大家觉得对地图的优化可以整合到实时计算中,并且整个系统可以跑起来。具体而言,姿态跟踪