背景
DARPA AVATAR 项目
为什么要研究分布式SLAM技术?
分布式同时建图与定位技术 是 集群(分布式)智能体系统的必备技术之一。
-
分布式SLAM与单个SLAM的优势?
答:效率,鲁棒性。
-
与分布式SLAM对应的是集中式SLAM,那么分布式SLAM的优点在哪里?
答:更少的通信和计算资源。集中式的SLAM要求每一个智能体共享(广播)所有传感器信息(或者local map),从而在中心节点(每个节点)处构建完整的全局地图吗,这在现实中(特别是负载有限的无人机平台)往往是无法满足的。
-
如果计算量和通信带宽足够,是不是集中式优于分布式?
答:不清楚,理论上是的。但是集中式总有一些劣势:比如通信距离不可能大范围扩展;存在重复计算。
-
分布式SLAM与不需要通信的多个独立SLAM系统相比,有何优势?
答:能够建立全局地图,且通过合适的回环检测算法,提升系统鲁棒性(避免漂移等),提高整体建图和定位精度。同时,某种意义上说,建图效率更高(无通信的话没法精准知道地图已经搜索完)。
分布式SLAM技术的应用场景
多个智能体共同探索同一个大区域,每个智能体分配至指定区域,只有部分重叠
个人看法:分布式SLAM的核心不在于提升单个智能体的定位能力(这应当通过提升传感器及自身SLAM算法),应当在于快速的获得全局地图,并且利用全局地图提升单个的SLAM速度和精度,提升全局建图的精度(减少漂移),同时利用全局地图提供全局的态势感知。
又或者,在同一个房间部署多个智能体,有大量重叠区域。
场景:任何需要多智能体协同工作且需要定位建图的场景。
要研究分布式SLAM技术中哪些内容?
分布式SLAM技术的目的是扩展单个智能体的感知探测范围(这是所有单平台的劣势),提高系统的建图效率,提升定位和建图精度,同时系统鲁棒性更强(即使有一个智能体失效,其他也能够迅速补充上)。
分布式一般指每一个节点只和通信范围内的节点通信。
分布式SLAM的所有工作都是围绕计算量和通信进行的吗?
- 核心研究点:地图融合(map merging/ map fusion)算法。一般是根据相对位置和地图特征匹配来进行地图融合,因此要么提升地图匹配速度或者通过什么方法得到相对位置直接进行匹配,又或者通过地标之类的辅助系统来得到特殊的相对位置。
- 研究点:异构的智能体和传感器。
分布式SLAM技术本身所涉及的所有理论,都可在独立SLAM技术中找到相应的研究,只是可能细节有所出入。因此,重点是在如何通信以及通信如何融合的问题。
从另一个角度说,应当熟悉某种SLAM技术后,将其扩展为分布式SLAM。
目前,并没有整套可用的分布式SLAM系统。
针对本次项目书来说,给出分布式SLAM系统框架图,同时要么响应它提出的研究点,要么提出替换的研究点。目的是响应项目书的要求:集群数量、定位精度、通信量小。
DDF-SAM有三大模块
- local optimization module 执行标准的单智能体SLAM从而构建本地地图并压缩
- communication module 用于缓存和传递压缩后的地图
- neighborhood optimizer module 用于结合本地压缩图和邻居图(因子图)
多智能体SLAM的问题
- 相对位姿
- 回环检测(更多事件能够触发闭环检测,如无人机到达相同地方)
- 实时性
- 异构的智能体和传感器(这个切入点还可以)
关键帧目前是一种非常常用的方法,可以减少待优化的帧数,并且可以代表其附近的帧。可以理解为一个学校里有100个班级,每个班的班长就是一个关键帧,他可以代表他班里的人,那么如何选取关键帧呢?
选取的指标主要有:
(1)距离上一关键帧的帧数是否足够多(时间)。比如我每隔固定帧数选择一个关键帧,这样编程简单但效果不好。比如运动很慢的时候,就会选择大量相似的关键帧,冗余,运动快的时候又丢失了很多重要的帧。
(2)距离最近关键帧的距离是否足够远(空间)/运动
比如相邻帧我根据pose计算运动的相对大小,可以是位移也可以是旋转或者两个都考虑,运动足够大(超过一定阈值)就新建一个关键帧,这种方法比第一种好。但问题是如果对着同一个物体来回扫就会出现大量相似关键帧。
(3)跟踪质量(主要根据跟踪过程中搜索到的点数和搜索的点数比例)/共视特征点
这种方法就是记录当前视角下的特征点数,或者视角,当相机离开当前场景时才会新建关键帧,避免了第2种方法的问题。缺点是比较复杂。
打个比方,关键帧相当于slam的骨架,是在局部一系列普通帧中选出一帧作为局部帧的代表,记录局部信息。举例来说,摄像头放在原处不动,普通帧还是要记录的,但关键帧因为总看到原场景,所以不会增加。 三角化需要一定程度的共视区域,所以普通帧每2帧之间会存在大量的信息冗余,如果所有帧全部参与计算,不仅浪费了算力,对内存也是极大的考验,这一点在前端vo递归处理方式中表现不明显,但在后端优化里是一个大问题,所以关键帧主要作用是面向后端优化的算力与精度的折中。此外,关键帧选择时还会对图片质量、特征点质量等进行考察,一定程度上也发挥了滤波的作用,防止无用的或错误的信息进入优化过程而破坏定位建图的准确性。 选择关键帧主要从关键帧自身和关键帧与其他关键帧的关系2方面来考虑。一方面,关键帧自身质量要好,例如不能是非常模糊的图像、特征点数量要充足、特征点分布要尽量均匀等等;另一方面,关键帧与其他关键帧之间的关系,需要和局部地图中的其他关键帧有少量的共视关系,但大部分特征点是新特征点,以达到既存在约束,又尽量少的信息冗余的效果,例如局部地图点投影到此帧的点数低于一个阈值或前一个关键帧的特征点在此帧里已经有90%观测不到等等。