CN110675483A - 基于稠密视觉slam的无人机三维地图快速重建方法 - Google Patents
基于稠密视觉slam的无人机三维地图快速重建方法 Download PDFInfo
- Publication number
- CN110675483A CN110675483A CN201910646511.3A CN201910646511A CN110675483A CN 110675483 A CN110675483 A CN 110675483A CN 201910646511 A CN201910646511 A CN 201910646511A CN 110675483 A CN110675483 A CN 110675483A
- Authority
- CN
- China
- Prior art keywords
- image
- reconstruction
- data
- node
- algorithm
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/246—Analysis of motion using feature-based methods, e.g. the tracking of corners or segments
- G06T7/248—Analysis of motion using feature-based methods, e.g. the tracking of corners or segments involving reference images or patches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/80—Analysis of captured images to determine intrinsic or extrinsic camera parameters, i.e. camera calibration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10028—Range image; Depth image; 3D point clouds
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
Abstract
本发明公开了一种基于稠密视觉SLAM的无人机三维地图快速重建方法,本发明发明ROS分布式计算架构特性,并结合视觉SLAM算法设计多节点分布式计算、通信的方式与策略,然后搭建ROS网络,基于可视化工具对ROS下的节点运行状态及图像、三维信息进行实时监测。引入CUDA并行编程模型,分析三维地图重建中的算法热点,设计并行算法,并在嵌入式GPU平台上对其实现,验证其在处理速度上的提升。基于ROS分布式计算框架,设计与实现多进程节点的视觉SLAM三维地图重建***原型。通过运行实时的无人机载视觉传感器图像数据,验证基于视觉SLAM的三维地图重建算法的实用性,具有推广应用的价值。
Description
技术领域
本发明涉及无人机技术领域,尤其涉及一种基于稠密视觉SLAM的无人机三 维地图快速重建方法。
背景技术
近年来,地震滑坡泥石流等自然灾害频繁发生,使得灾区遭受了不同程度 的破坏,正因如此,在这些自然灾害发生时,快速的应急救援相当重要。当此 类自然灾害发生时,由于道路可能遭到破坏,营救人员很难在第一时间赶赴现 场。无人机因其灵活机动、成本低、受地面地形约束小的特点,在抗震救灾等 工作中得到了广泛的应用,并且凭借其快速反应能力,在应急救援工作中发挥 了巨大作用。与此同时,如果想要获取灾区的三维地形信息,无人机也可代替 测绘人员进入危险地带。无人机能够巡航于云层以下,获取的图像数据分辨率 高,稍加处理即可用于三维地图重建。基于获取的三维地图,就可以获知灾区 的受灾程度,并且通过其提供的空间信息,决策者就能够快速部署营救的方案 与路线。目前,构建三维地图的方法主要有以下3种。
测量建模的方法:需要外业人员来采集建筑物的影像数据,然后交由内业 人员处理,通过数据融合建立白模,最后对白模进行纹理映射,最终生成所测 区域的三维模型。生产工艺复杂、工作强度大,需要内外业人员具备专业素质。
倾斜摄影技术:通过在一架无人机上搭载五台高分辨率的相机,同时获取 五个角度的影像数据,即一个垂直方向和四个倾斜方向,然后通过处理能够构 建精准的三维地图。倾斜摄影测量技术使得三维城市地图构建成本大大降低,。
同步定位与地图创建
基于视觉的SLAM(Simultaneous Localization and Mapping)是一项新兴 的三维地图构建技术,即在传感器运动过程中,对运动轨迹进行估算,并构建 周围环境的三维信息。视觉SLAM用相机作为数据获取的传感器,有着信息量大、 灵活性高、成本低、时效性高、易于进行嵌入式开发等优势。当前,比较经典 的SLAM算法有扩展卡尔曼滤波(EKF)方法、扩展信息滤波(EIF)方法、以及 粒子滤波(PF)方法等,但上述方法并不能很好的解决大尺度范围内的三维地 图重建。随着硬件性能的大幅提升,并行计算技术的发展以及高效求解方法的 出现,使得基于图优化的方法重新成为SLAM发明的一个热点。
传统的三维地图构建方法都是基于不同视角方向上的测区影像数据来实现 其三维几何重建,然而其生产周期长、成本高、过程繁琐。在某些特定的应用 场景,例如自然灾害等,人们对快速应急救援的需求十分迫切,此时就需要能 够快速甚至实时地生成三维地图,传统的方法并不能很好地解决这一问题。总 的来说,传统方法的时效性差主要是存在以下三个方面的不足:(1)在数据获 取前有诸多前序步骤,且对数据精度要求高;(2)在大部分的无人机三维重建 过程中,无人机仅仅作为获取数据的工具,获取数据后需要等待作业完成才能 进行处理,无法实时地将三维信息反馈回来,这样也无法充分利用无人机平台的便捷性为三维地图重建的时效***;(3)在对无人机影像数据进行图像处 理时,传统方法由于其算法复杂度比较高,导致计算也相应比较耗时,加之无 人机影像分辨率高、数据量大,使得从图像序列到三维地图这一过程计算很难 快速完成。因此如何利用视觉SLAM技术实现高效率的无人机快速三维重建,是 一个值得发明和关注的方向。
发明内容
本发明的目的就在于为了解决上述问题而提供一种基于稠密视觉SLAM的 无人机三维地图快速重建方法。
本发明通过以下技术方案来实现上述目的:
本发明包括无人机平台三维地图快速重建、无人机三维地图快速重建算法、 无人机三维地图快速重建***、基于ROS的视觉SLAM节点通信***和基于ROS 的视觉SLAM节点通信算法;
所述无人机平台三维地图快速重建:
基于ROS的***硬件底层抽象方法:
接受使用sensor_msgs/Image消息类型的传感器数据,该消息类型包含RAW 图像和压缩图像两种,RAW图像就是CMOS或者CCD图像感应器将捕捉到的光 源信号转化为数字信号的原始数据;
在成功获取传感器数据后,ROS在图像管道提供了相机标定、扭曲校正、颜 色解码,ROS图像管道通过image_proc功能包运行,提供用于从摄像头采集的 RAW图像中获取单色和彩色的转换功能,在标定完摄像头,图像管道就会提取 CameraInfo消息并修正图像的径向与切向畸变,即在获取数据的同时能够完成 预处理;
对于复杂的图像处理任务,使用OpenCV、cv_bridge和image_transport库 对消息进行转换连接,对订阅和发布的图像Topic进行处理,另一方面,OpenCV 进行图像处理时,使用cv_bridge将其转换为ROS Image消息发布;
在ROS中将执行计算的进程称为节点,为了在节点中使用OpenCV进行图 像处理,需要安装独立的OpenCV库,然后必须在工作空间下的package.xml文 件中指定编译和运行需要的opencv2依赖包;然后,对于每个使用OpenCV的节 点,必须在target_link_libraries中加OpenCV的lib文件;最后,在节点的cpp 文件中,加入所需的OpenCV头文件;
通过上述过程与步骤,实现对硬件的抽象,即通过传感器获取数据,将其 发布至ROS网络中,并通过订阅图像的RAW消息,使用OpenCV来进行图像处 理;
算法解耦与分布式计算:
三维重建算法运行时,将运行多个节点,每个节点对应实现各自的功能, 节点间通过ROS消息进行通信,各个节点可在不同设备上运行,通过ROS构建 的网络,实现算法功能的耦合;
基于CUDA并行计算的算法加速方法:
选择NVIDIA Jetson TX2嵌入式开发模块作为实验的处理平台,在基于TX2 开发模块的并行程序运行时,每32个并行线程被叫做一个Wrap,GPU中线程 的调度执行是以一个Wrap为一个调度单位进行的,每一个SM内有2个线程束 调度器,每个线程束调度器内有32个CUDA核,该GPU共256个CUDA核;
基于Topic的消息传递与通信:
(1)启动Talker,Talker通过端口将其信息注册到Master端,其中包括Talker 所发布消息的话题名、节点地址信息等;Master将这些信息加入到一个注册列 表中;
(2)启动Listener,Listener向Master端注册,注册其所需订阅的话题以及Listener自己的地址信息;
(3)Master对发布者与订阅者进行信息匹配,如果二者发布/订阅同一 Message则帮其建立连接;如果没有匹配的则继续等待;若找到匹配的,且此时 Talker在发布Message,便会把Talker的地址发送给Listener;
(4)Listener接收到Master发送的Talker地址后,向Talker发送连接请求, 同时将Listener要订阅的话题名和完成通讯所需的通信协议全发给Talker;
(5)Talker接收到Listener请求后,返还一个确认连接的信息,包括其自身 的TCP地址;
(6)Listener接收到Talker的TCP地址后,通过TCP与Talker建立网络连接;
(7)Talker通过建立的TCP网络连接将数据发送给Listener;
所述无人机三维地图快速重建***:包括视觉传感器、无人机、嵌入式处 理器、GPU,软件实现视觉SLAM的核心算法;软硬件通过分布式框架及通信协 议相互联系,组成完整的软硬件***;其流程如下:
(1)无人机机载嵌入式搭载视觉传感器,获取实时图像序列;
(2)图像序列分别传输至前端与后端;
(3)前端通过特征提取匹配、关键帧提取、位姿估计为后端提供位姿初值;
(4)后端对(2)中接收的图像进行闭环检测,并对(3)中获取的位姿进 行优化;
(5)后端基于位姿与图像进行稠密重建;
(6)由观测端通过ROS可视化工具进行实时监测;
所述无人机三维地图快速重建算法:
视觉SLAM前端算法的流程如下:
(1)SLAM***提供接口,接收由传感器所获取的连续的图像序列,将图 像序列传入VO端;
(2)判断SLAM***是否已初始化完成,若未完成,则进行第(3)步,若 已完成初始化,则进行第(4)步;
(3)初始化第一个关键帧,并初始化位姿T0;
(4)持续对图像序列进行ORB特征提取,选取下一个关键帧Fi(i>=1);
(5)将Fi与Fi-1的ORB特征进行匹配,并筛选出可靠的匹配;
(6)基于可靠的特征点对,通过对极约束求解帧间的运动,计算出该关键 帧的位姿Ti;
(7)若帧流结束则停止,否则返回第4步;
重建部分算法的流程如下:
(1)选取需要计算深度的目标像素点p;
(2)基于相机运动,即相机光心的平移向量,以及所求关键帧相机光心与 p的连线的向量,构成的平面交新关键帧于极线,计算极线位置;
(3)遍历所求得的极线,搜索与p匹配的点;
(4)通过三角测量计算出p点实际的空间位置;
(5)更新该像素的深度信息;
SLAM前端特征提取与匹配方法:首先检测Oriented FAST角点位置,然后基 于角点位置,计算其BRIEF描述子;对两幅图像中BRIEF描述子进行匹配,记录 其汉明距离,即二进制字符串不同位数的个数;记录所有匹配之中的最小值dmin, 若描述子之间汉明距离大于2倍dmin,则删除该匹配,反之保留该匹配;
关键帧提取方法:首先处理第一张图像,先检测FAST特征点和边缘特征, 如果图像中间的特征点数量超过设定的阈值,就把这张图像作为第一个关键帧, 然后处理第一张之后的连续图像,持续跟踪特征点;当匹配点的数量大于阈值, 如果视差的中位数大于阈值,选择计算本质矩阵E,否则选择计算单应矩阵H; 如果计算完H或E后,还有足够的内点,就将其作为关键帧;
相机运动估计:相机的运动估计即计算出相邻关键帧之间的平移向量t和旋 转矩阵R,而t与R可通过分解本质矩阵E来获得,而在关键帧相机只有旋转而 无平移的时候,两视图的对极约束不成立,基础矩阵F为零矩阵,这时候需要分 解单应矩阵H;分解方法为奇异值(SVD)分解:
tR=E=UDVT (4-1)
其中,U、V均为三阶正交矩阵,D为对角阵D=diag(r,s,t);分解可得对角 矩阵的特征值,该3个特征值中将会有两个特征值为正,其值相等,另一个则 为0;在分解过程中会获得四组不同的解,分别对应关键帧的四种相对位姿;
稠密重建:以相邻两幅图像中估计任一像素的深度来说,对于某一个像素 p1对应的空间点P,相邻两帧的相机光心与其连线O1P、O2P以及O1O2共面,其 中O1P交第一帧于p1,O2P交第二帧于p2,则p2必然落于面O1O2P与第二帧交 线上,即p1在第二帧中的位置在极线上;
由于单个像素的亮度没有区分性,则考虑对像素块相似性进行比较,即在像 素点p1周围取一块w*w的小块,然后遍历极线上各点,与其周围的w*w的小 块进行匹配,则算法的假设由像素的灰度不变性转为图像块的灰度不变性;
对于两个小块的匹配,计算其归一化互相关(Normalized Cross Correlation,NCC):
在极线上计算每一个相似性度量之后,将会得到一个沿着极线的NCC分布, 即p1像素在第二帧中出现的概率分布,NCC值越高,则该点为p1像素的同名 点概率越高;然而仅靠两张图像计算某像素的深度值存在一定的偶然性,因此 需要多张图像进行估计;我们假设某个像素点的深度d服从高斯分布:
P(d)=N(μ,σ2) (4-3)
每当新的数据到来时,观测其深度也将会是一个高斯分布:
则更新观测点p1的深度变成一个信息融合问题,而融合后的深度则满足:
经过多次迭代,则p1在第二帧极线上的概率分布峰值越接近其真实位置; 由此,对于稠密重建其完整步骤如下:
(1)假设所有像素的深度满足某个初始的高斯分布;
(2)当新数据产生时,通过极线搜索与块匹配确定投影点位置;
(3)根据几何关系计算三角化后的深度及不确定性;
(4)将当前观测融合进上一次的估计中,若收敛则停止计算,否则返回第 2步;
基于ROS的视觉SLAM节点通信***:采用ROS分布式计算架构,以降低 ***各模块之间的耦合,提高***在复杂环境中的可用性与可靠性;发明将视 觉SLAM重建过程中的数据获取、位姿估计、稠密重建、可视化分别由四个计算 节点运行,每个节点各司其职,节点间通信采用Topic订阅模式;***工作时共 4个节点参与通信,其中,传感器捕捉数据,其原始数据被发布成话题 /sensor_msgs,由视觉传感器与Jetson TX2通过USB或CSI接口直连,将流数据 转换为图像序列数据消息,重新发布成话题/usb_cam;
VO节点订阅/usb_cam,进行位姿估计,并将结果发布至成位姿数据,重建 节点同时订阅/usb_cam与位姿数据,并将处理后得到的深度图数据与点云数据 发布至ROS网络中,由可视化节点订阅,实现***的增量地图构建的可视化功 能;
所述基于ROS的视觉SLAM节点通信算法:SLAM前端,即VO节点,与后 端重建节点同时订阅话题/usb_cam;VO节点将/usb_cam节点所发布的数据通过 SLAM前端库的接口进行位姿解算,然后,将其以消息的形式进行发布,由SLAM 后端的重建节点进行订阅,即重建节点同时订阅帧数据以及位姿数据;为了能 够实时地对三维地图重建的结果进行可视化,文采用的方法流程如下:
(1)当选取的参照帧其深度图收敛时,将深度图结果发布至话题;
(2)可视化节点根据参照帧及其时间戳,获取由VO节点发布的位姿/pose;
(3)基于初始化结果,计算出该参照帧光心的空间位置以及该帧的法线方 向;
(4)基于深度图逐像素构造点云。
本发明的有益效果在于:
本发明是一种基于稠密视觉SLAM的无人机三维地图快速重建方法,与现有 技术相比,本发明发明ROS分布式计算架构特性,并结合视觉SLAM算法设计 多节点分布式计算、通信的方式与策略,然后搭建ROS网络,基于可视化工具 对ROS下的节点运行状态及图像、三维信息进行实时监测。引入CUDA并行编 程模型,分析三维地图重建中的算法热点,设计并行算法,并在嵌入式GPU平 台上对其实现,验证其在处理速度上的提升。基于ROS分布式计算框架,设计 与实现多进程节点的视觉SLAM三维地图重建***原型。通过运行实时的无人机 载视觉传感器图像数据,验证基于视觉SLAM的三维地图重建算法的实用性,具 有推广应用的价值。
附图说明
图1是本发明的总体设计框架图;图2是本发明的***流程设计图;图3 是本发明的算法模块依赖关系图;图4是本发明的视觉SLAM算法前端设计流程 图;图5是本发明的视觉SLAM算法重建端设计流程图;图6是本发明的特征提 取与匹配流程图;图7是本发明基于ORB特征配准结果(未剔除误匹配)图; 图8是本发明基于ORB特征配准结果(已剔除误匹配)图;图9是本发明的关 键帧提取流程图;图10是本发明的四组解相对应的关键帧相对位姿图;图11 是本发明的无人机影像匹配与运动估计结果图;图12是本发明的迭代关键帧数量与每次迭代像素点数关系图;图13是本发明的迭代关键帧数量与每次迭代计 算时间关系图;图14是本发明的NCC=0.90时重建结果,图中(a)原始图像; (b)1帧;(c)5帧;(d)10帧;(e)15帧;(f)25帧;图15是本发明的稠 密重建算法并行化策略图;图16是本发明的基于ROS的软硬件***结构图;图 17是本发明的设备IP与主机名绑定图;图18是本发明通过launch文件运行节 点示意图;图19是本发明的GPU详细信息图;图20是本发明的传感器数据中 部分图像;图21是本发明的无人机视角下大楼图;图22是本发明的基于传感 器数据的运动轨迹估计效果图;图23是本发明的基于传感器数据的增量式三维 重建结果图;图24是本发明的的三维地图重建结果图;图25是本发明的实验 中传感器数据的位姿估计与三维地图对应关系图;图26是本发明的建筑物三维 重建实验点云结果图;图27是本发明的重建精度评价结果(误差方差与有效像 素百分比关系)图。
具体实施方式
下面结合附图对本发明作进一步说明:
本发明在充分分析三维地图重建的方法及视觉SLAM算法实现原理的基础 上,结合无人机与嵌入式计算平台特性,实现在无人机平台上的三维地图快速 重建。针对视觉SLAM算法在无人机平台上的多节点分布式计算、通信与数据传 输、CUDA并行计算等关键技术进行发明。
(1)对三维地图重建方法进行分析,理解其实现过程及数学原理,分析制 约无人机平台的三维重建方法效率提高的瓶颈,针对其存在的问题,提出解决 思路并发明对应的关键技术。
(2)研究ROS分布式计算架构特性,并结合视觉SLAM算法设计多节点分 布式计算、通信的方式与策略,然后搭建ROS网络,基于可视化工具对ROS下 的节点运行状态及图像、三维信息进行实时监测。
(3)引入CUDA并行编程模型,分析三维地图重建中的算法热点,设计并 行算法,并在嵌入式GPU平台上对其实现,验证其在处理速度上的提升。
(4)基于ROS分布式计算框架,构建软硬件集成***,设计多进程节点的 视觉SLAM三维重建算法,并实现实时的增量的可视化。
(5)通过回放无人机机载视觉传感器获取的图像流数据,验证基于视觉 SLAM的三维地图重建算法的实用性。
本发明实现的主要功能为三维地图快速重建,为达到这一目标,首先需要 进行图像数据的获取,然后基于视觉SLAM算法进行处理,最终生成的结果将通 过可视化的形式展示出来,由此,本发明的总体设计框架如下图4-1所示。
根据本发明的功能实现可将其分为硬件部分与软件部分,硬件包括视觉传 感器、无人机、嵌入式处理器、GPU,软件实现视觉SLAM的核心算法。软硬件 通过分布式框架及通信协议相互联系,组成完整的软硬件***。
***流程设计:
基于上述的总体设计,本发明软硬件集成***运行流程如下图4-2所示, 其流程如下:
(1)无人机机载嵌入式搭载视觉传感器,获取实时图像序列;
(2)图像序列分别传输至前端与后端;
(3)前端通过特征提取匹配、关键帧提取、位姿估计为后端提供位姿初值;
(4)后端对(2)中接收的图像进行闭环检测,并对(3)中获取的位姿进 行优化;
(5)后端基于位姿与图像进行稠密重建;
(6)由观测端通过ROS可视化工具进行实时监测。
为降低本发明所设计的***的复杂度,便于明确前后端任务分工与测试, 因此将***的算法部分分为VO前端与建图后端。这样就能够使前后端相对独立 地工作,降低了代码间的耦合度,便于后期模块的优化或替换。VO前端主要实 现特征提取与匹配、运动估计、关键帧提取,建图后端主要实现闭环检测、位 姿优化、稠密重建,前后端与各功能之间的依赖关系如图4-3所示。
图4-3中,各部分的具体功能及设计思路如下:
(1)特征提取与匹配:该部分主要的功能是将相邻的图像建立数据关联, 由于本发明的***未借助于除视觉以外的定位方式进行辅助,因此需要先确定 相邻图像中的同一观测点,该模块的准确性直接影响到位姿估计的可靠性。
(2)运动估计:该部分的主要功能是基于特征提取与匹配模块的结果,即 若干同名特征点对在不同图像中各自的像素位置,通过对极约束联立方程组, 求解出相机运动。
(3)关键帧提取:该部分的主要功能是剔除冗余与无效的图像,筛选出足 以实现稠密重建的数据,大大降低了计算量,同时一定程度上提升了算法的鲁 棒性。
(4)闭环检测:该部分的主要功能是检测无人机是否返回到某一曾经到达 过的位置,以此来为位姿优化提供约束条件。该部分通过开源库BoW3实现。
(5)位姿优化:该部分的主要功能是在检测到闭环之后,对所有关键帧的 位姿通过光束平差进行优化,以减少仅靠相邻帧估计运动所产生的累计误差。 该部分通过开源库g2o实现。
(6)稠密重建:该部分的主要功能是基于关键帧及其位姿数据,对关键帧 中每个像素的空间位置进行估计,其结果将直接反馈与所构建的三维地图上。
算法流程设计:
正如前文所述,视觉SLAM算法属于一种计算密集型的算法。基于特征的视 觉SLAM前端,一直以来均被认为是VO的主流方法,其运行稳定,对光照、动 态物体不敏感等特点,使其逐渐成为目前比较成熟的一种解决方案。本发明所 设计的VO前端算法流程如图4-4所示。
由上图4-4可知,视觉SLAM前端算法的流程如下:
(1)SLAM***提供接口,接收由传感器所获取的连续的图像序列,将图 像序列传入VO端;
(2)判断SLAM***是否已初始化完成,若未完成,则进行第(3)步,若 已完成初始化,则进行第(4)步;
(3)初始化第一个关键帧,并初始化位姿T0;
(4)持续对图像序列进行ORB特征提取,选取下一个关键帧Fi(i>=1);
(5)将Fi与Fi-1的ORB特征进行匹配,并筛选出可靠的匹配;
(6)基于可靠的特征点对,通过对极约束求解帧间的运动,计算出该关键 帧的位姿Ti;
(7)若帧流结束则停止,否则返回第4步。
在稠密重建中,需要知道所获取的图像数据的大部分像素点的距离,在使 用单目相机的情况下,通过三角化测量来估计像素的距离。本发明所设计的稠 密三维地图重建的算法通过多次迭代,更新所求关键帧的深度图直至其收敛, 其每一次迭代的流程如图4-5所示。
图4-5中,重建部分算法的流程如下:
(1)选取需要计算深度的目标像素点p;
(2)基于相机运动,即相机光心的平移向量,以及所求关键帧相机光心与 p的连线的向量,构成的平面交新关键帧于极线,计算极线位置;
(3)遍历所求得的极线,搜索与p匹配的点;
(4)通过三角测量计算出p点实际的空间位置;
(5)更新该像素的深度信息;
SLAM前端设计:
特征提取与匹配方法设计:
本发明进行特征提取与匹配的流程如下图4-6所示。
首先检测Oriented FAST角点位置,然后基于角点位置,计算其BRIEF描 述子。对两幅图像中BRIEF描述子进行匹配,记录其汉明距离,即二进制字符 串不同位数的个数。记录所有匹配之中的最小值dmin,若描述子之间汉明距离 大于2倍dmin,则删除该匹配,反之保留该匹配。
此处删除误匹配的方法是一种工程上的经验值,图4-7为基于ORB特征进 行的未剔除误匹配的配准结果,可以明显看出,两幅图像的ORB特征匹配过程 中产生了大量的误匹配。
通过剔除汉明距离大于2倍dmin之后,再次所剩余的匹配如图4-8所示,其 结果显示,在有明显纹理特征处,匹配相对准确。
至此,我们获得了图像序列相邻帧之间的数据关联,即同名特征点在图像 中所在的不同像素位置。而同名特征点在空间中实际位置是一致的,由其映射 在两个像平面的若干个同名点对,交由运动估计模块进行位置与姿态的估计。
关键帧提取方法设计:
在进行位姿估计之前,考虑到对于无人机平台利用视觉SLAM进行三维重 建来说,视觉传感器可以以每秒几十帧的速率进行数据的采集,然而由于计算 资源的有限性,我们无法将传感器获取的所有帧数据都送入SLAM***进行处 理。同时,获取的图像数据也包含着大量的冗余和无效的帧,也没有必要将所 有帧数据用于参与位姿的估计与计算。因此,我们需要从图像序列中提取出具 有代表性的关键帧,计算关键帧的位姿,以关键帧为基准,在局部范围内进行 相对可靠的像素深度的估计。由此我们设计提取关键帧的策略如图4-9所示。
首先处理第一张图像,先检测FAST特征点和边缘特征,如果图像中间的特 征点数量超过设定的阈值,就把这张图像作为第一个关键帧,然后处理第一张 之后的连续图像,持续跟踪特征点。当匹配点的数量大于阈值,如果视差的中 位数大于阈值,选择计算本质矩阵E,否则选择计算单应矩阵H。如果计算完H 或E后,还有足够的内点,就将其作为关键帧。
相机运动估计:
相机的运动估计即计算出相邻关键帧之间的平移向量t和旋转矩阵R,而t与 R可通过分解本质矩阵E来获得,而在关键帧相机只有旋转而无平移的时候,两 视图的对极约束不成立,基础矩阵F为零矩阵,这时候需要分解单应矩阵H。分 解方法为奇异值(SVD)分解:
tR=E=UDVT (4-1)
其中,U、V均为三阶正交矩阵,D为对角阵D=diag(r,s,t)。分解可得对角 矩阵的特征值,该3个特征值中将会有两个特征值为正,其值相等,另一个则 为0。在分解过程中会获得四组不同的解,分别对应关键帧的四种相对位姿,如 图4-10所示。
由图4-10可知,该四组解中只有第一组具有实际的物理意义,即关键帧对 应的场景深度为正值,而其余三组解只有理论意义,实际上无法获得正确的相 机运动。综上,可通过景深来判断正确的一组解,基于图4-8的位姿估计结果如 图4-11所示。
稠密重建设计:通过上文中对视觉SLAM前端的设计,我们可以高效且相 对可靠地估计出每一个关键帧的空间位置与姿态方向,而基于该位置与姿态, 以及关键帧数据,可以反过来推导出任意像素点的空间位置,即对任意像素的 深度进行预测。
本发明在构建稠密三维点云地图中引入极线搜索与块匹配算法,以此来估 计获取图像中大部分像素的深度信息。以相邻两幅图像中估计任一像素的深度 来说,对于某一个像素p1对应的空间点P,相邻两帧的相机光心与其连线O1P、 O2P以及O1O2共面,其中O1P交第一帧于p1,O2P交第二帧于p2,则p2必 然落于面O1O2P与第二帧交线上,即p1在第二帧中的位置在极线上。
由于单个像素的亮度没有区分性,则考虑对像素块相似性进行比较,即在 像素点p1周围取一块w*w的小块,然后遍历极线上各点,与其周围的w*w的 小块进行匹配,则算法的假设由像素的灰度不变性转为图像块的灰度不变性。
对于两个小块的匹配,计算其归一化互相关(Normalized Cross Correlation,NCC):
在极线上计算每一个相似性度量之后,将会得到一个沿着极线的NCC分布, 即p1像素在第二帧中出现的概率分布,NCC值越高,则该点为p1像素的同名 点概率越高。然而仅靠两张图像计算某像素的深度值存在一定的偶然性,因此 需要多张图像进行估计。我们假设某个像素点的深度d服从高斯分布:
P(d)=N(μ,σ2) (4-3)
每当新的数据到来时,观测其深度也将会是一个高斯分布:
则更新观测点p1的深度变成一个信息融合问题,而融合后的深度则满足:
经过多次迭代,则p1在第二帧极线上的概率分布峰值越接近其真实位置。 由此,对于稠密重建其完整步骤如下:
(1)假设所有像素的深度满足某个初始的高斯分布;
(2)当新数据产生时,通过极线搜索与块匹配确定投影点位置;
(3)根据几何关系计算三角化后的深度及不确定性;
(4)将当前观测融合进上一次的估计中,若收敛则停止计算,否则返回第 2步。
稠密重建串行算法实现与测试:
通过极线搜索与块匹配技术,我们能够在实现运动估计后,对图像中大量 非特征像素进行深度的估计,然而对于无人机平台的视觉SLAM来说依然存在 以下问题:上述的方法计算量极大,以640*480大小的图像为例,每次深度估 计时需要对约30万个像素点的进行计算,为满足***的快速实时性的需求,需 要对算法进行并行优化。
在对SLAM***中稠密重建这一模块进行并行化之前,应选择合适的并行 化方式,制定合理的并行化策略,为下一步的并行化实现做好理论基础。下面 将结合稠密重建原理、嵌入式GPU平台特性、常见并行化方法,对并行化思路 进行分析。
由上文可知,稠密重建需要经过多次迭代,首先假设所有像素的深度满足 某个初始的高斯分布,当新数据产生时,通过极线搜索与块匹配确定投影点位 置,然后根据几何关系计算三角化后的深度及不确定性,最后将当前观测融合 进上一次的估计中,若收敛则停止计算,否则重新确定投影点位置;
为实现快速高效的三维重建,必须在稠密重建前确定好NCC阈值、每次迭 代帧数等参数,为此,本发明用50幅关键帧对参照帧进行迭代计算深度,分别 计算NCC为0.85、0.90、0.95时,每次迭代的像素点数与计算时间。本发明的 实验平台选择了Think PadT470p,其处理器为Intel i7 7700HQ,运行内存大小 为16GB。使用的数据为由无人机获取的REMODE数据集,图像大小为640*480, 实验结果如图4-12、4-13所示。
由图4-12可知,当关键帧数在20帧附近时,每次迭代图像更新的像素数量 将会远小于图像中总像素数。另一方面,NCC越高时,每次更新的像素点数越 少,反之,NCC越低时,每次更新的像素点越多,这与理论上当匹配阈值降低 时像素越容易更新一致。而NCC值越高,则稠密重建的可靠性越高,但其结果 会越稀疏。
由图4-13可知,NCC的值也会影响到稠密重建的时间,约在17帧前,NCC 对重建的计算时间影响较小,而约在17帧之后,每次迭代的时间趋于稳定,NCC 越高则每次迭代的计算时间越长。
综合考虑本发明中对于点云的稠密需求、重建结果可靠性以及快速实现需 求,选定参数NCC=0.9,迭代过程中分别进行1帧、5帧、10帧、15帧、25帧 时的迭代结果如图4-14所示,当迭代至15帧后,深度图趋于稳定;
图4-14NCC=0.90时重建结果(a)原始图像;(b)1帧;(c)5帧;(d)10 帧;(e)15帧;(f)25帧
稠密重建算法整体并行化策略:
在实验中,稠密深度图的估计非常耗时,这是因为每张图像所需估计的点 从原先的数百个特征点,一下子变成了几十万甚至几百万个像素点,即使现在 主流的CPU也无法实时计算如此庞大的数量。然而,稠密重建过程又有另一个 性质:这数十万个像素点的深度估计是彼此无关的,这就使得并行化有了用武 之地。
在上述伪代码中,遍历图像每个像素时采用了一个二重循环,并逐个像素 点对其进行极线搜索。当使用CPU时,该过程为串行的,即当上一个像素计算 完毕之后再计算下一个像素。然而实际上,下一个像素与上一个像素之间没有 明显的联系,因此完全没有必要等待上一个像素的计算结果。
本发明中稠密重建算法的并行化策略如图4-15所示,其中,TX2的CPU负 责关键帧读取、深度图及其方差矩阵的初始化,GPU负责对每个像素点进行深 度估计。当GPU完成对像素点更新后,也是由CPU将数据拷贝至主机端内存 中。
通过上文中对算法原理和算法描述可知,该过程适合遵循数据并行的原理 进行并行化设计,即将不同像素数据映射到处理器不同的工作项并行处理,不 同的工作项上进行不同像素的深度估计迭代运算。数据分配策略采取的是连续 数据分配方式,按照此种分配方式我们可以保证工作项直接分配到的像素数目 相差不超过1,这样就基本维持了工作项处理任务数目的一致。
按照上述分配方式完成计算设备工作项的数据分配,每个工作项从全局内 存空间中依次读取图像待处理的像素数据,放置到私有内存空间进行迭代,处 理完成后,再将私有内存中的处理结果返回到全局内存空间,待所有工作项完 成分配给各自的像素数据处理之后,主机端将设备全局内存空间处理结果拷贝 到内存中进行最终深度图矩阵数据的输出。
稠密重建并行算法的实现:
本发明设计的主机端程序为ROS节点,负责程序的初始化、参数设定等工 作,节点运行至对关键帧的深度图进行迭代时,将调用核函数,由GPU端执行,
在运行串行代码的同一平台上使用同一数据集对并行代码进行了测试,通 过20幅关键帧对参考帧进行迭代,通过5实验取均值,相比于串行算法,并行 算法得到了约7.55倍的加速比,使得深度图计算时间大幅降低,为***的实时 性提供了支持。
基于ROS的视觉SLAM节点通信设计与算法实现:
视觉SLAM节点通信设计:
在视觉SLAM的实际应用场景(如无人机、自动驾驶汽车等)中,平台往 往处于复杂的环境中,***的任意模块均有可能发生故障,因此,本发明采用 ROS分布式计算架构,以降低***各模块之间的耦合,提高***在复杂环境中 的可用性与可靠性。本发明将视觉SLAM重建过程中的数据获取、位姿估计、 稠密重建、可视化分别由四个计算节点运行,每个节点各司其职,节点间通信 采用Topic订阅模式,***结构如图4-16所示。
由图4-16可知,***工作时共4个节点参与通信,其中,传感器捕捉数据, 其原始数据被发布成话题/sensor_msgs,由视觉传感器与Jetson TX2通过USB 或CSI接口直连,将流数据转换为图像序列数据消息,重新发布成话题/usb_cam。
VO节点订阅/usb_cam,进行位姿估计,并将结果发布至成位姿数据,重建 节点同时订阅/usb_cam与位姿数据,并将处理后得到的深度图数据与点云数据 发布至ROS网络中,由可视化节点订阅,实现***的增量地图构建的可视化功 能。
视觉SLAM算法节点实现:
SLAM前端,即VO节点,与后端重建节点同时订阅话题/usb_cam。VO节 点将/usb_cam节点所发布的数据通过SLAM前端库的接口进行位姿解算,然后, 将其以消息的形式进行发布,由SLAM后端的重建节点进行订阅,即重建节点 同时订阅帧数据以及位姿数据。
基于深度图的三维点云可视化:
为了能够实时地对三维地图重建的结果进行可视化,本发明采用的方法流 程如下:
(1)当选取的参照帧其深度图收敛时,将深度图结果发布至话题;
(2)可视化节点根据参照帧及其时间戳,获取由VO节点发布的位姿/pose;
(3)基于初始化结果,计算出该参照帧光心的空间位置以及该帧的法线方 向;
(4)基于深度图逐像素构造点云。
***环境与运行:
ROS网络:
ROS支持的操作***平台包括Ubuntu、OS X、Fedora、Gentoo、OpenSUSE、 Debian、Arch Linux和Windows等。由于Ubuntu提供丰富的可视化功能且在该 ***下ROS的安装与部署方便快捷,所以本发明选用了Ubuntu 16.04作为ROS 的运行平台,ROS的常用命令如表4-1所示。
表4-1ROS常用命令
命令 | 功能 |
rosmake | 编译ROS包 |
roscore | 运行ROS核心进程 |
rosrun | 运行ROS包 |
roslaunch | ROS启动脚本 |
rosnode | ROS节点 |
rostopic | ROS话题 |
ROS能够快速组建分布式计算***,在本发明中,分布式计算***由机载 的NVIDIA Jetson TX2与便携式PC通过无线局域网络构成,在双机通信前,首 先需要在各自终端输入ifconfig查看两台设备各自的IP信息,然后修改/etc目录 下的hosts文件,将两台设备的IP与主机名绑定,如图4-17所示,其目的是让 ROS底层能够解析对方主机名。修改完之后在两台设备上重启网络。
在运行SLAM***的各节点时,需要首先选定节点管理器,由节点管理器 所在设备终端输入roscore启动ROS核心进程,当该设备需要运行其他进程时可 直接通过rosrun或roslaunch开启节点。本发明中节点管理器在机载的TX2上运 行。
为能够使便携式PC加入ROS网络,需要在PC上配置ROS_MASTER_URI, 在其终端输入:export ROS_MASTER_URI=http://tx2:11311
其中TX2为已经修改好的主机名,11311为ROS节点管理器的端口号。此 时,由两台设备组成的ROS网络配置就已完成。
ROS分布式运行的特性,使得本发明所构建的***在运行时,需要控制多 个进程节点。而无人机载端无法直接控制,因此需要使用SSH进行远程连接。 Ubuntu下使用SSH十分方便,只需开启一个新的终端,当机载设备TX2与用于 控制的PC处于同一局域网内时,在终端输入TX2的IP地址等信息即可建立会 话连接,连接成功通过指令或运行脚本即可实现对节点的控制。
算法部署与运行:
VO节点与重建节点既可以在机载设备端运行,也可以在地面端便携式PC 上运行。鉴于VO节点与重建节点都订阅了由传感器节点发布的消息,则中间 存在着大量的通信开销,而NVIDIA Jetson TX2有足够计算力能够支持以上节点 同时运行,因此本发明将该两个节点于TX2上运行,地面端PC开启rviz可视 化工具来观测实时重建出的三维地图。
如前一节的设计与实现,***在运行时需要同时开启四个节点并开启一个 ROS核心进程,传感器节点涉及到相机内参数,由于每个相机的内参数不完全 一致,因此在使用传感器前需要对其进行标定。在获取了传感器的内参数矩阵 之后,便于之后重复使用,因此创建一个ROS启动脚本,其中省略了相机的内 参数,开启ROS核心进程后,运行该脚本,则可开启传感器节点。
为方便观测,开启传感器节点后,可在远端开启rviz可视化进程,rviz的启 动指令为rosrun rviz,开启后界面如下所示。当向ROS MASTER注册的进程运 行时,即可通过rviz进行可视化,如在SLAM***中观测输入的帧、选取的关 键帧、基于关键帧计算出的深度图等。
本发明中的ROS的节点在运行时需要一些初始化的参数,如图像的长、宽、 通道等信息,若是直接运行则需要输入较长指令,因此本发明采用launch文件 的方式,将节点运行的参数写入其中,执行launch文件即可使进程节点带参运 行,且可以调用相机内参等数据,整个***的启动过程如图4-18所示。
当本发明的***运行时,每个终端只能够控制一个节点,而每个节点在运 行前都需要设置环境变量,然后执行与节点对应的launch文件这一操作需要多 次重复进行,并且在该过程中难免会出现遗漏或键入的错误,因此,为节约时 间,本发明在***运行时引入Ubuntu下的Shell脚本,来将所有需要执行的命 令写入一个脚本同一执行。
通过vim或者gedit编辑如下的脚本内容,以.sh为后缀命名,然后修改权 限使其成为可执行文件,最后运行该脚本即可运行本发明的***;
小结:
本发明具体介绍了基于视觉SLAM的三维地图重建***的实现方式和步 骤。首先对软硬件***进行了总体设计,然后对***流程、算法流程已经各功 能模块进行了设计。然后结合无人机平台特性,基于ROS分布式计算框架,设 计并实现了视觉SLAM节点功能与通信。最后对ROS环境与网络配置、算法部 署与运行做出了介绍。
本发明的发明目标是实现基于视觉SLAM的无人机三维地图快速重建,其 成果展示是一套能够实现该功能的软硬件集成***。因此,本发明分别基于图 像序列与传感器数据,在无人机机载嵌入式计算平台NVIDIA Jetson TX2上进行 算法的验证,并通过rviz可视化工具进行成果的展示。
实验平台及配置
本发明对基于视觉SLAM算法的位姿估计与三维地图重建进行验证实验, 在无人机机载嵌入式计算设备上进行测试,其硬件配置和软件配置的详情如表 5.1所示。
表5.1实验环境软硬件配置信息表
其中,NVIDIA Jetson TX2的GPU详细信息如下图5-1所示,CUDA版本 为9.0,CUDA核心数为256,Wrap大小为32,每个Block最大进程数为1024。
实验内容:
无人机运动估计与增量可视化实验:
该实验是针对应急救灾场景下,废墟环境的无人机传感器影像数据,分别 在树莓派3B平台与NVIDIA Jetson TX2平台对算法的位姿估计与稠密重建节点 进行测试。
其中,树莓派3B平台由于其计算能力较差,且没有搭载GPU用于稠密重 建算法加速,因此仅测试其运行VO节点结果,并通过rviz可视化工具对无人 机运动轨迹进行观测与分析。
NVIDIA Jetson TX2平台同时运行VO节点与重建节点,并通过rviz可视化 工具对基于无人机影像重建的三维地图进行观测。最后,将稠密重建的三维地 图结果与Smart3D三维重建软件的重建结果进行对比与分析。
测试树莓派3B平台下运动估计节点的实验步骤如下:
(1)树莓派3B启动ROS核心进程roscore;
(2)将用于观测的笔记本与树莓派3B配置在同一无线局域网内,并在观 测端指定ROS_MASTER_URI为树莓派3B的11311端口;
(3)树莓派3B运行VO节点,观测端运行rviz可视化工具;
(4)在树莓派3B上通过rosbag play回放实验数据;
测试NVIDIA Jetson TX2平台下同时进行定位与三维地图快速重建的实验 步骤如下:
(1)NVIDIA Jetson TX2启动ROS核心进程roscore;
(2)将用于观测的笔记本与NVIDIA Jetson TX2配置在同一无线局域网内, 并在观测端指定ROS_MASTER_URI为TX2的11311端口;
(3)TX2上运行VO节点与重建节点,观测端运行rviz可视化工具;
(4)在TX上通过rosbag play回放实验数据;
(5)在观测端观测基于无人机载视觉传感器数据的三维地图重建。
建筑物三维重建实验:
该实验是针对无人机视角下的图像数据对本发明稠密重建算法进行验证, 将生成的三维点云地图保存为pcd格式的点云文件,通过pcl点云库实现可视化。
重建时间与精度评价实验:
为了定量评估本发明的方法,对本发明重建的时间与精度进行评价实验。
重建时间评价实验是分别通过本发明的串行算法运行时间与本发明的并行 算法运行时间对比、Smart3D软件重建时间(SfM算法)与本发明***重建时间 进行对比。
重建精度评价实验是通过重建过程中的参照帧与对应的真实深度图进行对 比来进行,绘制出有效像素与误差的方差曲线。
实验数据:
(1)无人机运动估计与增量可视化实验数据
传感器rosbag实验数据1组,其图像尺寸均为752*480,相机内参数均已 标定,由搭载嵌入式计算设备的无人机,通过传感器获取,不经过压缩,直接 将图像以message形式发布于ROS网络中,通过rosbag记录当前时刻所有的 Topic及message信息并存储,以此用于实验的复现。复现时,只需要通过运行 “rosbag play xx.bag”就能够模拟当时传感器状态,验证算法在硬件平台的可用 性。
传感器数据为室外废墟场景,存储大小为2.1GB,消息发布于 /camera/image_raw,共6387条message,部分数据如下图5-2所示。
(2)建筑物三维重建结果实验数据
为验证本发明对建筑物的三维重建效果,通过无人机获取了电子科技大学 清水河校区创新中心的单视角俯视数据,其中一幅参照帧如下图5-3所示。
(3)重建时间与精度评价实验数据
重建时间评价实验选择的数据为本发明中使用的REMODE数据集以及使 用的无人机增量可视化实验中使用的传感器数据,本发明将所使用的传感器数 据rosbag中的图像通过脚本采样提取出来,采样频率为2秒/帧。
重建精度评价实验数据集由三维合成模型的光线跟踪生成的视图组成。每 个视图都有相关的精确相机位姿和深度图,该数据集的部分信息如表5.2所示。
表5.2数据集信息
帧数 | 尺度(m) | 均值(m) | 最大运动(m) |
200 | 0.827-2.84 | 1.531 | 4.576 |
实验结果及分析:
实验结果:
(1)无人机运动估计与增量可视化实验结果
树莓派3B平台下运行本发明算法VO节点的运动估计效果如图5-4所示。
图5-4为调整观测视角后自上而下的俯视观测,其中线段为拟合的相机运动 轨迹,拟合的线段上的端点的位置为关键帧对应时刻传感器被估计的空间位置。 在算法执行过程中,能够在传感器运动过程中同步进行位姿的估计,拟合的轨 迹与直接观测传感器数据的运动相匹配。
基于估计的位姿,在NVIDIA Jetson TX2平台下进行三维地图快速重建,图 5-5为俯视角度的增量式三维重建过程。
图5-5为算法运行时,可视化工具实时观测增量式地进行三维地图重建的效 果,在算法执行过程中,能够在传感器运动过程中同步进行稠密三维地图的重 建,重建结果生成时间较传感器运动稍慢数秒,由可视化工具下方的时间戳可 知,该区域重建过程时间为54秒,基本能够满足实时性需求。
图5-6(a)、(b)、(c)为本发明稠密三维地图重建的结果。
图5-6(a)、5-6(b)、5-6(c)中可看出,本发明算法构建的三维环境地图 在计算时间大幅缩短的情况下仍然能保证较好的三维地图重建结果,重建的稠 密三维点云能较好地反应测区空间三维信息;本发明中运动轨迹与三维地图的 对应良好,如图5-7所示。
(1)建筑物三维重建实验结果
该实验的重建结果如图5-8所示。其中,5-8(a)至5-4(c)分别为该实验 中三维点云从正视、俯视、右视的结果,存储格式为pcd,通过pcl_viewer在三 维点云空间中表示出来。
(3)重建时间与精度评价实验结果
本发明的串行算法重建运行时间与本发明的并行算法运行时间对比、 Smart3D软件重建时间(SfM算法)与本发明***重建时间进行对比结果如下表 5.3所示。
表5.3本发明重建时间评价结果
实验数据 | 重建算法 | 重建时间 | 本发明重建时间 | 加速比 |
桌面(20帧) | 本发明串行算法 | 63.53 | 8.41 | 7.55 |
桌面(50帧) | SfM | 136 | 22 | 6.18 |
废墟场景 | SfM | 436 | 54 | 8.07 |
重建精度评价实验是通过重建过程中的参照帧与对应的真实深度图进行对 比来进行,绘制出有效像素与误差的方差曲线。当本发明算法逐像素的深度图 估计结果误差在5cm与15cm范围内时,有效像素的百分比与误差方差σ2的关 系如图5-9中绿线与浅蓝线所示。其中,方差计算公式为:
w为图像的宽,h为图像的高,di为第i个像素的估计值,dst为该像素的标 准值,n为在误差允许范围内有效像素的个数,err为设定的误差范围。
实验结果分析:
(1)无人机运动估计与增量可视化实验结果分析
通过该实验的位姿估计实验,可以得出以下结论:ROS分布式计算架构能够 通过传感器、嵌入式计算设备等硬件与算法的集成,实现无人机平台上部分应 用;本发明算法在运动估计时能够在低性能的嵌入式计算设备上也取得较好的 实时性;基于视觉SLAM算法的VO节点能够较好地实现无人机位姿的状态估计。
通过该实验的三维地图重建实验可以得出以下结论:本发明基于视觉SLAM 的重建方法,能够大幅加快三维地图重建的速度,在性能较好的嵌入式计算平 台上能够快速地呈现直观的三维地图结果,为基于无人机图像的三维重建提供 较好实时性;本发明的运动估计与传感器移动相符,在传感器运动过程中增量 式地构建局部三维地图,能够呈现较好的地形、地势等重建结果,提供了丰富 的三维信息;运动过程中增量式构建地图的过程,相较于全局范围图像的三维 重建,在一定程度上能够避免因大量相近特征点误匹配造成的空间错乱现象, 三维地图的可靠性与可用性更高。
(2)建筑物三维重建实验分析
通过该实验的结果分析可以得出以下结论:本发明算法能保证较好的三维地 图重建结果,重建的稠密三维点云能较好地反应测区空间三维信息,对于有丰 富纹理区域重建效果较好,但对于玻璃等镜面的重建结果会产生点云缺失与空 洞。
(3)重建时间与精度评价实验结果分析
通过该实验的结果分析可以得出以下结论:
在重建时间评价方面,本发明的并行算法相比于串行算法在运行时间上有着 良好的加速比,能够为无人机三维地图的快速重建提供较好的实时性保证;另 一方面,本发明***的三维重建时间相比较基于SfM算法的Smart3D软件也有 着较大幅度的提升。
在重建精度评价方面,本发明三维地图重建精度很大程度上取决于深度图估 计的精度,通过该实验的定量实验可以得出以下结论:在实验所采用的数据集 下,本发明稠密重建的深度图误差小于5cm的有效像素占总像素的比例能达40% 以上,误差小于15cm的有效像素的有效像素占总像素的比例能达近60%,深度 图估计结果较好,能为三维地图可视化提供较好的参照值。
除此以外,本发明基于ROS分布式计算架构能够将视觉SLAM的运动估计与 稠密三维地图重建同时在无人机机载计算平台运行,这也为其他复杂应用在无 人机平台的部署提供了可借鉴的方案。
验证了ROS分布式计算架构在无人机平台应用的可行性,同时对本发明的算 法分别在树莓派3B和NVIDIA Jetson TX2平台上进行了测试;本发明的运动估计 算法在低性能嵌入式计算设备上也能够保证较好的实时性,稠密重建算法在高 性能的嵌入式设备上能够快速实现稠密三维地图的重建;无人机平台的增量式 三维重建过程能够在观测端同步进行观测,重建的结果相较于图像数据更为直 观,重建精度评价实验表明三维地图重建误差较小,深度图估计结果较好,提 供的三维地图可视化结果能够体现出观测场景的空间特性。
以上显示和描述了本发明的基本原理和主要特征及本发明的优点。本行业 的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中 描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明 还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本 发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (1)
1.一种基于稠密视觉SLAM的无人机三维地图快速重建方法,其特征在于:包括无人机平台三维地图快速重建、无人机三维地图快速重建算法、无人机三维地图快速重建***、基于ROS的视觉SLAM节点通信***和基于ROS的视觉SLAM节点通信算法;
所述无人机平台三维地图快速重建:
基于ROS的***硬件底层抽象方法:
接受使用sensor_msgs/Image消息类型的传感器数据,该消息类型包含RAW图像和压缩图像两种,RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据;
在成功获取传感器数据后,ROS在图像管道提供了相机标定、扭曲校正、颜色解码,ROS图像管道通过image_proc功能包运行,提供用于从摄像头采集的RAW图像中获取单色和彩色的转换功能,在标定完摄像头,图像管道就会提取CameraInfo消息并修正图像的径向与切向畸变,即在获取数据的同时能够完成预处理;
对于复杂的图像处理任务,使用OpenCV、cv_bridge和image_transport库对消息进行转换连接,对订阅和发布的图像Topic进行处理,另一方面,OpenCV进行图像处理时,使用cv_bridge将其转换为ROS Image消息发布;
在ROS中将执行计算的进程称为节点,为了在节点中使用OpenCV进行图像处理,需要安装独立的OpenCV库,然后必须在工作空间下的package.xml文件中指定编译和运行需要的opencv2依赖包;然后,对于每个使用OpenCV的节点,必须在target_link_libraries中加OpenCV的lib文件;最后,在节点的cpp文件中,加入所需的OpenCV头文件;
通过上述过程与步骤,实现对硬件的抽象,即通过传感器获取数据,将其发布至ROS网络中,并通过订阅图像的RAW消息,使用OpenCV来进行图像处理;
算法解耦与分布式计算:
三维重建算法运行时,将运行多个节点,每个节点对应实现各自的功能,节点间通过ROS消息进行通信,各个节点可在不同设备上运行,通过ROS构建的网络,实现算法功能的耦合;
基于CUDA并行计算的算法加速方法:
选择NVIDIA Jetson TX2嵌入式开发模块作为实验的处理平台,在基于TX2开发模块的并行程序运行时,每32个并行线程被叫做一个Wrap,GPU中线程的调度执行是以一个Wrap为一个调度单位进行的,每一个SM内有2个线程束调度器,每个线程束调度器内有32个CUDA核,该GPU共256个CUDA核;
基于Topic的消息传递与通信:
(1)启动Talker,Talker通过端口将其信息注册到Master端,其中包括Talker所发布消息的话题名、节点地址信息等;Master将这些信息加入到一个注册列表中;
(2)启动Listener,Listener向Master端注册,注册其所需订阅的话题以及Listener自己的地址信息;
(3)Master对发布者与订阅者进行信息匹配,如果二者发布/订阅同一Message则帮其建立连接;如果没有匹配的则继续等待;若找到匹配的,且此时Talker在发布Message,便会把Talker的地址发送给Listener;
(4)Listener接收到Master发送的Talker地址后,向Talker发送连接请求,同时将Listener要订阅的话题名和完成通讯所需的通信协议全发给Talker;
(5)Talker接收到Listener请求后,返还一个确认连接的信息,包括其自身的TCP地址;
(6)Listener接收到Talker的TCP地址后,通过TCP与Talker建立网络连接;
(7)Talker通过建立的TCP网络连接将数据发送给Listener;
所述无人机三维地图快速重建***:包括视觉传感器、无人机、嵌入式处理器、GPU,软件实现视觉SLAM的核心算法;软硬件通过分布式框架及通信协议相互联系,组成完整的软硬件***;其流程如下:
(1)无人机机载嵌入式搭载视觉传感器,获取实时图像序列;
(2)图像序列分别传输至前端与后端;
(3)前端通过特征提取匹配、关键帧提取、位姿估计为后端提供位姿初值;
(4)后端对(2)中接收的图像进行闭环检测,并对(3)中获取的位姿进行优化;
(5)后端基于位姿与图像进行稠密重建;
(6)由观测端通过ROS可视化工具进行实时监测;
所述无人机三维地图快速重建算法:
视觉SLAM前端算法的流程如下:
(1)SLAM***提供接口,接收由传感器所获取的连续的图像序列,将图像序列传入VO端;
(2)判断SLAM***是否已初始化完成,若未完成,则进行第(3)步,若已完成初始化,则进行第(4)步;
(3)初始化第一个关键帧,并初始化位姿T0;
(4)持续对图像序列进行ORB特征提取,选取下一个关键帧Fi(i>=1);
(5)将Fi与Fi-1的ORB特征进行匹配,并筛选出可靠的匹配;
(6)基于可靠的特征点对,通过对极约束求解帧间的运动,计算出该关键帧的位姿Ti;
(7)若帧流结束则停止,否则返回第4步;
重建部分算法的流程如下:
(1)选取需要计算深度的目标像素点p;
(2)基于相机运动,即相机光心的平移向量,以及所求关键帧相机光心与p的连线的向量,构成的平面交新关键帧于极线,计算极线位置;
(3)遍历所求得的极线,搜索与p匹配的点;
(4)通过三角测量计算出p点实际的空间位置;
(5)更新该像素的深度信息;
SLAM前端特征提取与匹配方法:首先检测Oriented FAST角点位置,然后基于角点位置,计算其BRIEF描述子;对两幅图像中BRIEF描述子进行匹配,记录其汉明距离,即二进制字符串不同位数的个数;记录所有匹配之中的最小值dmin,若描述子之间汉明距离大于2倍dmin,则删除该匹配,反之保留该匹配;
关键帧提取方法:首先处理第一张图像,先检测FAST特征点和边缘特征,如果图像中间的特征点数量超过设定的阈值,就把这张图像作为第一个关键帧,然后处理第一张之后的连续图像,持续跟踪特征点;当匹配点的数量大于阈值,如果视差的中位数大于阈值,选择计算本质矩阵E,否则选择计算单应矩阵H;如果计算完H或E后,还有足够的内点,就将其作为关键帧;
相机运动估计:相机的运动估计即计算出相邻关键帧之间的平移向量t和旋转矩阵R,而t与R可通过分解本质矩阵E来获得,而在关键帧相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵F为零矩阵,这时候需要分解单应矩阵H;分解方法为奇异值(SVD)分解:
tR=E=UDVT (4-1)
其中,U、V均为三阶正交矩阵,D为对角阵D=diag(r,s,t);分解可得对角矩阵的特征值,该3个特征值中将会有两个特征值为正,其值相等,另一个则为0;在分解过程中会获得四组不同的解,分别对应关键帧的四种相对位姿;
稠密重建:以相邻两幅图像中估计任一像素的深度来说,对于某一个像素p1对应的空间点P,相邻两帧的相机光心与其连线O1P、O2P以及O1O2共面,其中O1P交第一帧于p1,O2P交第二帧于p2,则p2必然落于面O1O2P与第二帧交线上,即p1在第二帧中的位置在极线上;
由于单个像素的亮度没有区分性,则考虑对像素块相似性进行比较,即在像素点p1周围取一块w*w的小块,然后遍历极线上各点,与其周围的w*w的小块进行匹配,则算法的假设由像素的灰度不变性转为图像块的灰度不变性;
对于两个小块的匹配,计算其归一化互相关(Normalized Cross Correlation,NCC):
在极线上计算每一个相似性度量之后,将会得到一个沿着极线的NCC分布,即p1像素在第二帧中出现的概率分布,NCC值越高,则该点为p1像素的同名点概率越高;然而仅靠两张图像计算某像素的深度值存在一定的偶然性,因此需要多张图像进行估计;我们假设某个像素点的深度d服从高斯分布:
P(d)=N(μ,σ2) (4-3)
每当新的数据到来时,观测其深度也将会是一个高斯分布:
则更新观测点p1的深度变成一个信息融合问题,而融合后的深度则满足:
经过多次迭代,则p1在第二帧极线上的概率分布峰值越接近其真实位置;由此,对于稠密重建其完整步骤如下:
(1)假设所有像素的深度满足某个初始的高斯分布;
(2)当新数据产生时,通过极线搜索与块匹配确定投影点位置;
(3)根据几何关系计算三角化后的深度及不确定性;
(4)将当前观测融合进上一次的估计中,若收敛则停止计算,否则返回第2步;
基于ROS的视觉SLAM节点通信***:采用ROS分布式计算架构,以降低***各模块之间的耦合,提高***在复杂环境中的可用性与可靠性;本文将视觉SLAM重建过程中的数据获取、位姿估计、稠密重建、可视化分别由四个计算节点运行,每个节点各司其职,节点间通信采用Topic订阅模式;***工作时共4个节点参与通信,其中,传感器捕捉数据,其原始数据被发布成话题/sensor_msgs,由视觉传感器与Jetson TX2通过USB或CSI接口直连,将流数据转换为图像序列数据消息,重新发布成话题/usb_cam;
VO节点订阅/usb_cam,进行位姿估计,并将结果发布至成位姿数据,重建节点同时订阅/usb_cam与位姿数据,并将处理后得到的深度图数据与点云数据发布至ROS网络中,由可视化节点订阅,实现***的增量地图构建的可视化功能;
所述基于ROS的视觉SLAM节点通信算法:SLAM前端,即VO节点,与后端重建节点同时订阅话题/usb_cam;VO节点将/usb_cam节点所发布的数据通过SLAM前端库的接口进行位姿解算,然后,将其以消息的形式进行发布,由SLAM后端的重建节点进行订阅,即重建节点同时订阅帧数据以及位姿数据;为了能够实时地对三维地图重建的结果进行可视化,文采用的方法流程如下:
(1)当选取的参照帧其深度图收敛时,将深度图结果发布至话题;
(2)可视化节点根据参照帧及其时间戳,获取由VO节点发布的位姿/pose;
(3)基于初始化结果,计算出该参照帧光心的空间位置以及该帧的法线方向;
(4)基于深度图逐像素构造点云。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910646511.3A CN110675483B (zh) | 2019-07-17 | 2019-07-17 | 基于稠密视觉slam的无人机三维地图快速重建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910646511.3A CN110675483B (zh) | 2019-07-17 | 2019-07-17 | 基于稠密视觉slam的无人机三维地图快速重建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110675483A true CN110675483A (zh) | 2020-01-10 |
CN110675483B CN110675483B (zh) | 2022-09-09 |
Family
ID=69068877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910646511.3A Active CN110675483B (zh) | 2019-07-17 | 2019-07-17 | 基于稠密视觉slam的无人机三维地图快速重建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110675483B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111413691A (zh) * | 2020-03-10 | 2020-07-14 | 杭州电子科技大学 | 一种采用分布式结构的语义定位和建图的方法 |
CN111596665A (zh) * | 2020-05-29 | 2020-08-28 | 浙江大学 | 一种适用于腿足机器人规划的稠密高度地图构建方法 |
CN112052300A (zh) * | 2020-08-05 | 2020-12-08 | 浙江大华技术股份有限公司 | 一种slam后端处理方法、装置和计算机可读存储介质 |
CN112612476A (zh) * | 2020-12-28 | 2021-04-06 | 吉林大学 | 基于gpu的slam控制方法、设备及存储介质 |
CN113110534A (zh) * | 2021-03-16 | 2021-07-13 | 国营芜湖机械厂 | 一种小型无人机控制与感知*** |
CN113325870A (zh) * | 2021-06-04 | 2021-08-31 | 南开大学 | 一种摄影几何约束下无人机的三维视觉覆盖轨迹规划方法 |
CN113465602A (zh) * | 2021-05-26 | 2021-10-01 | 北京三快在线科技有限公司 | 导航方法、装置、电子设备及可读存储介质 |
CN114119891A (zh) * | 2021-11-26 | 2022-03-01 | 江苏科技大学 | 一种机器人单目半稠密地图三维重建方法和重建*** |
CN114217618A (zh) * | 2021-12-14 | 2022-03-22 | 重庆富沛和科技有限公司 | 一种三维地图中选定范围进行自动巡航的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105678754A (zh) * | 2015-12-31 | 2016-06-15 | 西北工业大学 | 一种无人机实时地图重建方法 |
CN108303099A (zh) * | 2018-06-14 | 2018-07-20 | 江苏中科院智能科学技术应用研究院 | 基于三维视觉slam的无人机室内自主导航方法 |
CN108648270A (zh) * | 2018-05-12 | 2018-10-12 | 西北工业大学 | 基于eg-slam的无人机实时三维场景重建方法 |
-
2019
- 2019-07-17 CN CN201910646511.3A patent/CN110675483B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105678754A (zh) * | 2015-12-31 | 2016-06-15 | 西北工业大学 | 一种无人机实时地图重建方法 |
CN108648270A (zh) * | 2018-05-12 | 2018-10-12 | 西北工业大学 | 基于eg-slam的无人机实时三维场景重建方法 |
CN108303099A (zh) * | 2018-06-14 | 2018-07-20 | 江苏中科院智能科学技术应用研究院 | 基于三维视觉slam的无人机室内自主导航方法 |
Non-Patent Citations (1)
Title |
---|
孙玉柱 等: "基于单目视觉SLAM 的实时三维场景重建", 《信息技术》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111413691A (zh) * | 2020-03-10 | 2020-07-14 | 杭州电子科技大学 | 一种采用分布式结构的语义定位和建图的方法 |
CN111596665A (zh) * | 2020-05-29 | 2020-08-28 | 浙江大学 | 一种适用于腿足机器人规划的稠密高度地图构建方法 |
CN112052300A (zh) * | 2020-08-05 | 2020-12-08 | 浙江大华技术股份有限公司 | 一种slam后端处理方法、装置和计算机可读存储介质 |
CN112612476A (zh) * | 2020-12-28 | 2021-04-06 | 吉林大学 | 基于gpu的slam控制方法、设备及存储介质 |
CN113110534A (zh) * | 2021-03-16 | 2021-07-13 | 国营芜湖机械厂 | 一种小型无人机控制与感知*** |
CN113465602A (zh) * | 2021-05-26 | 2021-10-01 | 北京三快在线科技有限公司 | 导航方法、装置、电子设备及可读存储介质 |
CN113325870A (zh) * | 2021-06-04 | 2021-08-31 | 南开大学 | 一种摄影几何约束下无人机的三维视觉覆盖轨迹规划方法 |
CN114119891A (zh) * | 2021-11-26 | 2022-03-01 | 江苏科技大学 | 一种机器人单目半稠密地图三维重建方法和重建*** |
CN114217618A (zh) * | 2021-12-14 | 2022-03-22 | 重庆富沛和科技有限公司 | 一种三维地图中选定范围进行自动巡航的方法 |
CN114217618B (zh) * | 2021-12-14 | 2024-04-16 | 重庆富沛和科技有限公司 | 一种三维地图中选定范围进行自动巡航的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110675483B (zh) | 2022-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110675483B (zh) | 基于稠密视觉slam的无人机三维地图快速重建方法 | |
CN111968129B (zh) | 具有语义感知的即时定位与地图构建***及方法 | |
Arrigoni et al. | Robust absolute rotation estimation via low-rank and sparse matrix decomposition | |
CN107545538B (zh) | 一种基于无人机的全景图像拼接方法及装置 | |
KR101869605B1 (ko) | 평면정보를 이용한 3차원 공간 모델링 및 데이터 경량화 방법 | |
EP3152738B1 (en) | Constructing a 3d structure | |
CN104537707A (zh) | 像方型立体视觉在线移动实时测量*** | |
Zhang et al. | Aerial orthoimage generation for UAV remote sensing | |
CN116051747A (zh) | 一种基于缺失点云数据的房屋三维模型重建方法及设备、介质 | |
WO2024007485A1 (zh) | 基于视觉特征的空地多机器人地图融合方法 | |
Yao et al. | Relative camera refinement for accurate dense reconstruction | |
CN103886595A (zh) | 一种基于广义统一模型的折反射相机自标定方法 | |
Özdemir et al. | A multi-purpose benchmark for photogrammetric urban 3D reconstruction in a controlled environment | |
CN112580428A (zh) | 一种配电网设计方法及装置 | |
Bao et al. | Robust tightly-coupled visual-inertial odometry with pre-built maps in high latency situations | |
CN110349209A (zh) | 基于双目视觉的振捣棒定位方法 | |
CN113409404A (zh) | 基于新型相关函数约束的cuda架构并行优化立体变形测量方法 | |
CN112270748A (zh) | 基于图像的三维重建方法及装置 | |
Apollonio et al. | Bologna porticoes project: A 3D repository for WHL UNESCO nomination | |
CN115937452A (zh) | 一种基于分布式计算的地图重建方法与*** | |
Skuratovskyi et al. | Outdoor mapping framework: from images to 3d model | |
CN112288817A (zh) | 基于图像的三维重建处理方法及装置 | |
Bai et al. | Colmap-PCD: An Open-source Tool for Fine Image-to-point cloud Registration | |
US20240257462A1 (en) | Method, apparatus, and storage medium for three-dimensional reconstruction of buildings based on missing point cloud data | |
Li et al. | Dense Points Aided Performance Evaluation Criterion of Human Obsevation for Image-based 3D Reconstruction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |