作者 | 张哲
责编 | 何永灿
SLAM最近三年随着算法不断成熟、硬件不断增强、应用场景逐渐丰富,在学术界和工业界都有长足发展。在六月初新加坡刚刚结束的国际机器人顶级会议之一的ICRA 2017 ,机器人研究的方向和种类繁多,但计算机视觉、SLAM(同步定位和建图)、建图、空中机器人(泛指各类无人机)、距离感知、RGB-D感知这几个话题的track加在一起已经占到所有track的一半左右。
笔者根据这次的大会所见所闻和自己在机器人领域十多年(尤其是最近一年多在PerceptIn全面推进软硬件一体化智能感知方案的产品化落地)的切身感受,在这里和大家很有针对性地分享现有各个种类的SLAM的工程细节(包括实现、优化、方案、选型、经验等等),以及从工业界的角度对SLAM相关技术的看法和思考。本文纯属个人观点,仅供大家参考。SLAM技术基本知识的详细介绍请参见笔者之前的文章,《SLAM刚刚开始的未来》。
文末附全文相关paper下载链接。
稀疏SLAM指的是前端用从图像提取来的较稀疏的特征点,而不是从深度摄像头来的稠密点云,或不提取特征点直接试图计算深度的直接法(后面有专门的讨论)。
稀疏SLAM发展到今天,在理论和实现上已经趋于成熟,借助六轴陀螺仪IMU(Inertial Measurement Unit)的视觉惯导融合的紧耦合方法已经成为标配。在几何方面,稀疏SLAM从前端到后端已经做得非常细致,以致于大量算法微调的细节出现在论文里面,在这里举一些比较典型的例子:
特征点从哪里来的问题分为了KLT(Kanade-Lucas-Tomasi)pipeline和FREAK(Fast Retina Keypoint)pipeline:前者的原理是基于亮度恒定、时间连续、空间一致来对像素做跟踪匹配,这种方法几何信息算的好、跟踪时间长,但是会飘,后者相对不飘但跟踪时间短,其原因是FREAK的DoG(Difference of Gaussian)极值在相邻帧重复性差。特征点提取在Intel Core i7的台式机上640×480分辨率的图一般都在10ms以内,SSE优化后会更快,在一般的主流手机平台上如果做了NEON或GPU实现跟上相机的30fps帧率一般都没有问题。
特征点被如何用的问题分为了SLAM特征点和MSCKF特征点:SLAM特征点被加入状态向量并被更新,MSCKF特征点在测量的相关公式中被忽视(marginalize)掉来生成位姿之间的约束。这样做的目的在于既保持了准确性又照顾到了处理时间不会太长。
诸如此类还有很多如何用IMU来选好的特征点,如何在后端优化中融合IMU带来的约束,sliding window有多长,哪部分用NEON/GPU实现了,标定里面哪个参数最重要,预积分的处理在还算合理的情况怎么能更合理等等。
代表文章
《A Comparative Analysis of Tightly-coupled Monocular, Binocular, and Stereo VINS》:明尼苏达实验室的深入细致的对单目,双目但不重叠,重叠双目系统的性能分析,大量工程实现细节,还有和其他SLAM系统的对比,必读。
然而即使稀疏SLAM算法日趋成熟,但对硬件的依赖度反而变大,深层次的原因是因为算法抠的非常细,对硬件的要求也都是非常细致并明确的,比如大家偏好大视角镜头但大视角的边界畸变最严重,到底好不好用、怎么用、用什么模型;比如相机和IMU的同步最好是确定的硬件同步,不但希望能保证顺序和微秒级的精确,还希望能在每帧图的那一刹那正好有一帧IMU这样预积分才最准确;比如需要看的远又能拿到准确的尺度,那必须基线拉大,那么拉到多大呢,著名的做VINS(Visual Inertial Navigation System)的明尼苏达大学自己搭的硬件是26厘米基线的双目配上165度的大视角镜头,堪称是跟踪神器。
再比如宾州大学这次在ICRA发布的供SLAM跑分的数据集,采集数据用的是自己搭的一套硬件,由两个第二代Tango平板,三个GoPro相机,和一个VI Sensor(做这个的公司早已被GoPro收购),再加上AprilTags的marker跟踪,融合后的位姿信息作为真值。PerceptIn的第一代双目惯导模组在大会的展台区引来大家争相询问并购买,可见SLAM和各类基于计算机视觉的研究人员对一个好用的硬件需求非常大。
稠密SLAM重建目前也相对比较成熟,从最开始的KinectFusion(TSDF数据结构 + ICP)到后来的InfiniTAM(用哈希表来索引很稀疏的voxel), ElasticFusion(用surfel点表示模型并用非刚性的图结构),DynamicFusion(引入了体翘曲场这样深度数据通过体翘曲场的变换后,才能融入到TSDF数据结构中,完成有非刚性物体的动态场景重建)都做的比较成熟。工业界实现非常好的是微软的HoloLens,在台积电的24核DSP上把mesh simplification这些操作都搞了上去。
这届ICRA上稠密SLAM重建这部分,很明显看出大家仍然很喜欢基本的几何图元,比如平面、法向量,这里不一一赘述。着重说一下让笔者感到惊喜的是很基础但非常重要的,给地图的数据结构仍然有很大程度的创新,比如这篇《SkiMap: An Efficient Mapping Framework for Robot Navigation》,其本质是“Tree of SkipLists”(笔者不知道该翻译为“跳表树”还是“树跳表”),3D空间XYZ各一层,前两层的每个节点其实就是一个指针指向下一层,最后那层才是voxel有真正的数据,而各层有个隐藏层是跳表,保证了查找插入删除都是O(logn)。这个数据结构对机器人非常实用,尤其是不同高度下的快速深度检索和障碍物检测。
从工程角度看,稠密SLAM在台式机上已经能在不用GPU的情况下做到实时。在手机上如果要做到实时,需要有针对性地加速,比如预处理、计算法向量,如果是被动双目在stereo block matching这类对每个像素都需要的计算就非常适合用手机GPU。比较好的参照标准是ISMAR 2015(International Symposium on Mixed and Augmented Reality)的这篇论文《MobileFusion: Real-time Volumetric Surface Reconstruction and Dense Tracking On Mobile Phones》,在iPhone 6上处理320×240分辨率的图,用CPU和GPU能够做到位置跟踪和3D重建都能达到25fps。
一句话来解释Event Camera(暂且直译为事件相机)的原理,就是事件相机的每一个像素都在独立异步地感知接收光强变化。对每个像素来说,“事件”的本质就是变亮或变暗,有“事件”发生才有输出,所以很自然的没有了“帧率”的概念,功耗和带宽理论上也会很低。另一方面,事件相机对亮度变化非常敏感,动态范围能到120dB,甚至在对快速旋转等剧烈运动的响应比IMU还要好。这种新的传感器自然被很多做位置跟踪的研究者们所青睐,ICRA上尤其是欧洲的几个有名的实验室都在玩。然而从工业界相对实际的角度看,这个相机有以下三个致命点,如果不解决就无法大量普及:
贵,现在的价格是几千美元,现场有人说量产了就能一美元,这显然没法让人信服,CMOS已经应用这么多年,现在一个global shutter的CMOS也不可能只要一美元,虽然笔者专门到做事件相机的公司展台去详细聊了价格的问题,得到的答案是未来两三年内随着量产是有可能降到200-300美元的;
大,因为每个像素的电路十分复杂,而每个像素本身的物理大小是20微米左右,相比于很多CMOS,6μm×6μm都算很大了,那么就直接导致事件相机的物理尺寸很大但像素其实很低(比如128×128);
少,“少”是说信息维度信息量不够,事件相机的事件一般都在明暗分界线处,所以现场有人就管它叫“edge detector”,但在计算机视觉整体尤其是结合深度学习后都在往上层走的大趋势下,只有一个事件相机是远远不够的,这也是为什么事件相机的厂家也在整合IMU和传统相机做在一起,但这样的话成本更是居高不下。
一句话来解释Direct Method(直接法)的原理,就是在默认环境亮度不变(brightness consistency assumption)的前提下,对每个像素(DTAM)或感兴趣的像素(Semi-Dense LSD SLAM)的深度通过inverse depth的表达进行提取,并不断优化来建立相对稠密的地图,同时希望实现相对更稳定的位置跟踪。相比于研究了二十多年的基于特征点的方法,直接法比较新,只有五六年的历史,下面是ICRA上和直接法有关的几篇论文,主要都是通过融合额外的传感器或方法进行对原有直接法的改进。
《Direct Visual-Inertial Navigation with Analytical Preintegration》:主要讲的是连续时间意义下的imu kinematic model的闭式解。
《Direct Visual Odometry in Low Light Using Binary Descriptors》:不再基于亮度不变的假设,改用基于二进制特征描述不变的假设。
《Direct Monocular Odometry Using Points and Lines》:用edge把基于特征点和基于直接法的两种方法结合起来。
《Illumination Change Robustness in Direct Visual SLAM》:Census效果最好。
那么直接法到底能否大范围普及呢?笔者从工业界“比较俗比较短视比较势利”的角度来看,直接法两边不靠非常尴尬:
直接法没有证明在位置跟踪方面比前端用传统特征点的基于滤波(MSCKF,SR-ISWF)或者基于优化(OKVIS,VINS-Mono)要有优势,如果环境恶劣是由于光线变化,那么直接法的基于环境亮度不变的假设也不成立,如果环境恶劣是由于超级剧烈的高速运动,那么直接法也是得通过IMU融合才能争取不跟丢。
直接法的直接好处是地图相对稠密,但相对稠密是针对于基于特征点的稀疏而言,如果这个地图是为了做跟踪,那么基于特征点的方法已经证明可以做得很好了,如果是为了3D重建,那么大可以用一个深度相机,如果是被动双目的话,被动双目还原出稠密深度本身也在大幅度进步。
从运算量来说不论每个像素都计算的DTAM还是只计算一部分的Semi-Dense LSD SLAM都比稀疏SLAM的前端运算量要大,当然可以用GPU并行加速,但如果在手机平台上实现VR/AR,用GPU意味着和图形渲染抢资源。所以笔者认为直接法够新颖,但新颖的不够强大,或者说不够强大到有落地价值。
语义英文为Semantics,是意义和含义的意思。语义SLAM顾名思义就是超出点线面的几何意义,而再进一步得到更深层次的环境和物体信息,比如我在一个屋子走一圈,SLAM告诉你精准的轨迹位置信息和精准还原出来的一堆3D点,但语义SLAM还能够告诉你沿路看到了哪些物体和这些物体的精准位置,这个不但从商业的角度来说想象空间和商机非常大,而且对终端用户来说更实用更有意义,如果说稀疏SLAM的稀疏地图点是为了跟踪和重定位,稠密SLAM的稠密点云或者mesh是为了场景重建,那么语义SLAM才是真的全方位“环境重建”。
ICRA上的顶级语义SLAM paper已经证明初步验证和实现已经完成,大范围普及最多两年。举两篇文章为例:
《Probabilistic Data Association for Semantic SLAM》:ICRA 2017五篇最佳论文之一,在数学上很有条理很严谨地解答了SLAM几何上的状态(sensor states)和语义的地标(semantic landmark)一起构成的优化问题,而物体检测方面没有用fancy的CNN,而是deformable parts model detection(但也是比较新的2013年的算法),更进一步说这篇文章非常明确地定义问题并给出了数学推论和具体实现结果:from t = 1, …, T, given inertial (IMU),geometric(稀疏特征点), semantic (识别的物体), estimate the sensor state trajectory(传感器轨迹状态) and the positions and classes of the objects in the environment(识别的物体种类和位姿) 这可能也是很多搞视觉、几何、机器人的研究人员仍然甚至越来越喜欢ICRA的原因:关心数学验证,重视几何推论,和硬件紧密结合,对深度学习持开放态度,但在意到底解决了什么实际问题。
《SemanticFusion: Dense 3D Semantic Mapping with Convolutional Neural Networks》:这篇文章相比SLAM算法方面的创新,更偏重怎样结合CNN搭建一套稠密语义SLAM的系统。SemanticFusion架构上主要分为三部分:
(1) 前面提到过的ElasticFusion这种稠密SLAM来计算位姿并建出稠密地图;
(2) CNN用RGB或RGBD图来生成一个概率图,每个像素都对应着识别出来的物体类别;
(3)通过贝叶斯更新来把识别的结果和SLAM生成的关联信息整合进统一的稠密语义地图中。
在一个Intel Core i7带Nvidia Titan Black GPU的台式机上,end-to-end可以做到每秒25帧。需要着重说明的是,这篇文章的结果验证了用一套优秀的SLAM系统可以提供帧与帧之后像素级别的2D识别结果和3D地图之间的关联,而且和之前的SLAM++需要事先限定好可识别的物体类别相比,SemanticFusion识别物体的类别可以来自训练好的CNN的海量数据集并且最后标识了整个场景的所有信息。
通过双目视差生成稠密深度由来已久,但在这届ICRA上我们仍然看到有很多学术创新,在PerceptIn的展台上,很多学术界和工业界的朋友来询问这个问题。虽然双目对纹理少或者不够好的地方很乏力,而且又有易受光线环境影响的致命缺点,但这个问题仍然非常有意义:
功耗,各种深度传感器的功耗各异,但一般都至少2W,是双目的两倍左右。
距离和视场角,双目摆放设计相对灵活,ICRA上专门有一篇文章《Real-time Stereo Matching Failure Prediction and Resolution using Orthogonal Stereo Setups》分析一个横向双目加一个竖向双目的摆放距离位置对结果的影响。在距离上双目更是可以拉大基线看的更远(Uber无人车的配置是前后排各六个相机),而深度传感器很难在户外看得很远。
成本,双目成熟度高而且量相对大些所以成本会低一些。
最后一点双目生成稠密深度仍然在不停的进步。
举两篇文章为例。
《LS-ELAS: Line Segment based Efficient Large Scale Stereo Matching》:作者改进的ELAS(efficient large-scale stereo matching),ELAS说的是通过取支持点(support point)并进行三角剖分再对视差进行插值计算从而避开了其他一些算法需要做全局优化,而LS-ELAS通过好的线段(尤其是竖直的,水平的相对质量差,因为在epipolar line上不好找)来更好的选择支持点。作者号称比ELAS又好又快,现场有人质疑LS-ELAS额外有边缘检测而ELAS是3x3或5x5采样所以肯定更快,作者的解释是虽然边缘检测耗时间,但结果是选择出来的支持点质量要好很多,而且很多选了也不行的根本就没选,这样支持点其实比ELAS少很多所以计算时间省了回来,笔者觉得是非常有道理的。在Intel Core i7的台式机上处理大概VGA分辨率LS-ELAS能达到60fps,越大分辨率LS-ELAS相比ELAS的速度优势越明显。
《Robust Stereo Matching with Surface Normal Prediction》:一句话解释就是深度学习辅助双目匹配。事实上之前就有类似尝试,比如Yann LeCun通过训练MC-CNN来提高patch similarity,而不是传统的计算匹配成本的方法,这个Deep Learning来打败传统patch/descriptor的思路非常典型。这篇文章的架构非常复杂:先来正常的stereo matching,再计算视差的自信度,再用CNN帮助预测法向量,再来做segmentation,再把边缘特征结合进来,最后大整合出结果,中间还有一些迭代的步骤。这套复杂系统的特点是效果非常好,计算非常慢,694×554的图,SGM是0.34秒,MC-CNN是20秒,这个方法是这些时间额外还需要99秒,经过很多GPU加速后在比较强大的台式机又用上GPU的情况下最后是0.75秒,仍然很慢,但确实比SGM效果好。
大方向上学术界SLAM的相对成熟,必然伴随着工业界很大量级的产品中集成达到产品化程度的SLAM方案,那么在工业界SLAM未来走势会是什么样子呢?笔者有以下几点看法:
所谓的产品化,就是在价格可以被产品接受的前提下算法够用够稳定又能提高已有的或提供全新的用户体验。而SLAM太重要会导致大厂都想拥有,但有能力搞高质量全套的就那么几家,这几家也能搞到业界最好,比如Microsoft HoloLens、Google Tango、苹果ARKit,很大的原因是在这方面有积累的大公司有足够多的人力财力铺上去解决大量的工程细节,但即使实力强大到这几家也都紧密配合自己的硬件,也没法给出一个普适方案。
会有很多出货量极大但优势不在算法端或者说不需要在算法和软件的公司,比如各大扫地机厂商,这些厂商只需要在创业公司里面挑一家最好的方案就好了,这个时候就非常考验团队的算法成熟度、软件架构、方案选择、资金储备、人才储备、是否容易合作,而最终就是看能不能快速解决所有的工程细节完成产品化;
留给国内外的SLAM初创公司做单点技术的空间不大,这个现象不只出现在SLAM上,也会出现在任何一个技术的产品化道路上,然而在SLAM和“泛感知”这一块相对比较特殊的是需要SLAM和智能感知的产品和方向太多,而感知对硬件的依赖又非常大,整体市场尤其每个细分领域远远没有达到饱和的阶段,有大量工程产品化的细节需要解决才能真正落地,对初创公司是非常大的挑战,也是非常大的机会。
SLAM刚刚开始的未来,每一步都是一堆工程细节。
相关论文下载链接:
《MobileFusion: Real-time Volumetric Surface Reconstruction and Dense Tracking On Mobile Phones》
https://www.robots.ox.ac.uk/~mobile/Papers/2015ISMAR_ondruska.pdf
《Direct Visual-Inertial Navigation with Analytical Preintegration》
http://ieeexplore.ieee.org/abstract/document/7989171/
《Direct Visual Odometry in Low Light Using Binary Descriptors》
http://frc.ri.cmu.edu/~kaess/pub/Alismail17ral.pdf
《Direct Monocular Odometry Using Points and Lines》
https://arxiv.org/abs/1703.06380
《Illumination Change Robustness in Direct Visual SLAM》
http://ieeexplore.ieee.org/document/7989525/
《Probabilistic Data Association for Semantic SLAM》
http://www.cis.upenn.edu/~kostas/mypub.dir/bowman17icra.pdf
《SemanticFusion: Dense 3D Semantic Mapping with Convolutional Neural Networks》
http://www.imperial.ac.uk/media/imperial-college/research-centres-and-groups/dyson-robotics-lab/mccormac_etal_icra2017.pdf
《Real-time Stereo Matching Failure Prediction and Resolution using Orthogonal Stereo Setups》
http://people.inf.ethz.ch/dominiho/publications/ICRA_2017_ortho_stereo.pdf
《LS-ELAS: Line Segment based Efficient Large Scale Stereo Matching》
http://www.cogsys.cs.uni-tuebingen.de/publikationen/2017/JellalICRA17.pdf
《Robust Stereo Matching with Surface Normal Prediction》
http://frc.ri.cmu.edu/~kaess/pub/Zhang17icra.pdf
作者简介:张哲,PerceptIn联合创始人,纽约州立大学机器人方向博士。研发方向为地图重建、位置跟踪、机器人自主避障导航、设备端和云端的算法优化。2009-2014年在微软,2014-2016年初在Magic Leap工作。
本文来源于《程序员》,未经允许不得转载。
点击【阅读原文】订阅《程序员》
CSDN AI热衷分享 欢迎扫码关注