取多幅影像相同位置像元的众值:将栅格数据转为点raster to point , 将每个像元转为点, 之后用sample 或 extract values to points。
多尺度影像分割法采用不同的分割尺度生成不同尺度的影像对象层,使得具有固定分辨率的影像数据由不同分辨率的数据组成,从而构建一个与地表实体相似的层次等级结构,实现原始像元数据在不同空间尺度间的传递,以适应特定的应用需要,从而有效地将目标区域从背景中分离出来。
影像匹配算法:
按照影像中需要进行匹配的像点的相对数目,影像匹配可分为稀疏匹配和稠密匹配两类。稀疏匹配产生稀疏的视差矩阵,主要用于确定视点与影像以及影像之间的相对位置关系。稠密匹配通常要求获得整个影像或者影像主要部分的深度图。
按照匹配元素选择不同,影像匹配可以分为灰度区域匹配和特征匹配。灰度区域匹配按照像素灰度进行匹配,特征匹配使用边缘等影像特征进行匹配。实际上,像素灰度也是一种影像特征,特征也不一定是某些可以解释的几何特征。具有可分辨性、不变性和稳定性的属性都可以作为匹配特征。
避障是指移动机器人在行走过程中,通过传感器感知到在其规划路线上存在静态或动态障碍物时,按照 一定的算法实时更新路径,绕过障碍物,最后达到目标点。
避障常用哪些传感器?
不管是要进行导航规划还是避障,感知周边环境信息是第一步。就避障来说,移动机器人需要通过传感器 实时获取自身周围障碍物信息,包括尺寸、形状和位置等信息。避障使用的传感器多种多样,各有不同的原理和特点,目前常见的主要有视觉传感器、激光传感器、红外传感器、超声波传感器等。下面我简单介绍一下这几种传感器的基本工作原理。
超声波
超声波传感器的基本原理是测量超声波的飞行时间,通过d=vt/2测量距离,其中d是距离,v是声速,t是 飞行时间。由于超声波在空气中的速度与温湿度有关,在比较精确的测量中,需把温湿度的变化和其它因素考虑进去。
上面这个图就是超声波传感器信号的一个示意。通过压电或静电变送器产生一个频率在几十kHz的超声波脉冲组成波包,系统检测高于某阈值的反向声波,检测到后使用测量到的飞行时间计算距离。超声波传感器一般作用距离较短,普通的有效探测距离都在几米,但是会有一个几十毫米左右的最小探测盲区。由于超声传感器的成本低、实现方法简单、技术成熟,是移动机器人中常用的传感器。超声波传感器也有一些缺点,首先看下面这个图。
因为声音是锥形传播的,所以我们实际测到的距离并不是 一个点,而是某个锥形角度范围内最近物体的距离。
另外,超声波的测量周期较长,比如3米左右的物体,声波传输这么远的距离需要约20ms的时间。再者,不同材料对声波的反射或者吸引是不相同的,还有多个超声传感器之间有可能会互相干扰,这都是实际应用的过程中需要考虑的。
红外
一般的红外测距都是采用三角测距的原理。红外发射器按照一定角度发射红外光束,遇到物体之后,光会反向回来,检测到反射光之后,通过结构上的几何三角关系,就可以计算出物体距离D。
当D的距离足够近的时候,上图中L值会相当大,如果超过CCD的探测范围,这时,虽然物体很近,但是传感器反而看不到了。当物体距离D很大时,L值就会很小,测量量精度会变差。因此,常见的红外传感器 测量距离都比较近,小于超声波,同时远距离测量也有最小距离的限制。另外,对于透明的或者近似黑体的物体,红外传感器是无法检测距离的。但相对于超声来说,红外传感器具有更高的带宽。
激光
常见的激光雷达是基于飞行时间的(ToF,time of flight),通过测量激光的飞行时间来进行测距d=ct/2,类似于前面提到的超声测距公式,其中d是距离,c是光速,t是从发射到接收的时间间隔。激光雷达包括发射器和接收器 ,发射器用激光照射目标,接收器接收反向回的光波。机械式的激光雷达包括一个带有镜子的机械机构,镜子的旋转使得光束可以覆盖 一个平面,这样我们就可以测量到一个平面上的距离信息。
对飞行时间的测量也有不同的方法,比如使用脉冲激光,然后类似前面讲的超声方案,直接测量占用的时间,但因为光速远高于声速,需要非常高精度的时间测量元件,所以非常昂贵;另一种发射调频后的连续激光波,通过测量接收到的反射波之间的差频来测量时间。
图一
图二
比较简单的方案是测量反射光的相移,传感器以已知的频率发射一定幅度的调制光,并测量发射和反向信号之间的相移,如上图一。调制信号的波长为lamda=c/f,其中c是光速,f是调制频率,测量到发射和反射光束之间的相移差theta之后,距离可由lamda*theta/4pi计算得到,如上图二。
激光雷达的测量距离可以达到几十米甚至上百米,角度分辨率高,通常可以达到零点几度,测距的精度也高。但测量距离的置信度会反比于接收信号幅度的平方,因此,黑体或者远距离的物体距离测量不会像光亮的、近距离的物体那么好的估计。并且,对于透明材料,比如玻璃,激光雷达就无能为力了。还有,由于结构的复杂、器件成本高,激光雷达的成本也很高。
一些低端的激光雷达会采用三角测距的方案进行测距。但这时它们的量程会受到限制,一般几米以内,并且精度相对低一些,但用于室内低速环境的SLAM或者在室外环境只用于避障的话,效果还是不错的。
视觉
常用的计算机视觉方案也有很多种, 比如双目视觉,基于TOF的深度相机,基于结构光的深度相机等。深度相机可以同时获得RGB图和深度图,不管是基于TOF还是结构光,在室外强光环境下效果都并不太理想,因为它们都是需要主动发光的。
像基于结构光的深度相机,发射出的光会生成相对随机但又固定的斑点图样,这些光斑打在物体上后,因为与摄像头距离不同,被摄像头捕捉到的位置也不相同,之后先计算拍到的图的斑点与标定的标准图案在不同位置的偏移,利用摄像头位置、传感器大小等参数就可以计算出物体与摄像头的距离。而我们目前的E巡机器人主要是工作在室外环境,主动光源会受到太阳光等条件的很大影响,所以双目视觉这种被动视觉方案更适合,因此我们采用的视觉方案是基于双目视觉的。
双目视觉的测距本质上也是三角测距法,由于两个摄像头的位置不同,就像我们人的两只眼睛一样,看到的物体不一样。两个摄像头看到的同一个点P,在成像的时候会有不同的像素位置,此时通过三角测距就可以测出这个点的距离。与结构光方法不同的是,结构光计算的点是主动发出的、已知确定的,而双目算法计算的点一般是利用算法抓取到的图像特征,如SIFT或SURF特征等,这样通过特征计算出来的是稀疏图。
要做良好的避障,稀疏图还是不太够的,我们需要获得的是稠密的点云图,整个场景的深度信息。稠密匹配的算法大致可以分为两类,局部算法和全局算法。局部算法使用像素局部的信息来计算其深度,而全局算法采用图像中的所有信息进行计算。一般来说,局部算法的速度更快,但全局算法的精度更高。
这两类各有很多种不同方式的具体算法实现。能过它们的输出我们可以估算出整个场景中的深度信息,这个深度信息可以帮助我们寻找地图场景中的可行走区域以及障碍物。整个的输出类似于激光雷达输出的3D点云图,但是相比来讲得到信息会更丰富,视觉同激光相比优点是价格低很多,缺点也比较明显,测量精度要差 一些,对计算能力的要求也高很多。当然,这个精度差是相对的,在实用的过程中是完全足够的,并且我们目前的算法在我们的平台NVIDIA TK1和TX1上是可以做到实时运行。
KITTI采集的图
实际输出的深度图,不同的颜色代表不同的距离
在实际应用的过程中,我们从摄像头读取到的是连续的视频帧流,我们还可以通过这些帧来估计场景中 目标物体的运动,给它们建立运动模型,估计和预测它们的运动方向、运动速度,这对我们实际行走、避障规划是很有用的。
以上几种是最常见的几种传感器 ,各有其优点和缺点,在真正实际应用的过程中,一般是综合配置使用多种不同的传感器 ,以最大化保证在各种不同的应用和环境条件下,机器人都能正确感知到障碍物信息。我们公司的E巡机器人的避障方案就是以双目视觉为主,再辅助以多种其他传感器,保证机器人周边360度空间立体范围内的障碍物都能被有效侦测到,保证机器人行走的安全性。
避障常用算法原理
在讲避障算法之前,我们假定机器人已经有了一个导航规划算法对自己的运动进行规划,并按照规划的路径行走。避障算法的任务就是在机器人执行正常行走任务的时候,由于传感器的输入感知到了障碍物的存在,实时地更新目标轨迹,绕过障碍物。
Bug算法知乎用户无方表示
Bug算法应该是最简单的一种避障算法了,它的基本思想是在发现障碍后,围着检测到的障碍物轮廓行走,从而绕开它。Bug算法目前有很多变种, 比如Bug1算法,机器人首先完全地围绕物体,然后从距目标最短距离的点离开。Bug1算法的效率很低,但可以保证机器人达到目标。
Bug1算法示例
改进后的Bug2算法中,机器人开始时会跟踪物体的轮廓,但不会完全围绕物体一圈,当机器人可以直接移动至目标时,就可以直接从障碍分离,这样可以达到比较短的机器人行走总路径。
Bug2算法示例
除此之外,Bug算法还有很多其他的变种, 比如正切Bug算法等等。在许多简单的场景中,Bug算法是实现起来比较容易和方便的,但是它们并没有考虑到机器人的动力学等限制,因此在更复杂的实际环境中就不是那么可靠好用了。
势场法(PFM)
实际上,势场法不仅仅可以用来避障,还可以用来进行路径的规划。势场法把机器人处理在势场下的 一个点,随着势场而移动,目标表现为低谷值,即对机器人的吸引力,而障碍物扮演的势场中的一个高峰,即斥力,所有这些力迭加于机器人身上,平滑地引导机器人走向目标,同时避免碰撞已知的障碍物。当机器人移动过程中检测新的障碍物,则需要更新势场并重新规划。
上面这个图是势场比较典型的示例图,最上的图a左上角是出发点,右下角是目标点,中间三个方块是障碍物。中间的图b就是等势位图,图中的每条连续的线就代表了一个等势位的一条线,然后虚线表示的在整个势场里面所规划出来的一条路径,我们的机器人是沿着势场所指向的那个方向一直行走,可以看见它会绕过这个比较高的障碍物。
最下面的图,即我们整个目标的吸引力还有我们所有障碍物产生的斥力最终形成的一个势场效果图,可以看到机器人从左上角的出发点出发,一路沿着势场下降的方向达到最终的目标点,而每个障碍物势场表现出在很高的平台,所以,它规划出来的路径是不会从这个障碍物上面走的。
一种扩展的方法在基本的势场上附加了了另外两个势场:转运势场和任务势场。它们额外考虑了由于机器人本身运动方向、运动速度等状态和障碍物之间的相互影响。
转动势场考虑了障碍与机器人的相对方位,当机器人朝着障碍物行走时,增加斥力, 而当平行于物体行走时,因为很明显并不会撞到障碍物,则减小斥力。任务势场则排除了那些根据当前机器人速度不会对近期势能造成影响的障碍,因此允许规划出 一条更为平滑的轨迹。
另外还有谐波势场法等其他改进方法。势场法在理论上有诸多局限性, 比如局部最小点问题,或者震荡性的问题,但实际应用过程中效果还是不错的,实现起来也比较容易。
向量场直方图(VFH)
它执行过程中针对移动机器人当前周边环境创建了一个基于极坐标表示的局部地图,这个局部使用栅格图的表示方法,会被最近的一些传感器数据所更新。VFH算法产生的极坐标直方图如图所示:
图中x轴是以机器人为中心感知到的障碍物的角度,y轴表示在该方向存在障碍物的概率大小p。实际应用的过程中会根据这个直方图首先辨识出允许机器人通过的足够大的所有空隙,然后对所有这些空隙计算其代价函数,最终选择具有最低代价函数的通路通过。
代价函数受三个因素影响:目标方向、机器人当前方向、之前选择的方向,最终生成的代价是这三个因素的加权值,通过调节不同的权重可以调整机器人的选择偏好。VFH算法也有其他的扩展和改进,比如在VFH+算法中,就考虑了机器人运动学的限制。由于实际底层运动结构的不同,机器的实际运动能力是受限的,比如汽车结构,就不能随心所欲地原地转向等。VFH+算法会考虑障碍物对机器人实际运动能力下轨迹的阻挡效应,屏蔽掉那些虽然没有被障碍物占据但由于其阻挡实际无法达到的运动轨迹。我们的E巡机器人采用的是两轮差动驱动的运动形式,运动非常灵活,实际应用较少受到这些因素的影响。
具体可以看 一下这个图示:
类似这样传统的避障方法还有很多,除此之外,还有许多其他的智能避障技术,比如神经网络、模糊逻辑等。
神经网络方法对机器人从初始位置到目标位置的整个行走路径进行训练建模,应用的时候,神经网络的输 入为之前机器人的位姿和速度以及传感器的输 入,输出期望的下一目标或运动方向。
模糊逻辑方法核心是模糊控制器,需要将专家的知识或 *** 作人员的经验写成多条模糊逻辑语句,以此控制机器人的避障过程。比如这样的模糊逻辑:第一条,若右前方较远处检测到障碍物,则稍向左转;第 二条,若右前方较近处检测到障碍物,则减速并向左转更多角度等等。
在本文中,我们提出了一种新的机器人导航建图方法。通过使用单目局部移动相机 ,高质量的稠密深度图被实时估计及融合到3D重建中。 光强图像的四叉树结构用于通过以多种分辨率估计深度图来减少计算负担。 提出了基于四叉树的像素选择和动态置信传播以加速建图过程:根据四叉树中的水平,利用计算资源选择和优化像素。 求解的深度估计被进一步插值并在时间上融合到全分辨率深度图中,并使用截断的带符号距离函数(TSDF)融合到密集的3D图中。我们使用公共数据集将我们的方法与其他最先进的方法进行比较。 板载无人机自主飞行还用于进一步证明我们的方法在便携式设备上的可用性和效率。 为了大众的利益,该算法开源发布在“ https://github.com/ HKUST-Aerial-Robotics /open_quadtree_mapping”。
摄像机广泛用于机器人系统,因为它们提供有关环境的信息数据,同时保持低功耗并产生小的占地面积。具体来说,我们对单目视觉惯性系统[1] [2]感兴趣,因为它们可以使用单个摄像机和惯性测量单元(IMU)的最小传感器组为机器人提供导航所需的信息。然而,为定位而构建的稀疏或半密集地图不足以完成诸如避障等任务。为了感知周围环境,通常使用RGB-D相机,激光雷达或立体相机等附加传感器。然而,这些传感器的重量,尺寸和功耗使得它们不适用于有效载荷和功率有限的机器人。在本文中,我们提出了一种单目稠密建图方法,可以使用单个局部移动摄像机实时估计高质量深度图并实时建立稠密3D模型,如图1所示。
生成高质量稠密深度图是单目稠密建图系统的关键步骤。 为了应用于机器人,深度图估计必须在时间上有效并且密集地覆盖包括低纹理区域的图像。 我们的方法受到单目深度估计的两个观察的启发:
(1)考虑到块匹配成本和深度图平滑度,通常需要通过最小化一个能量函数来估计低纹理区域的深度并平滑深度图的全局优化[5],[6]。然而,昂贵的计算使它们无法在实时应用中广泛使用。
(2)在强度图像的相同四叉树块内的像素共享相似的光强和深度值。四叉树结构被广泛使用(例如,在图像编码[7]中),像素根据其局部纹理以树结构组织:具有相似强度值的像素可以通过将它们分配到相同的四叉树块并且在相应的决议。如图2所示,在大多数情况下,强度图像中的像素的四叉树水平等于或者比深度图像中的更高。这意味着在强度图像中共享相同四叉树块的像素也属于深度图像中的相同块,因此共享相似的深度值,但反之亦然。换句话说,像素的深度可以以与强度图像中的四叉树水平相对应的分辨率来表示。
受这两个观察的启发,我们提出了一种新颖的单目稠密建图方法,该方法使用单个局部移动摄像机估计稠密深度图并构建3D重建。 通过全局优化改善了深度密度和精度,并且通过估计与强度图像的四叉树结构相对应的多个分辨率中的深度图来减少计算负担。 具体而言,根据它们的四叉树水平选择像素,其密度与它们需要估计的分辨率成比例。 动态置信传播(Dynamic belief propagation)用于以粗到细的方式估计所选像素的深度,其中以相应的分辨率提取深度以获得效率。 所有深度估计都被内插到完整的密集深度图中,并在时间上与前深度图融合。 最后,深度图融合成高质量的全局3D地图。
我们使用公共数据集将我们的工作与其他最先进的单目稠密建图方法进行比较。 不同环境下的机载自主飞行也用于证明我们的方法在无人机应用中的可用性。 我们的方法的贡献如下:
①一种新颖的像素选择方法,根据图像的四叉树结构中的水平选择像素来估计深度。 所选像素分布在整个图像上,并引起对高纹理区域的更多关注。
②动态信任传播,以粗略到精细的方式估计所选像素的深度。 像素根据其四叉树水平利用计算资源进行优化。 优化产生高质量深度估计,同时通过跳过粗分辨率像素来保持效率。
③一种单目稠密建图系统,仅使用局部移动摄像机即可实时生成高质量的密集深度图。 如实验和补充视频所示,深度图可以直接融合到3D地图中,用于3D重建和无人机自主飞行。 该系统也作为社区的开源发布。
已经提出了许多方法来解决单目稠密建图问题。
在计算机视觉中,使用图像重建环境的问题也称为运动结构(SfM)。 给定一系列图像,SfM重建环境结构并估计相机运动。 虽然取得了令人瞩目的成果,但结果通常很少,需要离线处理。 另一方面,我们的方法使用图像和相应的相机运动来实时地密集地重建环境。
DTAM [8],VI-MEAN [9]和REMODE [10]是使用全局或半全局信息解决稠密建图问题的方法。 DTAM [8]通过累积多个帧来构建成本量,并使用总变差优化来提取深度图。 VI-MEAN [9]使用半全局匹配[11](SGM)来规范成本量。 然而,4路径优化导致VI-MEAN估计深度图中的“条纹”伪像[9]。 REMODE [10]使用总变差来平滑通过概率更新估计的深度图像。 由于优化不像DTAM [8]那样在成本量中搜索深度,因此REMODE [10]无法很好地处理低纹理区域。
MonoFusion [12],MobileFusion [13]和3D建模[14]从双视图立体匹配构建稠密地图。 将每个输入图像与选定的测量帧进行比较。 尽管双视图匹配很快,但这些方法在单目情况下包含许多异常值。 后处理技术,例如左右一致性检查,大量成本消除,随时间的一致性,用于处理问题。
多级映射(Multi-level mapping)[15]是与我们的工作最相似的方法。 在多级映射[15]中,四叉树结构用于增加补丁的局部纹理,以便可以使用本地信息估计更多像素。 然后执行总变差优化以从多分辨率平滑深度图。 该方法是有效的并且增加了深度图的密度。 多级映射[15]和我们的方法之间最重要的区别是估计深度图的密度。 使用全局优化,我们的方法可以恢复纹理低,甚至没有纹理的区域的深度。 另一方面,多级映射[15]使用局部强度信息估计像素的深度。 因此,仅可以估计具有足够梯度的像素的深度。 估计的深度图的密度对于机器人应用的安全性和3D重建的完整性是重要的。
受到图像的四叉树结构与相应深度图之间的关系的启发,我们的方法解决了多分辨率的深度估计,并将它们融合成高质量的全分辨率深度图和稠密网格。
定义T w,k ∈SE(3)为世界坐标系w下拍摄第k张图像时相机的位置(pose)。
定义第k张光强图像为I k :Ω⊂R 2 →R
通过相机投影公式π(x c )=u,一个相机坐标系下的3D点x c =(x,y,z) T 可以投影成图像上的一个像素u:=(u,v) T ∈Ω
一个像素可以反投影回相机坐标系c到点x c =π -1 (u,d),其中d是像素的深度(depth)
在接下来的部分中,T w,k 由单目-惯性系统或数据集提供,我们假设相机姿势是准确的并且对于每个帧都是固定的,将来不会改变,这是典型的视觉测距系统的情况。 用闭环系统重建环境超出了本文的范围。
系统的输入为I i 及其对应的相机位置T w,i ,对于每张输入图像I k ,使用I k 作为参考图像和多个之前输入的图像来估计深度图(depth map)。
我们使用四叉树为每个像素找到最合适的分辨率表示。 对于每个输入图像I k ,我们计算3级四叉树结构,其中最精细的级别对应于4×4像素块,最粗糙的级别对应于16×16像素块。 如图2所示,四叉树的同一块中的像素共享相似的强度,因此可以一起估计深度值。 选择四叉树块中的第一个像素以构建匹配成本向量并使用动态置信传播来估计深度(construct the matching cost vector and estimate the depth using dynamic belief propagation)。 图4示出了基于图像的四叉树结构选择像素的示例。
对于在该步骤中未选择的像素,将通过第IV-E部分中的内插和融合来获得它们的深度估计。 根据强度图像的四叉树结构选择像素使我们能够以高效率求解深度图而不会牺牲很多精度。
计算四叉树选择像素的匹配成本向量以用于动态置信传播。 我们的方法选择五个先前的附近帧作为测量帧。 在这项工作中,我们采样均匀分布在逆深度空间上的N d 深度值。 采样深度d和相应的深度索引l具有以下关系:
P1和P2控制深度图的平滑度,如SGM中所示。 注意,虽然公式6与SGM [11]中的公式相同,但消息更新和传递是不同的。 SGM沿着几个预定义的1D路径迭代成本,而我们的方法在2D图像网格上传递消息。 2D全局优化使我们的方法能够在SGM中生成没有“条纹”伪像的平滑深度图。 在并行缩减 *** 作的帮助下,将消息从像素p更新到像素q可以加速到O(log(Nd))时间。 算法1显示了在O(log(Nd))时间内更新像素消息的方法。 使用算法1并行更新消息。
尽管四叉树选择像素的深度估计在图像上扩散,但它不是完全密集深度估计。 在本节中,我们首先将估计内插到完整的密集深度图中,然后以概率方式将它们与之前的结果在时间上融合。
1)深度插值:在插值期间,为了进一步利用包含高梯度纹理但不是四叉树采样的像素,我们使用类似于Eigen等人的方法估计这些像素的深度[16]。 高梯度估计在GPU上完全并行化,并且需要大约2ms来更新一帧。
来自动态置信传播和来自高梯度估计的深度估计被组合并在空间上内插到对应于输入帧Ik的全分辨率深度图Dk中。 通过动态置信传播和高梯度估计估计的深度覆盖整个图像并且更多地关注纹理丰富的区域。 插值估计得到完全密集的结果是解决光流的常用方法[17]。 在这里,我们通过最小化least-square cost来提取全密集深度图。
最小化成本E在计算上是昂贵的。 在这里,我们采用Min等人的方法。 [18]近似于两个一维插值问题中的问题。 通过高斯消元可以有效地解决一维中的深度插值。 我们首先在行方向上插入深度,然后在列方向上插入深度。
2)时间融合:全密集深度图以概率方式与先前的估计进一步融合,以拒绝异常值估计。 使用由Vogiatzis等人提出的异常值鲁棒模型对每个像素的估计进行建模[19]。
使用Klingensmith等人提出的方法将过滤的深度融合到全局图中。[20]。 由于动态可信度传播,插值和时间深度融合,我们的深度估计包含非常少的异常值,因此我们直接融合输出而无需任何额外的滤波器。
我们的方法与GPU加速完全并行化。 即使对于便携式设备,例如Nvidia Jetson TX1,效率也使得3D重建能够实时运行。 下面列出的参数值是根据经验找到的,我们发现它们在所有实验中都能很好地工作。 这可以解释为使用对不同图像内容稳健的全局优化来估计深度图。
输入图像强度在0和1之间缩放,以避免潜在的数字问题。 在IV-C部分中计算匹配成本矢量期间,计算Nd = 64深度值,dmin = 0.5m,dmax = 50.0m。 在第IV-D节中,P1和P2分别设置为0:003和0:01,以平衡估计的深度图的平滑度和不连续性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)