鱼眼摄像头SLAM
鱼眼摄像头SLAM
在机器人技术、摄影测量学和计算机视觉等领域,鲁棒相机位姿估计是许多视觉应用的核心。近年来,在复杂、大规模的室内外环境中,人们越来越关注相机位姿估计方法的实时性、通用性和可操作性。其中,相机的视场角起着重要的作用,特别是在具有挑战性的室内场景中,往往是通过鱼眼镜头或相机镜头组合来增加视场角。除了使用鱼眼相机增加视野外,还可以将多个相机进行刚性耦合,形成一个多相机系统,从而有效地利用冗余观测信息来保证位姿估计的鲁棒性和观测目标特征的长可见性。因此,搭载多鱼眼相机系统的自主定位与建图(Simultaneous Localization and Mapping,SLAM)可以捕获更丰富的环境特征信息,从而获得更鲁棒的位姿跟踪效果。

图1. 鱼眼摄像头SLAM示例
一种基于特征的同时定位和构图(SLAM)系统,用于从宽基线移动测图系统(MMS)的多鱼眼相机装置中获得的全景图像序列。
首先,鱼眼摄像机标定方法结合了等距投影模型和三角多项式,以实现从鱼眼摄像机到等效理想相机模型的高精度标定,从而保证了从鱼眼图像到相应全景图像的准确转换。
其次,我们开发了全景相机模型、具有特定反向传播误差函数的相应束调整以及线性姿态初始化算法。
第三,实现由初始化,特征匹配,帧跟踪和闭合环方面的几种特定策略和算法组成的基于特征的SLAM,以克服跟踪宽基线全景图像序列的困难。我们对超过15公里轨迹和14,000张全景图像的大型MMS数据集以及小型公共视频数据集进行了实验。我们的结果表明,本文的全景SLAM系统PAN-SLAM可以在包括挑战性场景(例如黑暗隧道)在内的小规模室内和大型室外环境中实现全自动相机定位和稀疏地图重建,而无需任何其他传感器辅助。测量的绝对轨迹误差(ATE)精度接近0.1 m的高精度GNSS / INS。PAN-SLAM在各种环境下也具有无与伦比的鲁棒性,胜过几种基于特征的鱼眼镜头单目SLAM系统。该系统可被认为是一种理想的补充解决方案,替代昂贵的商用导航系统,尤其是在信号阻塞和多路径干扰普遍存在的城市环境中。
主要贡献
1. 基于多镜头组合式全景相机开发了精确的特征匹配和跟踪,闭环检测以及光束法调整的可靠姿态初值估计,这些技术在复杂的室外环境中具有高稳定性能;
2. 提出了一种新的鱼眼镜头校准方法,该方法可实现亚像素精度,并确保平滑跟踪和光束法调整的高精度;
3.在大范围多基线全景图像序列数据集和从多鱼眼相机组合装置捕获的开源小范围视频数据集上,PAN-SLAM系统的鲁棒性均优于当下其他几种方法。PAN-SLAM是唯一能够跟踪所有图像序列的系统。
4.实验证明,PAN-SLAM的定位精度为0.1 m,与昂贵的商用GNSS / INS跟踪系统的定位精度一样高,并且在信号阻塞情况下也更加可靠。它可以是当前商用GNSS / INS导航系统的强大补充和替代解决方案。
算法流程
1. 全景相机的成像、检校与优化模型
1.1 全景相机的成像

图2,(a)全景相机模型;(b)两个相邻鱼眼相机边缘影像上的投影不确定性。
多镜头组合式全景相机由一系列独立、固定的鱼眼镜头组成,多个镜头独立成像,再拼接为全景图。每个镜头具有各自的投影中心C,在实际制造过程中难以保证与球心S完全重合。物理上三点共线是C,Uc,P'。所以为了实现统一的全景坐标系,需要将实际像素坐标Uc投影到某个指定半径的球面上得到U。为了避免不共心导致的定位误差,通过事先标定单个相机中心在一个全景相机坐标系下的旋转Ri和位置Ti,得到表述共线条件方程的光束仍然是CUcP'。

首先将每个鱼眼影像上的像点转换到半径为r的球面上,然后计算球面点的极坐标,最后根据给定的全景图像宽高计算二维平面坐标。对于全景图像难免存在融合误差,如图1(b)所示,不过在连接点提取过程中排除该误差,不会影响鱼眼相机到全景相机之间的刚体几何转换。
1.2 鱼眼相机标定
为使得核线误差降低到1像素以下,本文对该模型加以改进,提出一种更为精确的鱼眼相机检校方法,显式地加入了鱼眼相机的成像过程。

1.3 光束法平差
类似ORB-SLAM优化方法,不过改进g2o库使其适用于全景成像模型,给出重投影误差函数式的解析导数形式,即误差函数对于位姿即地图点的雅可比矩阵。

图3,三角形节点代表位姿,圆形节点代表地图点,边代表误差项(a)位姿优化;(b)局部光束法平差;(c) 本质图优化;(d)全局光束法平差
本文实现的优化算法包含4类:图3(a),单帧位姿优化(仅根据匹配的地图点计算当前帧的精确位姿);图3(b),局部地图优化和平差(根据局部共视关键帧优化位姿与局部地图点);图3(c),本质图优化(用于检测闭环后,对全局关键帧的位姿进行调整);图3(d),全局光束法平差(优化所有位姿和地图点)。鱼眼图像上不同位置投射到球面上的变形不同,因此不同的点采用不同的误差阈值。
2.全景SLAM流程
系统分为3个线程并行工作,分别为跟踪,局部地图构建与闭环。所有步骤都经过调整,可以在复杂的室外环境中对宽基线全景图像序列进行准确稳健的跟踪和定位。

图4,全景SLAM流程
2.1 初始化
初始化本文将 ORB特征用于PAN-SLAM 系统的特征提取.鱼眼相机变形较大,匹配难度高,误匹配数量大.因此采用三帧而非两帧进行初始化.
2.2 地图点跟踪

图5,地图点跟踪算法流程
2.3 关键帧选择
本文的全景影像框幅高达8000×4000像素,由于车辆高速行驶,存在内存读写的限制,因此采用较大的采样间隔(1~3m ).

2.4 局部地图构建
根据全景相机的特殊情形,本文设定共视关键帧必须同时满足: ①与当前关键帧的共视点数≥50个;②与当前关键帧在图像序列中的间隔关键帧不超过40个;③其与当前关键帧的共视点在两帧所在金字塔层数差异>2的特征点数不超过总共视点数85%。
2.5 闭环检测
我们使用类似于ORB-SLAM的循环检测过程,但针对从不同方向捕获的全景图像引入了特殊的匹配策略。在实践中,即使对于针孔相机,基于BoW的方法也无法很好地识别横向或反向闭环。使用全景相机时,情况变得更糟。我们在这里采用了一种简单的对齐策略,即将当前球面图像展开为搜索到的先前帧的方向的2D图像。附带说明的是,此过程相对较慢;因此,如果检测到足够的循环,则可以跳过此步骤。

图6,(a)鱼眼模式;(b)全景模式,可以很好地跟踪到足够且均匀分布的特征。
鱼眼摄像头SLAM的更多相关文章
- 从零开始一起学习SLAM | SLAM有什么用?
SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非 ...
- AR中的SLAM(一)
写在前面 本系列打算讲讲个人对AR行业和AR中的SLAM算法的一点浅显的看法.才疏学浅,文中必然有很多疏漏和不足,还望能和大家多多讨论.今天先讲讲我对AR的一些认识. AR的一点理解 AR是什么 AR ...
- SLAM技术在国内的发展现状
近年来,由于扫地机的出现使得SLAM技术名声大噪,如今,已在机器人.无人机.AVG等领域相继出现它的身影,今天就来跟大家聊一聊国内SLAM的发展现状. SLAM的多领域应用 SLAM应用领域广泛,按其 ...
- 激光SLAM Vs 视觉SLAM
博客转载自:https://www.leiphone.com/news/201707/ETupJVkOYdNkuLpz.html 雷锋网(公众号:雷锋网)按:本文作者SLAMTEC(思岚科技公号sla ...
- 激光SLAM与视觉SLAM的特点
激光SLAM与视觉SLAM的特点 目前,SLAM技术被广泛运用于机器人.无人机.无人驾驶.AR.VR等领域,依靠传感器可实现机器的自主定位.建图.路径规划等功能.由于传感器不同,SLAM的实现方式也有 ...
- SLAM领域牛人、牛实验室、牛研究成果梳理
点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文阅读时间约5分钟 对于小白来说,初入一个领域时最应该了解的当然是这个领域的研究现状啦.只有知道这个领域大家现在正在 ...
- opencv获取IP摄像头(IP-camera)实时视频流
之前这篇文章讲了如何通过网络摄像头(web camera)获取实时视频流,但是这种方法的缺陷就是摄像头和主机必须连在一起,那这种在室外部署的时候就会非常麻烦并且不安全,所以后来找了下用海康威视或者大华 ...
- adas--智能驾驶辅助系统
先进驾驶辅助系统(Advanced Driver AssistantSystem),简称ADAS,是利用安装于车上的各式各样的传感器(可侦测光.热.压力等变数), 在第一时间收集车内外的环境数据, 进 ...
- Zynq UltraScale+ MPSoC 多媒体应用
消费者渴望更高的视频质量,推动了视频技术的发展.MPSoC 基于 Zynq-7000SoC ,包括一个可编程逻辑 (PL) 的桥接处理系统 (PS),但它在 Zynq UltraScale+ MPSo ...
随机推荐
- css3动画大全
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【JVM】Java8 和 Java7中JVM内存模型有什么区别
规范和实现 针对Java虚拟机的实现有专门的<Java虚拟机规范>,在遵守规范的前提下,不同的厂商会对虚拟机进行不同的实现. 就好比开发的过程中定义了接口,具体的接口实现大家可以根据不同的 ...
- IDAPython类库---idaapi.py的源码
#ThisfilewasautomaticallygeneratedbySWIG(http://www.swig.org).#Version2.0.12##Donotmakechangestothis ...
- LA3942字典树+递推
题意: 给你一个字典,最多4000个单词,每个单词长度最多是100,然后给你一个串,问你这个子串可以被那些单词组合的组合数,比如字典里有4个单词a b ab cd,然后给你一个串abcd则a ...
- Win64 驱动内核编程-26.强制结束进程
强制结束进程 依然已经走到驱动这一层了,那么通常结束掉一个进程不是什么难的事情.同时因为win64 位的各种保护,导致大家慢慢的已经不敢HOOK了,当然这指的是产品.作为学习和破解的话当然可以尝试各种 ...
- 插入排序——Python实现
插入排序Python实现 # -*- coding: utf-8 -*- # @Time : 2019/10/28 20:47 # @Author : yuzhou_1shu # @Email : y ...
- springboot开发浅谈 2021/05/11
学习了这么久,本人希望有时间能分享一下,这才写下这篇浅谈,谈谈软件,散散心情. 这是本人的博客园账号,欢迎关注,一起学习. 一开始学习springboot,看了好多网站,搜了好多课程.零零落落学了一些 ...
- 将项目连接到远程仓库git
方式一: git clone "git中的项目地址",此时会生成一个新的项目2.该步骤用于生成一个本地仓库 将需要提交的所有文件除了node_module.git以及输出文件dis ...
- Pytorch_Part1_简介&张量
VisualPytorch beta发布了! 功能概述:通过可视化拖拽网络层方式搭建模型,可选择不同数据集.损失函数.优化器生成可运行pytorch代码 扩展功能:1. 模型搭建支持模块的嵌套:2. ...
- java集合类介绍
目录 集合类简介 List ArrayList LinkedList Vector Stack Set HashSet LinkedHashSet TreeSet Map HashMap Hashta ...