一种多相机集中式协同SLAM方法及系统与流程

文档序号:21369409发布日期:2020-07-04 04:45阅读:521来源:国知局
一种多相机集中式协同SLAM方法及系统与流程

本发明涉及同时定位与地图构建,尤其是一种多相机集中式协同slam方法及系统。



背景技术:

slam(simultaneouslocalizationandmapping,多客户端协同同时定位与地图构建)最早源于机器人领域,其目标是在一个未知的环境中实时重建环境的三维结构并同时对机器人自身进行定位。其主要思想是:一方面,依靠已创建的地图信息进行自定位;另一方面,根据定位结果对地图进行更新。视觉slam技术根据拍摄的视频信息推断出相机在未知环境中的位姿,并同时构建环境地图,其基本原理为多视图几何原理。视觉slam的目标为同时恢复出每帧图像对应的相机运动参数c1...cm,以及场景三维结构x1...xn。其中每个相机运动参数ci包含了相机的位置和方向信息,通常表示为一个3×3的旋转矩阵ri和一个三维平移向量pi。

随着ar领域的火热发展,作为ar领域核心技术之一的视觉slam技术也需要进行改进以满足上层应用新的需求。例如,多人ar游戏这种新的娱乐形式,需要多个用户同时对叠加在真实场景中的虚拟物体进行操作。因此为了满足这种应用的需求,底层的slam方法需要将多个客户端对应的多个地图合并为一个共同的地图,并在该地图下同时对每个客户端进行定位。当然,多相机协作亦可用于搜索、救援以及农业等应用,正是这些应用催生了各种协同slam方法。

多相机协作有望提高定位、建图任务的鲁棒性和效率,在多人增强现实应用中具有巨大潜力。slam正是实现协作的核心技术,它使得每个客户端可以共同定位并构建环境地图。然而,这个技术的关键挑战在于强大的通信、高效的数据管理以及客户端之间的有效信息共享。



技术实现要素:

发明目的:针对上述现有技术存在的缺陷,本发明旨在提供一种能够满足多人ar需求的用于单目、双目和rgb-d相机的集中式协同slam方法。

技术方案:一种多相机集中式协同slam方法,包括如下步骤:

服务端获取各客户端局部地图及其更新信息;

服务端根据客户端局部地图及其更新信息建立、更新服务端地图,对服务端地图进行地图内位置识别,并对存在重叠部分的服务端地图进行地图匹配、地图合并。

进一步的,所述服务端获取各客户端局部地图及其更新信息前,还包括如下步骤:

相机将拍摄的图像序列传输至其所属客户端的视觉里程计;

视觉里程计根据图像序列估计每帧图像的相机位姿,并建立、更新局部地图;

客户端的通信模块将局部地图及其更新信息发送至服务端;所述更新信息包括新关键帧和地图点。

为使得客户端能够进行长期定位,进一步的,所述视觉里程计根据图像序列估计每帧图像的相机位姿,并建立、更新局部地图的方法包括:在视觉里程计根据图像序列估计每帧图像的相机位姿时,若某一帧图像跟踪丢失,则通过重定位恢复正常的跟踪流程;

进一步的,客户端的通信模块还将最接近客户端当前位置的参考关键帧发送至服务端,服务端的通信模块还将与参考关键帧具有最强共视关系的共视关键帧及共视关键帧观察到的共视地图点发送至客户端;客户端的视觉里程计根据共视关键帧和共视地图点进行位姿估计。

进一步的,所述服务端根据客户端局部地图及其更新信息建立、更新服务端地图,包括对服务端地图中关键帧的冗余检测,具体采用如下方法:

从服务端地图中随机选取关键帧,在共视图中遍历该关键帧的所有相邻关键帧,检查每个相邻关键帧观察到的地图点;

当多个其他关键帧观察到到某一相邻关键帧所有地图点的θ%时,判定该相邻关键帧是冗余的,并从服务端地图中移除;其中,其他关键帧的数量以及θ值均为预设。

进一步的,所述服务端对存在重叠部分的服务端地图进行地图匹配、地图合并的方法为:

检测两个服务端地图之间的重叠;

对于存在重叠部分的两个服务端地图,求解sim(3)变换、并添加约束;

使用sim(3)变换将存在重叠部分的两个服务端地图合并为一个地图。

进一步的,对服务端地图进行地图内位置识别和地图匹配后,进行服务端优化;优化步骤包括:服务端位姿图优化和全局捆集调整。

进一步的,所述服务端获取各客户端局部地图及其更新信息的通信模式为:

客户端主动发送消息,服务端被动接收消息;

客户端主动向服务端申请消息,服务端根据申请发送消息至客户端,服务端不主动发送消息至客户端;

消息的大小设有上限值,超过上限值的消息被拆分成多个消息发送。

一种多相机集中式协同slam系统,包括服务端和多个客户端,所述服务端包括:

通信模块,用于获取各客户端局部地图及其更新信息;

建图模块,用于根据客户端局部地图及其更新信息建立、更新服务端地图;

地图内位置识别模块,用于对服务端地图进行地图内位置识别;

地图匹配合并模块,用于对存在重叠部分的服务端地图进行地图匹配、地图合并。

进一步的,每个所述客户端均配置有相机,客户端内设有视觉里程计和通信模块,所述相机用于将拍摄的图像序列传输至其所属客户端的视觉里程计;视觉里程计用于根据图像序列估计每帧图像的相机位姿,并建立、更新局部地图。由于每个客户端都能够运行视觉里程计,因此确保了它们能够独立运行。

客户端的通信模块用于将局部地图及其更新信息发送至服务端;所述更新信息包括新关键帧和地图点。

进一步的,所述客户端还包括重定位模块,用于在视觉里程计根据图像序列估计每帧图像的相机位姿、某一帧图像跟踪丢失时,恢复正常的跟踪流程。

进一步的,所述客户端的通信模块还用于将最接近客户端当前位置的参考关键帧发送至服务端,服务端的通信模块还用于将与参考关键帧具有最强共视关系的共视关键帧及共视关键帧观察到的共视地图点发送至客户端;客户端的视觉里程计根据共视关键帧和共视地图点进行位姿估计。

进一步的,所述地图匹配合并模块包括:

重叠检测单元,用于检测两个服务端地图之间的重叠;

求解变换单元,用于对于存在重叠部分的两个服务端地图,求解sim(3)变换、并添加约束;

合并单元,用于使用sim(3)变换将存在重叠部分的两个服务端地图合并为一个地图。

进一步的,所述服务端还包括优化模块,优化模块用于对服务端位姿图进行优化和全局捆集调整。

进一步的,所述服务端的通信模块和客户端的通信模块被配置为如下通信模式:

客户端主动发送消息,服务端被动接收消息;

客户端主动向服务端申请消息,服务端根据申请发送消息至客户端,服务端不主动发送消息至客户端;

消息的大小设有上限值,超过上限值的消息被拆分成多个消息发送。

有益效果:本发明利用多个相机拍摄的图像序列,将多个客户端的局部地图合并为统一的地图,并通过位姿估计实现在统一的地图中同时对每个相机进行定位。本发明能够兼容支持单目、双目和rgb-d相机,通过服务端合并地图,每个客户端能够利用更多的场景信息,因此定位精度更高;可用于室内外环境的相机定位,可应用在手机、平板等移动客户端,是多人增强现实应用中的核心技术,奠定了实现多人ar的基础。此外,每个客户端都配置相机、通信模块和视觉里程计,可确保它们能够独立运行,而具有更大计算能力的服务端通过收集客户端的所有信息,在适当情况下合并且优化它们的地图,或向客户端传输信息来实现它们的协作。并且由于在客户端实现了重定位功能,使得客户端能够进行长期定位。

附图说明

图1是本发明的结构示意图。

具体实施方式

下面通过实施例结合附图对本技术方案进行详细说明。

如图1所示,本实施例提供一种多相机集中式协同slam方法及使用该方法的系统,利用多个相机拍摄的图像序列来计算统一的环境地图,并在该地图中同时定位这些相机。

多相机集中式协同slam方法,包括如下步骤:

相机将拍摄的图像序列传输至其所属客户端的视觉里程计;

视觉里程计根据图像序列估计每帧图像的相机位姿,并建立、更新局部地图;所述视觉里程计根据图像序列估计每帧图像的相机位姿,并建立、更新局部地图,具体包括跟踪和局部建图步骤,跟踪是通过寻找图像和局部地图之间匹配的特征点对,使用运动参数的捆集调整最小重投影误差,来估计每一帧图像的相机位姿。而局部建图是维护局部地图,并执行局部捆集调整来优化局部地图。也可以直接采用现有技术中orb-slam2的视觉里程计实现方法。

位姿估计能够对该客户端的相机进行定位,之后在服务端合并地图后,能够实现在统一的地图中同时对每个相机进行定位。

在视觉里程计根据图像序列估计每帧图像的相机位姿时,若某一帧图像跟踪丢失,则通过重定位恢复正常的跟踪流程;

重定位的方法为:

将丢失的此帧图像转换成词袋形式,并在识别数据库中查找与其对应的候选关键帧;识别数据库是在线建立的,内容是关键帧及每个关键帧对应的词袋形式的向量。

对每个关键帧,都计算其地图点与当前帧orb特征的匹配;

接着对每个关键帧执行ransac迭代,并使用pnp算法计算相机位姿;若在该位姿下拥有满足预设数量的内点,则优化该位姿且搜索与候选关键帧地图点更多的匹配点对;

最后再次优化该位姿,这时若内点满足阈值,则判定重定位成功,恢复正常的跟踪流程。

客户端的通信模块将局部地图及其更新信息发送至服务端;所述更新信息包括新关键帧和地图点。此处新关键帧和地图点是指客户端局部地图中自上一次发送消息以来的所有更新关键帧和地图点,包括新增的或更改的关键帧和相应地图点。

客户端的通信模块还将最接近客户端当前位置的参考关键帧发送至服务端,服务端的通信模块还将与参考关键帧具有最强共视关系的共视关键帧及共视关键帧观察到的共视地图点发送至客户端;客户端的视觉里程计根据共视关键帧和共视地图点进行位姿估计。本实施例服务端发送给客户端的每条消息都包含k个与参考关键帧具有最强共视关系的关键帧,以及它们观察到的地图点,用这些数据扩充客户端局部地图。这些信息对于客户端上的位姿估计是最有价值的,因此视觉里程计用的正是参考关键帧的共视关键帧来计算当前帧的相机位姿。这k个关键帧是根据它们的共视权重来选择的,无论它们来自哪个客户端。

在所述客户端的通信模块将局部地图及其更新信息发送至服务端后,服务端的通信模块在接收关键帧和地图点时,使用sim(3)变换将客户端坐标系下的数据转换至服务端坐标系。

服务端的通信模块向客户端发送消息前,先使用sim(3)变换将服务端坐标系下的数据转换至客户端坐标系,再进行发送。

服务端获取各客户端局部地图及其更新信息;

服务端根据客户端局部地图及其更新信息建立、更新服务端地图,对服务端地图进行地图内位置识别,并对存在重叠部分的服务端地图进行地图匹配、地图合并。

其中,服务端根据客户端局部地图及其更新信息建立、更新服务端地图具体采用如下方法:

利用客户端局部地图及其更新信息建立、更新服务端地图的关键帧数据库;服务端地图是由多个关键帧和地图点构成,建立、更新服务端地图也可以理解为建立、更新服务端地图中的关键帧、地图点以及关键帧数据库,关键帧中包含与之相关的地图点信息。

本实施例中建图模块将新来的关键帧转发到关键帧数据库、地图内位置识别和地图匹配模块。

确定局部地图更新信息所对应的服务端位姿图;即:建立客户端局部地图的更新信息和对应服务端位姿图的连接。

对服务端地图中关键帧的冗余检测;具体采用如下方法:

从服务端地图中随机选取关键帧,在共视图中遍历该关键帧的所有相邻关键帧,检查每个相邻关键帧观察到的地图点;

当多个其他关键帧观察到到某一相邻关键帧所有地图点的θ%时,判定该相邻关键帧是冗余的,并从服务端地图中移除,同时也会将该关键帧从关键帧数据库中移除;其中,其他关键帧的数量以及θ值均为预设,本实施例中其他关键帧的数量预设为3个。

所述服务端对服务端地图进行地图内位置识别的方法为:使用关键帧数据库检测服务端地图堆栈中位置之间的重叠;即:检测一个服务器地图内先前访问过的位置,检测轨迹重叠、向位姿图添加约束;

所述服务端对存在重叠部分的服务端地图进行地图匹配、地图合并的方法为:

检测两个服务端地图之间的重叠;

对于存在重叠部分的两个服务端地图,求解sim(3)变换、并添加约束;

使用sim(3)变换将存在重叠部分的两个服务端地图合并为一个地图。

特别地,若单目客户端与双目或rgb-d客户端对应的地图在服务端进行合并,则最终的尺度以双目或rgb-d为准。

其中,sim(3)是使用3对匹配点来进行相似变换(similaritytransformation)的求解,进而解出两个坐标系之间的旋转矩阵、平移向量和尺度,具体算法为现有技术。

成功的地图内位置识别和地图匹配会触发优化模块,对服务端地图进行地图内位置识别和地图匹配后,进行服务端优化;

优化步骤包括:服务端位姿图优化和全局捆集调整。

所述服务端位姿图优化具体方法为:在开始全局捆集调整之前,先使用共视图的子图在服务端位姿图上执行位姿图优化,所述子图仅包含权重w大于100的强共视边,这样能显著改善优化的效率和准确性。

所述全局捆集调整具体是通过最小化所有关键帧和地图点的重投影误差来优化服务端地图,以提高图的准确性。对于一个大型的地图,该优化可能需要几秒钟的时间,由于其他模块在优化执行期间无法访问地图,因此,在进行所述服务端优化时,服务端的通信模块将接收数据存储在缓冲区中,并在优化完成时处理。本实施例中使用g2o库中的levenberg-marquardt算法来做全局捆集调整。

所述服务端获取各客户端局部地图及其更新信息的通信模式为:

客户端主动发送消息,服务端被动接收消息;

客户端主动向服务端申请消息,服务端根据申请发送消息至客户端,服务端不主动发送消息至客户端;

消息的大小设有上限值,超过上限值的消息被拆分成多个消息发送,以防止在与服务端连接中断几秒钟时将地图打包成一条消息。由于多线程之间存在竞争,在消息打包期间,视觉里程计无法访问本地局部地图,过大的消息大小可能会长时间阻碍跟踪,因此在这种情况下需要发送到服务端的信息被分成几个消息。

由于客户端局部地图不断变化,本实施例中消息发布速率设为最大值,每条新消息都包含自上一条消息以来的所有更改。

本实施例提供的使用上述方法的多相机集中式协同slam系统,包括服务端和多个客户端,每个所述客户端均配置有相机,客户端内设有视觉里程计、通信模块和重定位模块;

相机,用于将拍摄的图像序列传输至其所属客户端的视觉里程计;

视觉里程计,用于根据图像序列估计每帧图像的相机位姿,并建立、更新局部地图;

重定位模块,用于在视觉里程计根据图像序列估计每帧图像的相机位姿、某一帧图像跟踪丢失时,恢复正常的跟踪流程。

其中,视觉里程计用于根据图像序列估计每帧图像的相机位姿,并建立、更新局部地图,具体是采用orb-slam2的视觉里程计实现,包括跟踪模块和局部建图模块,跟踪模块用于通过寻找图像和局部地图之间匹配的特征点对,使用运动参数的捆集调整最小重投影误差,来估计每一帧图像的相机位姿。而局部建图模块用于维护局部地图,并执行局部捆集调整来优化局部地图。

所述重定位模块具体包括:

候选关键帧查找单元,用于将丢失的此帧图像转换成词袋形式,并在识别数据库中查找与其对应的候选关键帧;

特征匹配单元,用于对每个关键帧,都计算其地图点与当前帧orb特征的匹配;

优化位姿单元,用于对每个关键帧执行ransac迭代,并使用pnp算法计算相机位姿;若在该位姿下拥有满足预设数量的内点,则优化该位姿且搜索与候选关键帧地图点更多的匹配点对;

判定单元,用于最后再次优化该位姿,这时若内点满足阈值,则判定重定位成功,恢复正常的跟踪流程。

客户端的通信模块用于将局部地图及其更新信息发送至服务端;所述更新信息包括新关键帧和地图点。此处新关键帧和地图点是指客户端局部地图中自上一次发送消息以来的所有更新关键帧和地图点,包括新增的或更改的关键帧和相应地图点。

在所述客户端的通信模块将局部地图及其更新信息发送至服务端后,服务端的通信模块在接收关键帧和地图点时,使用sim(3)变换将客户端坐标系下的数据转换至服务端坐标系;

服务端的通信模块向客户端发送消息前,先使用sim(3)变换将服务端坐标系下的数据转换至客户端坐标系,再进行发送。

客户端的通信模块还用于将最接近客户端当前位置的参考关键帧发送至服务端,服务端的通信模块还用于将与参考关键帧具有最强共视关系的共视关键帧及共视关键帧观察到的共视地图点发送至客户端;客户端的视觉里程计根据共视关键帧和共视地图点进行位姿估计。本实施例中,服务端发送给客户端的每条消息都包含k个与参考关键帧具有最强共视关系的关键帧,以及它们观察到的地图点,用这些数据扩充客户端局部地图。这些信息对于客户端上的位姿估计是最有价值的,因此视觉里程计用的正是参考关键帧的共视关键帧来计算当前帧的相机位姿。这k个关键帧是根据它们的共视权重来选择的,无论它们来自哪个客户端。

所述服务端包括:

通信模块,用于获取各客户端局部地图及其更新信息;

建图模块,用于根据客户端局部地图及其更新信息建立、更新服务端地图;

地图内位置识别模块,用于对服务端地图进行地图内位置识别;

地图匹配合并模块,用于对存在重叠部分的服务端地图进行地图匹配、地图合并;

优化模块,优化模块用于对服务端位姿图进行优化和全局捆集调整。

其中,所述建图模块,具体是用于利用客户端局部地图及其更新信息建立、更新关键帧数据库;确定局部地图更新信息所对应的服务端位姿图。

建图模块还将客户端局部地图及其更新信息传输至地图内位置识别模块以及地图匹配合并模块;或者是将关键帧数据库传输至地图内位置识别模块以及地图匹配合并模块。

建图模块还包括冗余检测模块,用于对服务端地图中关键帧进行冗余检测;

冗余检测模块包括:

相邻关键帧遍历单元,用于从服务端地图中随机选取关键帧,在共视图中遍历该关键帧的所有相邻关键帧,检查相邻关键帧观察到的地图点;

冗余移除单元,用于当多个其他关键帧观察到到某一相邻关键帧所有地图点的θ%时,判定该相邻关键帧是冗余的,并从服务端地图中移除;其中,其他关键帧的数量以及θ值均为预设。

本实施例的建图模块有三个主要职责。首先,它将新来的关键帧转发到关键帧数据库、地图内位置识别和地图匹配模块。第二个任务是建立新关键帧、地图点和对应服务端位姿图的连接。第三个任务是服务器地图中关键帧的冗余检测。此关键帧剔除方案从服务端地图中随机选取关键帧kfi,在共视图中遍历kfi的所有相邻关键帧kfj,检查它们观察到的地图点。若对于预设的阈值,至少三个其他关键帧观察到kfj所有地图点的θ%,则认为kfj是冗余的并且从服务器地图中移除;此处是指至少存在三个其他关键帧,每个关键帧观察到的地图点都能单独达到kfj所有地图点的θ%。

所述地图内位置识别模块包括堆栈检测单元,用于使用关键帧数据库检测服务端地图堆栈中位置之间的重叠;该位置识别模式的一个重要特性是它能够将来自多个相机传感器的测量与不同的相机参数相匹配,这使得该方案成为一个通用的系统,可以与配备不同相机的异构客户端一起使用。

对于到达服务端的每个新关键帧,使用关键帧数据库执行两种类型的位置识别查询:地图内位置识别和地图匹配。

地图内位置识别检测一个服务器地图内先前访问过的位置,检测轨迹重叠、向位姿图添加约束。检测到这样的轨迹重叠就可以向位姿图添加新的约束,其可以在优化步骤中使用以提高地图的整体精度。地图内位置识别之后执行捆集调整。

所述地图匹配合并模块包括:

重叠检测单元,用于检测两个服务端地图之间的重叠;

求解变换单元,用于对于存在重叠部分的两个服务端地图,求解sim(3)变换、并添加约束;

合并单元,用于使用sim(3)变换将存在重叠部分的两个服务端地图合并为一个地图。

特别地,若单目客户端与双目或rgb-d客户端对应的地图在服务端进行合并,则最终的尺度以双目或rgb-d为准。

成功的地图内位置识别和地图匹配会触发优化模块,所述优化模块包括:

位姿图优化单元,用于使用共视图的子图在服务端位姿图上执行位姿图优化,共视图是指当前新的关键帧的共视图,所述子图仅包含权重w大于100的强共视边;这样能显著改善优化的效率和准确性。

全局捆集调整单元,用于通过最小化所有关键帧和地图点的重投影误差来优化服务端地图,以提高图的准确性。对于一个大型的地图,该优化可能需要几秒钟的时间,由于其他模块在优化执行期间无法访问地图,因此,所述服务端的通信模块包括缓冲区,用于在优化模块执行优化期间存储接收数据,并在优化完成时处理。本实施例使用g2o库中的levenberg-marquardt算法来做全局捆集调整。

客户端和服务端都含有通信模块,用于客户端与服务端之间的信息传递。为了确保用户的信息安全,本实施例所述服务端的通信模块和客户端的通信模块被配置为如下通信模式:

客户端主动发送消息,服务端被动接收消息;

客户端主动向服务端申请消息,服务端根据申请发送消息至客户端,服务端不主动发送消息至客户端;

消息的大小设有上限值,超过上限值的消息被拆分成多个消息发送,以防止在与服务端连接中断几秒钟时将地图打包成一条消息。由于多线程之间存在竞争,在消息打包期间,视觉里程计无法访问本地局部地图,过大的消息大小可能会长时间阻碍跟踪,因此在这种情况下需要发送到服务端的信息被分成几个消息。

由于客户端局部地图不断变化,本实施例中消息发布速率设为最大值,每条新消息都包含自上一条消息以来的所有更改。

实施例2:

本实施例的服务端结构与实施例1略有不同,本实施例服务端包括多个客户端处理器、一个地图匹配合并模块及优化模块,各客户端处理器与客户端一一对应,用于收发、处理对应客户端的数据;每个客户端处理器均包括通信模块、建图模块和地图内位置识别模块,各模块功能与处理方法与实施例1中所记载的一致。

实施例3:本实施例与实施例2相比,不同之处在于,服务端还包括优化模块,优化模块具体功能和实现方法与实施例1中所记载的一致。

以上仅是本发明的优选实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1