简化视觉SLAM应用程序的开发
即时定位与地图构建(SLAM)是指设备(如机器人)利用传感器数据构建周围环境的图像,并同时确定自身在环境中的位置的过程。在实施SLAM时,可使用多种不同的软件算法和传感器,包括相机、声呐、雷达、激光雷达与惯性测量单元(IMU)所获得的基础位置数据。
便宜的小型相机的使用使单目视觉SLAM系统流行起来,该系统利用单一个标准相机执行定位与地图构建功能。这种视觉SLAM系统在一系列机器人中均有应用,包括火星漫游车和着陆器、农场机器人、无人机以及可能在以后出现的无人驾驶车辆。SLAM系统在GPS不可用时也具有优势,例如在室内或GPS准确性受建筑影响的大城市。
本文描述基础视觉SLAM过程,涵盖目标识别和跟踪以及错误更正涉及的模块与算法。本文还讨论了利用专用DSP执行SLAM计算和功能的好处,并以CEVA-SLAM SDK开发工具包为例说明了采用该开发方式的优点。
直接SLAM与基于特征的SLAM
可使用多种方法实施视觉SLAM,但所有方法整体相同,即通过连续相机帧跟踪设置点,使3D位置形成三角形,同时利用该信息粗略估计相机位姿。此外,SLAM系统将不断利用复杂算法最大化缩小投影点与实际点之间的差异-重投影误差。
根据对接收图像中获得信息的不同使用方式,可将视觉SLAM系统划分为直接或基于功能的SLAM系统。直接SLAM系统对比整张图像,提供丰富的环境信息,使构建的地图更加详细,但处理量大,而且速度慢。本文着重讨论基于特征的SLAM法,该方法搜索所设特征(如角点和“斑点”)的图像,仅基于这些特征估计位置与周围环境。尽管基于特征的SLAM法未使用图像提供的大量有用信息,但这促进了过程的简化,使计算更易实施。
图1:直接SLAM与基于特征的SLAM的对比
视觉SLAM过程
基于特征的SLAM的主要步骤是从输入图像中提取一组稀疏特征、将通过不同相机位姿获得的特征进行匹配,以及通过最小化特征重投影误差(指在估计的相机位姿下,某一点的跟踪位置与预期位置的差异)解决SLAM问题。
这些步骤通过实施基于特征的SLAM的一系列常用构件(如下所述)完成。视觉SLAM不断发展,促成了大量研究,为各模块提出和开发了多种算法。每种算法均有各自的优缺点,取决于SLAM实施的确切性质。以下描述了部分当前最常用的算法。
特征提取(如图2所示)指以紧凑特征向量形式高效表示图像中的有用信息,如角点、边缘、斑点和更加复杂的对象(门窗)。常用的特征提取算法包括高斯差(DoG)和加速分割测试获得特征(FAST9)(因计算效率高而适用于实时视频处理的角点检测方法)。
图2:SLAM特征提取
特征描述将提取的每个特征周围的区域转化为可匹配其它描述子的紧凑描述子。特征可通过(例如)外观或特征点周围区域内的像素强度加以描述。ORB和FREAK是常用的两种特征描述子算法。
特征匹配指将提取的特征(描述子)在多个帧上进行匹配。将第一张图中的所有特征与第二张图中的特征进行对比,以匹配两张图中的特征。由于可在硬件中高效实施对数据位组(如向量)的异或和数据位计数,汉明(Hamming)间距功能常用于特征匹配。汉明距离指示两向量中不同数位的数量,汉明距离越小,匹配度越高。
环路闭合是SLAM过程的最后一步,确保SLAM解决方案的一致性,尤其是在定位和地图构建操作长期执行时。环路闭合检测非相邻帧提供的相同画面,在帧之间添加约束,从而减小位姿估计的累计漂移。与其它视觉SLAM模块相同,现已为环路闭合开发了多种算法,最常用的算法包括光束法平差、卡尔曼滤波与粒子滤波。
SLAM实施面临的挑战
视觉SLAM处理过程包含的计算量极大,对传统基于CPU的实施造成了较大负载,导致了高耗电量与低帧频,进而影响了准确性与电池寿命。新兴SLAM应用程序的开发商需要能够实现高度集成与低耗电量的解决方案,在设计中越来越多地使用专用视觉处理单元(VPU)
VPU是一种专门设计用于加速机器视觉任务(如SLAM)的微处理器,可用于分担主应用程序CPU的视觉处理量。VPU(如图3所示的CEVAs CEVA-XM6)包括耗电低、功能强大的算术逻辑单元、强大的MAC能力、高吞吐内存存取与专用视觉指令等特点,还支持图像处理应用需要的强大浮点能力。
图3:CEVA XM6视觉处理单元
即使使用了VPU,视觉SLAM开发商仍须克服若干其它挑战,包括为不同SLAM模块创建高效代码和将VPU与主处理器连接。
对于嵌入式应用程序,执行速度与耗电量必须得到优化,因此创建高效代码至关重要。视觉SLAM模块的编码任务十分复杂,可能需要获取、存储与处理大量数据。以特征匹配为例,描述子以128位向量的形式保存在存储器中。为将特征在连续帧上进行匹配,一般必须将200个特征与2000个候选逐一对比,也就是必须实施400,000次匹配操作。匹配操作明显需要大量存储空间,但即使样本数据量较小,高昂的数据获取与格式化费用也会超过编码算法的高效性带来的利益。
Bundle adjustment是涉及复杂线性代数的另一算法,需要处理大矩阵。现有多种技术可优化上述以及其它VSLAM模块的编码过程,但实施这些技术需要掌握较专业的视觉类专业编码知识。
内存管理是图像处理面临的另一挑战。从图像采集的数据一般保存在连续存储位置,而随机从图像中选取区块意味着处理的不是保存在连续存储位置的数据。执行特征匹配的软件程序必须从非连续存储位置检索描述子,这进一步增大了设置费用。
VSLAM开发工具
上市速度在当今环境下至关重要,但开发商不一定有时间掌握实施高效视觉处理代码需要的技能和知识。幸运的是,现有多种工具可用于加快高性价比SLAM应用程序的上市过程,而且有提供视觉软件库、优化硬件和集成工具的应用程序开发工具包,使开发商能够轻松将视觉任务从CPU转移到VPU。
CEVA SLAM SDK(如图4所示)是著名的应用程序开发工具包。
图4:CEVA SLAM SDK
CEVA SLAM SDK基于CEVA XM6 DSP和CEVA NeuPro AI处理软件,使SLAM实施能够被高效地集成到低功耗嵌入式系统中。SDK包含一系列构件,包括提供特征检测和匹配的高效代码以及Bundle adjustment的图像处理库,还支持线性代数、线性方程求解、快速稀疏方程求解与矩阵操作。
CEVA XM6是优化的图像处理硬件,包括多种创新功能,例如解决非连续存储访问问题的平行加载指令和用于执行汉明距离计算的独特专用指令。SDK还包括CPU接口,使开发商能够轻松将视觉处理功能集成到主应用程序CPU中。
SDK作为开发工具的性能可以得到如下展示,一个以每秒60帧的帧速运行的完整SLAM跟踪模块的参考实现,测得的耗电量仅86mW。
结论
视觉SLAM系统在诸如农场机器人和无人机等一系列应用中越来越受欢迎。有许多替代方法可用于实施视觉SLAM,但随着嵌入式应用程序的广泛应用,高效编码与低耗电量成为了重要考虑因素。
尽管开发商常使用VPU从CPU分担计算密集的视觉处理任务,但生产高效代码与管理VPU和CPU间的接口仍面临重大挑战。
鉴于上市时间是一大驱动因素,开发商可通过集成到SLAM专用开发工具包(例如CEVA SLAM SDK)中的能力加快产品开发。