机器人室内定位是怎样利用SLAM来实现的

机器人

533人已加入

描述

SLAM(同步定位与建图)对移动机器人和VR/AR耳机等应用至关重要,这些应用通常都是在室内进行的,而GPS或惯性测量装置要么无效,要么不够精确。SLAM是一个鸡生蛋还是蛋生鸡的问题,在这个问题中,系统需要映射它的环境来确定它在该环境中的位置和姿势,而姿势反过来又影响映射。今天有多种方法来做SLAM的传感,其中经常会听到的是激光雷达作为主要的传感输入。

但是激光雷达价格昂贵,即使对于新兴的固态激光雷达来说也是如此,因此它仍然不适用于VR/AR。可以用于仓库自动化的工业机器人经常被忽视的一个问题是,概念看起来很好,但目前的成本仍然过高。据说沃尔玛订购了两个这样的机器人,每个25万美元,它们甚至可以用来构建仓库地图,但并不能帮助扩大规模。实际的系统显然必须在售价、维护和停机时间上更便宜。

降低成本的一部分需要转向低成本、低功耗的传感和快速、低功耗的SLAM计算。传感可能是一个简单的单目或RGBD相机,因此这成为基于视觉的SLAM,这似乎是当今最流行的方法。对于SLAM算法本身,最著名的参考文献是ORBSLAM,它毫无疑问是为CPU平台设计的。这款软件在计算上非常昂贵,想象一下,在改进3D地图的同时,你在检测不断变化的场景中的特征时,需要进行的所有数学运算和迭代。这就会产生相当高的功耗和较低的有效帧速率。换句话说,除非机器人移动得不是很快,否则电池的使用寿命不会很长,映射也不是很灵敏。

SLAM有三个主要组件:跟踪、映射和循环闭包。跟踪估计相机的位置和方向,这必须是实时响应,以支持高帧速率(例如30FPS或60FPS)。该组件在很大程度上依赖于图像处理和特征检测、描述和匹配的定点操作(将新帧中的特征与参考帧中的特征进行比较)。特征可以是桌子的边缘、柱子、门或类似的物体,甚至是在地板或天花板上为这个目的而做的独特的标记。

然后映射估计这些特征点的三维位置;如果机器人移动了或者场景改变了,可能需要在地图上添加点,并且还会细化现有的点。这里的计算必须是实时的,但不一定是每一帧,并且主要是使用浮点数据类型的大量转换(线性代数)。

在第三步,循环闭包中,需要返回到之前的一个位置,按照构建的映射原则应该显示在相同的位置。这是一个纠正错误的过程,这就需要大量的计算。早期的步骤是概率性的,因此可能会有误差和错误检测。循环闭包是减少错误和细化映射的一个过程。这个阶段还主要依赖浮点计算。

所以需要快速的图像处理并提供30或60FPS的定点数学,大量的浮点线性代数,以及更强大的浮点数学。而且VR/AR和仓库机器人需要低功耗。但是在CPU或CPU集群中都不能这样做。或许GPU可以,但会比较费电。可以解决这个问题的自然架构是DSP。矢量DSP非常适合这种图像处理,但是通用的解决方案使用起来很有挑战性。

这是因为其中很多工作都是在捕获的(2D)图像的特性周围使用小补丁。这些补丁不太可能很好地将自己定位到内存中的连续位置,因此它们对矢量不友好。因此对这些特性的操作变成稀疏矩阵操作对向量也不友好。这意味着传统的基于缓存的优化方法就起不了作用了。我们需要一种使用本地内存的特定于应用程序的方法来确保访问的延迟接近于零,这需要基于对应用程序需求的理解精心设计DMA预取。

这是可行的,但是由于本地内存是有限的,我们必须小心分割图像,这可能导致需要处理的对象之间重叠,从而增加DDR流量。而且与CPU的协调增加了挑战,包括与CPU虚拟内存共享内存、管理数据传输以及CPU和DSP之间的控制、同步和监视。

CEVA在其应用程序开发工具包(Application Developer Kit, ADK)中添加了一个SLAM SDK,用于成像和计算机视觉,旨在与其CEVA- xm和NeuPro处理器一起运行。SLAM SDK支持CPU接口,允许将重型SLAM构建块卸载到DSP。提供的块包括特征检测、特征描述符和特征匹配、线性代数(矩阵操作和方程求解)、用于束调整的快速稀疏方程求解等。

ADK还包括一个基于OpenCV的函数的标准库CEVA – VX,它可以管理系统资源需求,包括那些棘手的数据传输和DMA优化,以优化内存带宽和功率,以及用于DSP的RTOS和调度器,用于抽象和简化CPU-DSP接口。

责任编辑:ct

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分