当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 简化视觉SLAM应用程序的开发

简化视觉SLAM应用程序的开发 时间:2020-05-18      来源:原创

同步定位和映射(SLAM)描述了过程(例如机器人)使用传感器数据来构建其周围环境的图片并同时确定其在该环境中的位置的过程。无论是根据部署的软件算法还是所使用的传感器,都有许多不同的实现SLAM的方式,其中包括使用惯性测量单元(IMU)的摄像头,声纳,雷达,LiDAR和基本位置数据。

廉价和小型相机的可用性推动了Monocular Visual SLAM系统的普及,该系统使用单个标准相机执行定位和地图绘制功能。这种可视化SLAM系统可在各种机器人中找到,包括火星漫游者和着陆器,农业领域的现场机器人,无人驾驶飞机以及潜在的自动驾驶汽车。Visual SLAM系统还提供了无法使用GPS的优势,例如在室内区域或大城市中,建筑物的障碍降低了GPS精度。

基本的视觉SLAM流程,涵盖了对象识别,跟踪和错误校正所涉及的模块和算法。讨论了将SLAM计算和功能转移到专用DSP上的优势,并使用CEVA-SLAM SDK开发套件说明了通过遵循这种开发路线可以获得的好处。

直接和基于功能的SLAM

视觉SLAM的实现方法有很多不同,但是都使用相同的整体方法,通过连续的相机帧跟踪设置点以对3D位置进行三角测量,同时使用此信息来近似相机的姿势。同时,SLAM系统不断使用复杂的算法来最大程度地减小投影点与实际点之间的差异(即重新投影误差)。

根据视觉SLAM系统使用来自接收到的图像的信息的方式,可以将其分类为直接的或基于特征的。Direct SLAM系统将整个图像彼此进行比较,从而提供有关环境的丰富信息,从而可以创建更详细的地图,但以处理工作量和速度为代价。本文重点介绍基于特征的SLAM方法,该方法在图像中搜索定义的特征(例如,拐角和“斑点”),并仅基于这些特征来估计位置和周围环境。尽管基于特征的SLAM方法会从图像中丢弃大量有价值的信息,但是权衡是一个简化的过程,在计算上更易于实现。

图1:直接与基于功能的SLAM。

视觉SLAM流程

基于特征的SLAM的主要步骤是从输入图像中提取一组稀疏特征,匹配从不同相机姿势获得的特征,并通过最小化特征重投影误差(点的跟踪位置之间的差异)来解决SLAM问题。以及期望在所有点上获得相机姿态估计值的位置)。

这些步骤使用下面描述的一组构建块来完成,这些构建块对于所有基于功能的SLAM实现都是通用的。Visual SLAM是一个不断发展的领域,需要进行大量研究,并且已经针对每个模块开发并提出了各种算法,每个模块各有利弊,具体取决于SLAM实现的性质。下面的描述提到了当前最流行的算法的子集。

图2中的特征提取是一个过程,可以有效地将图像中的有用信息(例如拐角,边缘,斑点和更复杂的对象,例如门口和窗户)表示为紧凑的特征向量。流行的特征提取算法包括高斯差分(DoG)和加速段测试特征(FAST9),这是一种由于其计算效率而非常适合实时视频处理的拐角检测方法。

图2:SLAM特征提取。

在“特征描述”中,每个提取特征周围的区域都转换为紧凑的描述符,可以与其他描述符匹配。例如,可以通过特征的外观或特征点周围的补丁中像素的强度来描述特征。ORB和FREAK是流行的特征描述符算法的示例。

在特征匹配中,提取的特征(描述符)在多个帧上匹配。通过将第一幅图像中的所有特征与第二幅图像中的所有特征进行比较,可以在两幅图像之间匹配特征。汉明距离功能通常在特征匹配中使用,因为可以在硬件中使用XoR和计数位功能对向量(例如矢量)的位集进行有效地执行。汉明距离可指示两个向量中有多少位不同,这意味着得分越低,匹配越近。

闭环是SLAM过程的最后一步,可确保一致的SLAM解决方案,尤其是在长时间进行定位和映射操作时。闭环通过非相邻帧观察同一场景,并在它们之间添加约束,以减少姿势估计中的累积漂移。与其他可视SLAM模块一样,已开发出多种用于闭环的算法,其中最流行的算法是束调整,卡尔曼滤波和粒子滤波。

VSLAM算法是一个活跃的研究领域,上面是近年来出现的越来越多的技术的示例。基于特征的SLAM方法更适合嵌入式解决方案,因为它们可实现更快的处理速度并更有效地利用内存带宽。此外,基于特征的解决方案在各种条件下都表现出更高的鲁棒性,包括亮度的快速变化,光线不足,摄像机的快速移动和遮挡。

特定算法的选择取决于特定应用程序的特性,包括地图类型,传感器类型,所需的准确度等。许多SLAM系统结合了多种算法,可以最广泛地满足各种情况。

SLAM实施挑战

Visual SLAM处理的计算量非常大,给基于CPU的传统实现方式带来了沉重的负担,导致过多的功耗和较低的帧速率,从而影响了准确性和电池寿命。新兴SLAM应用程序的开发人员需要提供更高集成度和更低功耗的解决方案。他们在设计中越来越多地使用专用视觉处理单元(VPU)。VPU是一种微处理器,具有专门为加速机器视觉任务(例如SLAM)而设计的体系结构,可用于从主应用程序CPU卸载视觉处理。VPU,例如CEVA CEVA-XM6图3中的功能包括低功耗,强大的ALU,强大的MAC功能,高吞吐量内存访问和专用视觉指令等功能。这些设备还将支持图像处理应用程序所需的强大浮点功能。

图3:CEVA XM6视觉处理单元。

但是,即使使用VPU,可视化SLAM开发人员仍必须克服几个挑战,因为为不同的SLAM模块创建有效的代码是一项艰巨的任务,并且也很难将VPU连接到主处理器。

在嵌入式应用程序中,高效的代码创建至关重要,在嵌入式应用程序中必须优化执行速度和功耗。可视SLAM模块的编码是一项复杂的任务,可能需要获取,存储和处理大量数据。例如,在特征匹配中,描述符以128位向量的形式存储在内存中,并且为了在连续帧中匹配特征,通常必须将200个特征与2000个候选特征进行比较,从而进行400,000个匹配操作。匹配操作显然需要大量的内存,但是,在采样的数据大小较小的情况下,获取和格式化数据的高开销可能会损害编码算法的效率。

束调整是涉及复杂线性代数的另一种算法,涉及对大矩阵的操纵。存在用于优化这些和其他VSLAM模块的编码的各种技术,但是这些技术的实现需要高级的特定于视觉的编码专业知识。

内存管理是图像处理中的另一个挑战。从图像捕获的数据通常被加载到连续的存储位置中,并在图像中处理随机补丁意味着处理未存储在连续的存储位置中的数据。执行功能匹配的软件例程必须从非连续的内存位置检索描述符,这进一步增加了设置开销。

VSLAM开发工具

在当今环境中,至关重要的是要加快产品上市速度,对于开发人员而言,花时间获取实施高效视觉处理代码所需的技能和知识并不总是可行的。幸运的是,存在许多工具来促进具有成本效益的SLAM应用程序的加速。提供了应用程序开发套件,这些套件提供了特定于视觉的软件库,优化的硬件和集成工具的组合,使开发人员能够轻松地将特定于视觉的任务从CPU卸载到VPU。

图4 的CEVA SLAM SDK是此类应用程序开发工具集的一个领先示例。

图4:CEVA SLAM SDK。

基于CEVA XM6 DSP和CEVA NeuPro AI处理器硬件,CEVA SLAM SDK可将SLAM实现有效集成到低功耗嵌入式系统中。该SDK具有许多构建块,包括图像处理库,这些库提供了用于特征检测和匹配以及包调整的高效代码。它还为线性代数,线性方程式求解,快速稀疏方程式求解和矩阵处理提供支持。

CEVA XM6硬件针对图像处理进行了优化,具有创新功能,例如并行加载指令(可解决非连续内存访问问题),以及用于执行汉明距离计算的独特专用指令。该SDK还包括一个详细的CPU界面,使开发人员可以轻松地将视觉处理功能与主应用程序CPU集成在一起。

为了说明SDK作为开发工具的性能,对以60帧/秒运行的完整SLAM跟踪模块的参考实现进行了测量,得出其功耗仅为86mW。

结论

Visual SLAM系统在诸如农业机器人和无人机之类的广泛应用中越来越受欢迎。视觉SLAM的实现有多种替代方法,但是随着嵌入式应用程序中部署的增加,编码效率和低功耗成为关键因素。

尽管开发人员通常使用VPU从主CPU上卸载计算密集型视觉处理任务,但要产生高效的代码并管理VPU与CPU之间的接口,仍然存在着巨大的挑战。

在关键的上市时间推动下,开发人员可以利用SLAM专用开发工具包(例如CEVA SLAM SDK)内置的功能来加速产品开发。

上一篇:嵌入式存储器为AI的实现提供了实现架构

下一篇:MEMS传感器推动嵌入式变革

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部