实时单目物体SLAM Real-time Monocular Object SLAM

2023-05-16

2015

摘要:

我们提出了一个基于对象的实时SLAM系统,该系统利用了迄今为止最大的对象数据库。我们的方法包括两个主要部分:1)利用对象刚性约束改进地图并找到其真实比例的单目SLAM算法,以及2)基于二进制词包的新型对象识别算法,该算法为500个3D对象的数据库提供实时检测。这两个部分共同工作并相互受益:SLAM算法从对象的观察中积累信息,将对象特征锚定到特定地图地标,并对优化设置约束。同时,将部分或完全位于地图内的对象用作先验来指导识别算法,实现更高的召回率。我们在五个真实环境中评估了我们的建议,显示了相对于其他最先进技术,地图精度和效率的提高。

关键词:物体撞击,物体识别

1.介绍

在环境中移动和操作的机器人需要实时获取关于它的实时信息。这些信息可以从视觉SLAM(同步定位和地图绘制)中获得,视觉SLAM是许多系统的关键组成部分,允许移动机器人在探索周围环境时创建地图,并跟踪自己的位置。计算出的地图提供了丰富的几何信息,可用于可靠的摄像机定位,但对于描述观察到的场景却很差。最近,这些地图增加了对象,允许机器人与场景交互[1、2、3]。

要在SLAM地图中包含对象,必须通过计算刚体3D变换在机器人获取的图像中识别这些对象。一条庞大的研究路线为这个问题提供了解决方案[4、5、6、7],但它已被排除在视觉大满贯之外。

我们在本文中的目标是将目标识别和单目目标SLAM结合在一起,并基于随时间累积信息的新解决方案,以计算更鲁棒的目标姿态,并保持它们始终位于场景中。为了实现这一点,我们提出了一种新的对象识别算法,该算法在基于关键帧的视觉SLAM算法构建地图时提供对象检测。一旦从不同的摄像机位置多次观察到一个对象,这些具有多次观察的对象特征将在地图中作为锚点进行三角化。

锚点提供对象在地图内的位置,并在束调整(BA)优化中设置附加几何约束。由于对象模型是真实比例的,因此锚点提供地图比例的观察。标准BA优化了相机姿态和地图点位置,众所周知,它只能恢复到比例的地图。相比之下,我们的算法优化了摄像机姿态、点以及锚点、对象和比例,因此我们得到了由对象组成的真实比例的地图。

我们的系统依赖于对象识别算法,该算法在单个图像的基础上工作,但利用了视频序列。它利用SLAM收集的信息将先前的观察视为当前图像中对象位置的线索。这允许获得更快和更可重复的检测,从而为SLAM提供更多的几何约束。

我们提出的基于二进制词包的新型对象识别算法[8],使用与对象数量无关的静态视觉词汇表,并使用ORB(面向快速和旋转简短)特征对对象的整体外观进行建模[9]。在类似RANSAC的步骤[10]中,通过引导匹配,从2D到3D对应中找到对象的姿态。我们的系统使用包含多达500个对象的数据库快速可靠地识别3D对象,同时保持SLAM系统的实时约束

我们的工作做出了以下贡献:

1.我们提出了一个完整的视觉SLAM系统,该系统能够在地图中插入真实对象,并通过使用单目相机进行重新观察来改进其三维姿态。

2.我们展示了在单个对象数据库中存储数百个综合3D模型的可行性,该数据库由具有直接和反向索引的二进制字包组成。我们还提出了一种在验证阶段对假设对应进行采样的新技术。

3.我们提出了一种新的SLAM后端,该后端将对象提供的几何信息包括到地图优化中,以提高地图、对象及其每个步骤的相对比例的准确性。

4.我们在真实和独立的数据集中给出结果,并与其他系统进行比较。我们的结果证明,通过包含对象,我们的单目系统可以检索场景的真实比例,并获得比PTAM[11]和RGB-D SLAM[12]更准确的结果,同时保持实时性能(跟踪需要7.6毫秒,识别大约每幅图像200毫秒)。我们的结果还表明,该系统对于偶尔的错误检测非常鲁棒,避免了地图损坏。

论文的主要内容如下:第2节介绍了目标SLAM和目标识别的相关工作。第3节概述了我们的完整系统。第4节详细介绍了视觉SLAM方法和对象插入,第5节详细介绍对象识别算法。第6节展示了我们系统的实验评估,第7节总结了本文。

2.相关的工作

对象增强映射之前已经通过基于扩展卡尔曼滤波器的SLAM方法进行了处理[2,13]。然而,目前最先进的单目SLAM方法是基于关键帧的,这些关键帧仅使用一些选定的视频帧创建贴图。正如Strasdat等人[14]所证明的,这些系统能够产生比基于滤波器的方法更好的结果,因为它们处理大量点,并以帧速率实时生成更大的精确稀疏点图。

Castle等人[3]的工作是第一批将对象识别与基于单目关键帧的SLAM相结合的工作之一。在两帧中检测到一个对象后,他们计算其在地图中的姿态。这些对象显示为增强现实,但与我们的方法不同,它们不会将对象添加到优化中。他们建立了一个由SIFT特征描述的37幅平面图片的数据库。与此系统相反,仅限于平面对象,我们可以处理具有任意3D形状的对象。

Bao等人[15,16]首先提出了Montion的语义结构(SSfM),这是一个联合优化摄像机、点和对象的框架。SLAM方法处理信息来自视频流的事实,因此点和关键帧的图形是增量的,而SSfM一次处理所有帧。此外,在[15]中,识别和重建步骤是分离和独立的。然而,在我们的算法中,识别和重建同时发生,因为SLAM和目标检测是完全集成的。[15]中的识别方法检索对象的边界框,而我们的对象检测器检索6自由度姿态。

同样,Fioraio等人[17]提出了一种SLAM系统,该系统在识别出具有足够可信度的3D对象时,将其添加到地图中,并通过束调整与地图一起优化其姿态。他们建立了一个由7个对象组成的数据库,这些对象由使用RGB-D相机在多个尺度上采集的3D特征描述,为每个尺度创建独立索引。识别是通过找到由基于RANSAC的算法过滤的3D到3D假定对应来执行的。尽管他们能够用几个对象构建房间大小的地图,但他们的系统不能实时运行。相比之下,我们的系统通过使用二进制2D特性和可以同时处理所有关键点尺度的单一索引结构,提高了可伸缩性和执行时间。

Salas Moreno等人[1]提出了一种结合RGB-D地图构建和对象识别的最新视觉SLAM系统。它们用一个图来表示地图,其中节点存储摄像机或对象的位置,并在优化整个图时增强所有这些对象的姿态。使用KinectFusion[18]预先建立对象数据库,用点对特征描述其几何结构[19]。这些由哈希表索引,并通过计算大量候选刚体变换来执行识别,这些候选刚体变换在霍夫空间中发出投票。Hough投票是一种使用RGB-D数据进行对象检测的流行技术[20、21、22],但其可扩展性不清楚。事实上,Salas Moreno等人[1]通过利用GPU计算实现了实时执行,但他们只显示了4个对象的结果。在我们的工作中,我们展示了在单目相机的CPU上计算的多达500个对象的高频结果。

关于对象识别,我们的建议遵循的研究路线是在图像和对象模型之间寻找局部特征的匹配。Sivic和Zisserman[23]提出了一个视觉词汇表,用于匹配大型集合中的2D图像。他们提出用k均值聚类图像特征的描述符空间,以量化特征,并用数字向量表示图像,表示为文字包,从而实现快速比较。另一方面,Lowe[24]推广了一种基于查询和模型2D图像之间直接匹配SIFT特征的方法。匹配特征需要计算大型特征集之间的描述符距离,这可能非常耗时。为了加快这一过程,他提出了最佳箱优先技术,用k-d树寻找近似邻居。视觉词汇和k-d树后来被推广用于实时匹配大型图像集。Nister&Stewenius[25]提出了一种基于MSER(最大稳定极值区域)[26]和SIFT特征的分层视觉词汇树,利用该特征可以对40000张图像数据集进行快速检测。Muja&Lowe[27]提出了一种自动配置一组k-d树的方法,以最佳拟合要匹配的特征数据。

为了从单个图像中完全恢复对象的姿态,需要将3D信息合并到模型中。Gordon&Lowe[28]开始创建3D点云模型,通过应用运动技术恢复对象结构。然后,可以通过从2D到3D对应中解决透视-n问题[10]来检索姿势。这是最近许多物体识别方法的基础[5,29,7,6,30]。例如,Collet等人[5]为79个对象构建3D模型,并使用对象的训练图像构建一组k-d树,以索引其SIFT特征进行直接匹配。

,图1:系统概述:每个视频帧都由SLAM跟踪线程处理,以定位摄像机,并确定是否向地图添加了新的关键帧。对象识别应用于尽可能多的帧,利用先前看到的对象的位置信息。如果识别成功,则存储对对象的观察,直到有足够的几何信息。此时,对象实例被三角化并插入到地图中,与锚定到对象点的新地图点以及观察它们的帧子集一起,生成语义关键帧。此操作允许查找地图比例并将对象几何约束包括到地图优化中。

 树的不同离散化级别允许以几种方式计算特征对应。例如,Xiao等人[30]以分层方式离散化SIFT描述符空间,以创建3级树。它们显示了在所有级别上计算特征匹配的好处,而不仅仅是最精细的匹配,从而获得更多的假定对应,从而提高了对象识别率。然而,过多的对应可能会使姿态恢复阶段负担过重,导致执行时间过长。相反,Sattler等人[29]的方法仅从位于同一视觉单词中的特征中检索对应关系,但由于离散化错误,这可能会丢失不共享视觉单词的正确点对。在我们的工作中,我们使用直接索引[8]在粗离散化级别计算位于同一树节点的特征之间的对应关系。这在对应点的数量和执行时间之间提供了平衡的权衡。所有这些工作都使用SIFT或SURF特征,这些特征用64或128个浮点值的向量描述,并使用与对象建模相同的图像训练匹配树,这迫使它们在将新对象添加到数据库时重新创建树。Rublee等人[9]提出了二进制和紧凑的ORB特征(256位长度描述符),并提供了与SIFT和SURF[31]相似的区别。此外,从独立数据创建的不需要重建的二进制词的视觉词汇表适合索引大量图像集合[8]。在这项工作中,我们展示了单一独立的ORB特征词汇表的可行性,以实时(约200 ms\/图像)识别具有大型数据库(最多500个对象)的3D对象

3.系统概述

我们的系统构建了一个由摄像机姿态、点和对象组成的3D地图,如图1所示。我们利用并行跟踪和映射(PTAM)算法[11]的前端来跟踪摄像机运动,并添加了两个新的并行过程,以在地图中执行对象识别和对象插入。我们的系统还包括一个基于g2o[32]的完全重新设计的后端,该后端对关键帧姿态、贴图点、对象和贴图比例执行关节SLAM优化。

SLAM跟踪处理所有视频帧,以在未知地图比例的每个时间步长计算摄像机的姿态。当帧提供独特的几何信息时,它将与新的贴图点一起作为关键帧插入到贴图中。

同时,在尽可能多的帧上执行对象识别,以搜索存储在对象模型数据库中的已知对象。如果存在由SLAM地图和先前识别给出的对象位置的可用信息,则利用该信息来指导当前图像中的检测。成功的检测提供了对对象实例的观察。无论使用何种识别算法,从单个图像获得的检测可能是虚假的或不准确的。为了避免这些问题,我们不是在第一次识别后将对象放置在地图中,而是在累积了随时间变化的一致观察后将其插入SLAM地图中。所有观测给出的信息用于三角测量目标点,从而确定SLAM地图内目标的姿态。生成的点作为锚点插入三维地图中,观察它们的相机作为语义关键帧。选择这些关键帧不是因为几何标准,而是因为它们包含相关的语义信息。不提供视差或区别几何信息的观察帧被丢弃。每个三角测量都为我们提供了地图比例的估计,我们使用它来全局优化它。

4.对象感知的SLAM

4.1.地图中的对象

插入我们的算法产生的单个图像中的对象识别用于将这些对象插入SLAM地图中。为了稳妥地放置它们,而不是依赖于单个检测,我们累积了几个,直到我们有足够的几何信息来计算稳妥的3D姿态。该过程如图2所示,并在下面进行说明。

第5节中描述的对象检测器在尽可能多的帧中搜索对象,而SLAM使用它们跟踪摄像机,因此姿势TWCi=?RWCi |s tWCi?每个摄像机i的位置是已知的,具有初始未知的地图比例尺s。对象模型O的成功识别返回从相机到对象帧的变换TCiO。由于同一对象模型的多个物理实例可能存在,我们检查此检测属于哪个实例。我们通过计算全局姿态T的假设来实现∗WO=世界中检测到的对象的TWCi TCiO,并检查与先前观察到的或已经在地图中的同一模型的其他对象的重叠。请注意,仅当我们已经对地图比例s进行了估计时,此操作才有效。否则,我们假设同一模型的连续检测来自同一真实对象。之后,我们确定对象O的检测是模型O的第k个实例Ok的观察。如果与之前观察到的任何对象没有重叠,我们只创建一个新实例。

观察BiOk=hTWCi、TCiOk、XO、Uii产生模型O、XO的一些3D点与相机Ci、Ui拍摄的图像的2D点之间的一组对应关系。对于每个通信hxO,uii∈ hXO,Uii,如果相对于同一对象实例的xO的其余观察的视差不够显著,则丢弃对应的对语义关键帧(红色摄影机)、对象及其点插入到地图中,更新其比例。对象观察不提供视差或新点,完全忽略。

累积对象实例的观察,直到以下条件成立:1)从两个不同位置观察到至少5个不同的对象点xO,2)摄像机之间的视差至少为3度,以及3)未显示对齐和良好的几何条件。在世界帧(xW)中对点进行三角剖分,并将对hxO、xWi作为锚定点插入地图中。提供视差的帧也作为语义关键帧插入。

锚点在对象SLAM中起决定性作用,因为它们提供了对象在地图中的位置,并在BA中设置了额外的几何约束,从而实现地图比例估计。因此,锚点与地图点的处理方式不同:它们不会被PTAM的维护算法丢弃,仅使用新的对象观察更新,并通过在目标关键帧中投影锚点周围定义的3×3像素区域中使用匹配互相关在地图的关键帧之间传播。从语义关键帧中提取用于相关性的面片并进行扭曲,以便通过单应性补偿缩放、旋转和缩短。

4.2.目标SLAM优化

在基于标准关键帧的SLAM中,通过关节束调整(BA)估计点XW的稀疏映射和选定关键帧TWCi的相机位置。图4(a)显示了表示估计问题结构的贝叶斯网络

5.具有大型数据库的3D对象识别

对象识别需要从一组独立的图像和离线创建的模型数据库中构建视觉词汇表。然后,在线实时执行识别过程,对在位置TWCi处拍摄的查询图像执行两个主要步骤:检测适合图像特征的多个模型候选,以及通过计算相机和对象之间的刚体变换来验证候选。通过基于单词包查询数据库中的所有模型或利用对象的先前已知位置来获得候选。验证步骤利用图像和对象模型点之间的2D到3D对应来找到图像TCiO中的对象姿态。结果是观察BiO=hTWCi、TCiO、XO、Uii所识别的对象模型中。然后,SLAM算法将这些结果与其对应的对象实例Ok相关联,同时考虑当前摄像机的姿态(第4.1节)。

5.1.对象模型我们的对象模型由一组与ORB描述符相关联的3D点和完整对象的外观文字包表示组成。ORB特征具有计算效率,因为它们用256位的字符串描述图像块。

从从对象的不同视角拍摄的一组训练图像离线创建每个对象模型O。我们使用Bundler和PMVS2软件[35,36]对这些图像进行束调整,并获得物体PO的密集3D点云,如图5所示。我们仅保留至少3幅图像中一致出现的点。由于在识别过程中,对象可以以任何比例和视角出现,因此我们将每个3D点与从不同比例级别(高达2个八度)和多个训练图像中提取的多个ORB描述符相关联。

如果训练图像的视点几乎没有不同,我们可以获得具有非常相似的描述符的3D点,这些描述符增加了很少的区别。为了避免过度表达,我们将特征转换为视觉文字,并保持每个3D点和视觉文字的平均描述符[29]。最后,通过将其所有视图的残存二元特征转换为具有视觉词汇表的单词包向量,获得基于外观的对象表示。该模型提供了所有对象表面的信息,因此单个比较产生了与查询图像中对象的视点和比例无关的相似性度量。

5.2.对象模型数据库

对象模型在由可视化词汇表、反向索引和直接索引组成的数据库中进行索引[8]。视觉词汇表由具有二元节点的树组成,该树由训练ORB描述符的分层聚类创建。树的叶子构成了视觉词汇的词汇。我们使用了从加州理工学院256[37]的30607张独立图像中获得的12M个描述符,构建了一个具有k=32个分支和L=3个深度级别的词汇表6,产生了33K个单词。当给定ORB特征时,其描述符向量从根到叶遍历树,在每个级别选择最小化汉明距离的节点,并获得最终叶作为字。通过串联一组ORB特征的等价词,我们获得了一个词包向量,其条目用术语频率-逆文档频率(tf idf)值加权,并用L1范数归一化。对于在训练图像中出现较少的词,该权重较高,因为期望它们更具辨别力。反向索引为词汇表中的每个单词存储其所在的对象,以及其在该对象中的权重。当给定查询图像时,该结构提供了对查询词包向量和模型向量之间的公共词的快速访问。直接索引为每个对象模型存储它包含的树节点和相关的ORB特征。这用于区分在验证阶段需要2D到3D对应时可能匹配的特征。如果我们使用直接索引在其他树级别(更粗的离散化级别)存储节点,我们可以增加对应的数量,对执行时间几乎没有影响[8]。在这项工作中,我们将节点存储在词汇树的第一个离散化级别。

5.3.获得对象候选的先验知识

获得检测候选的第一种方法来自于先前观察到或插入地图中的那些对象。检测地图中已经存在的对象非常有用,因为我们可以找到尚未定位到地标的新点。插入它们有助于优化对象的姿势。该过程在算法1中描述。

7.结论

我们提出了一种对象感知单目SLAM系统,该系统包括一种新的高效3D对象识别算法,用于多达500个3D对象模型的数据库。一方面,我们展示了在SLAM流水线中嵌入单帧单词包识别方法如何提高具有数十个不同对象、重复实例、遮挡和杂波的数据集的识别性能。我们相信,这种优势不仅可以通过这种技术实现,还可以通过嵌入在SLAM管道中的任何其他识别方法实现,该方法可以利用物体的累积观测。

另一方面,对象的包含为SLAM地图添加了一组锚点,这些锚点在后端优化中提供了几何约束,并启用了真实地图比例估计。我们已经证明,与使用RGB-D数据的其他最先进算法相比,我们的系统可以生成更精确的地图。

有一种情况我们在这项工作中没有提到:当地图中插入的第一个对象是由错误的观察结果引起的。这将导致第一次不正确的比例尺估计,并导致地图丢失。这可以通过检查每个物体三角测量所给出的尺度估计的方差来解决,以便消除具有不一致尺度的任何观测。或者,如果初始粗略规模估计可用,也可以避免该问题;例如从机器人和移动设备通常配备的里程表或IMU传感器。然而,由于我们方法的安全步骤,这种情况很少发生,在我们的实验中也没有发生。

在地图中包含对象为使用语义数据增强它们铺平了道路,为用户提供丰富的信息,或为操作机器人提供关于环境的额外知识[49]。我们可以在未来的工作中使用这些知识来推理对象的移动性,从而使对象帧在3D空间中移动成为可能,从而创建动态地图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实时单目物体SLAM Real-time Monocular Object SLAM 的相关文章

  • linux软中断和系统调用深入研究

    arm软中断模式 arm7种模式 有中断模式 xff0c 但是并没有软中断模式 那么arm的软中断是什么呢 xff1f arm的软中断是arm从用户模式切换到特权模式 xff0c 也就是linux中从用户态切换到内核态的过程 swi命令触发
  • 进程proc文件介绍

    进程proc文件 proc pid 下是每个进程的proc信息 xff0c proc self比较特殊 xff0c 哪个进程打开 xff0c 对应链接到哪个进程 1 xff09 内存相关 status xff1a 进程使用虚拟内存和物理内存
  • Win10系统下安装CAA二次开发程序,VS界面上不出现CAA菜单栏或菜单栏为灰色的

    问题描述 xff1a Win10系统下安装了CATIA CAA V5R19和V4R24两个版本 xff0c 其中V5R19版本安装完成后VS2005中没有出现CAA菜单栏 xff0c V5R24安装完成后VS2008中出现部分集成菜单且为灰
  • 基于Stm32的4G模块实现内网透传通信(代码后附)

    基于Stm32的4G模块实现内网透传通信 一 内网透传即内网映射 xff0c 内网IP端口映射外网连接访问过程的实现 内网透传通信实现过程又有以下几种区别 xff1a 1 xff09 路由器映射 适合自己本地路由有公网IP网络环境 xff0
  • RoboCup智能机器人足球教程(二)

    RoboCup智能机器人足球教程 xff08 二 xff09 运行方式 RoboCup2D仿真平台通过一个服务端 xff0c 若干客户端联系而成 xff0c 同时通过监视器进行画面播放 当启动服务端后 xff0c 客户端通过改写程序内部的c
  • RoboCup智能机器人足球教程(三)

    RoboCup智能机器人足球教程 xff08 三 xff09 实现守门员代码 守门员逻辑实现比较容易 xff0c 但是最好开始的时候画好流程图 xff0c 理顺逻辑 xff0c 守门员一直盯着球 xff0c 当球距离守门员够近的时候 xff
  • 嵌入式工作一年总结

    其实这是去年2017年11月份写的 xff0c 现在想把这个发出来 xff0c 为后来的同学或者迷茫的一些同学的一些建议吧 xff01 刚入行回忆 刚开始进入公司的能力很差 xff0c 可以说什么都不会吧 xff0c wifi拼成wife
  • CVPR 2019 | 旷视研究院提出新型损失函数:改善边界框模糊问题

    全球计算机视觉三大顶会之一 CVPR 2019 xff08 IEEE Conference on Computer Visionand Pattern Recognition xff09 将于 6 月 16 20 在美国洛杉矶如期而至 届时
  • ros中使用opencv处理图像

    cv bridge toCvCopy xff1a ROS下的sensor msgs ImageConstPtr xff0c 和图像压缩类型 xff08 例如 xff1a sensor msgs image encodings RGB8 xf
  • PX4飞行日志分析与.ulg文件格式转换

    文章目录 一 FlightPlot安装及使用二 ulg文件格式转换 xff08 windows环境 xff09 一 FlightPlot安装及使用 span class token number 1 span xff09 下载FlightP
  • 【深入理解Java虚拟机 笔记】Java的类加载过程

    类加载的过程如下图所示 xff1a 一 加载阶段 注意 xff1a 这里的 加载 阶段是整个 类加载 过程的一个阶段 xff0c 两个词的含义是不一样的 这个阶段主要做3件事 xff1a 1 通过类的全限定名获取二进制字节流 xff1b 2
  • 【深入理解Java虚拟机 笔记】垃圾回收算法

    前言 当前垃圾回收集器大多都是遵循分代收集理论进行设计的 xff0c 先聊聊什么是分代收集 xff1a xff08 1 xff09 弱分代假说 xff1a 绝大多数对象都是朝生夕灭的 xff1b xff08 2 xff09 强分代假说 xf
  • 【日记 2021-05-01】 leetcode练习&& Linux修改文件权限

    题目 xff1a 1335 工作计划的最低难度 题目内容 xff1a 你需要制定一份 d 天的工作计划表 工作之间存在依赖 xff0c 要想执行第 i 项工作 xff0c 你必须完成全部 j 项工作 xff08 0 lt 61 j lt i
  • 【Leetcode 刷题笔记】16. 3Sum Closest

    题目 方案一 xff1a 穷举法 o n 3 span class token keyword class span span class token class name Solution span span class token pu
  • 【Debugging】SpringSecurity iframe 页面不显示

    问题描述 如下图所示 xff0c 配置了SpringSecurity后 xff0c 网页就加载不出来了 xff0c 多次检查代码都没有问题 xff0c 折腾了好久 xff01 xff01 xff01 解决方案 在SpringSecurity
  • 【日记 2021-05-14】树莓派获取环境亮度(光照度)

    什么是亮度 xff1f 光照度指被照射物体单位面积上所接受可见光的光通量 xff0c 单位是勒克斯 Lux 或流明每平方米 lm m2 xff0c 是用来描述光的亮度的 我们平时最关心的我家灯到底够不够亮 xff0c 具体数值可以用照度计测
  • 【Java】语法糖

    什么是语法糖 xff1f 语法糖就是指 java 编译器把 java 源码编译为 class 字节码的过程中 xff0c 自动生成和转换的一些代码 有哪些语法糖 xff1f 默认构造函数 xff1a 当一个类没有显式的提供构造函数时 xff
  • 【Java多线程】FutureTask的使用示例

    炎热的夏天 xff0c 一位少侠到客栈吃杯茶 xff0c 客栈准备茶水有如下两种方式 xff1a 单线程 先擦桌子 xff0c 花费3秒 xff1b 再准备茶水 xff0c 花费3秒 xff1b 共花费6秒 xff01 多线程 擦桌子和准备
  • 旷视研究院博士图鉴|Be that challenger

    图为旷视研究院日常工作一景 旷视研究院有这样一批挑战者 他们是 PhD xff0c 更是 Researcher 他们 深入探索科技发展的前沿阵地 笃信自己的科研价值 渴望见证一行行代码的快速落地 期待与同样优秀的人碰撞思维 做自己所爱的事
  • 【Java多线程】CompletableFuture的使用示例

    刘备 关羽和张飞三兄弟在家吧喝酒 xff0c 突然发现忘带钱了 xff0c 于是差下人回去取钱 为了不影响三兄弟喝酒的气氛 xff0c 刘备吩咐下人钱取来后交给旁边侍候的赵云即可 span class token keyword publi

随机推荐

  • 【Java基础】Arrays.sort()使用示例

    狗有名字 体重和年龄3个属性 xff1a span class token keyword public span span class token keyword class span span class token class nam
  • 【Spring】aop的使用示例

    场景 去饭店吃饭的时候 xff0c 在进入饭店时门卫会为你开门 xff0c 并问候说 欢迎光临 xff0c 当你吃完离开时 xff0c 门卫会说 请慢走 xff0c 欢迎下次光临 此场景下涉及如下两个角色 xff1a 顾客 xff08 cu
  • 关于从Github上下载历史版本

    第一步 打开一个仓库 xff0c 可以看到此时在主分支下 xff0c 点击1位置查看历史版本 第二步 现在可以查看到所有的版本 xff08 提交 xff09 信息 xff0c 单击2位置进入该版本 第三步 单击3位置浏览并打开该版本 第四步
  • 数据结构——结构体

    结构体是一种复合数据类型 xff0c 定义了一组变量列表 xff0c 这些变量将放在一个内存块中的名称下 它允许通过使用指向结构的一个指针来访问不同的变量 struct structure name data type member1 da
  • python 归并排序

    归并排序 xff08 Merge Sort xff09 是一种典型的递归法排序 它把复杂的 排序过程分解成一个简单的合并子序列的过程 至于怎么得到这个子 序列 xff0c 就得自己调用自己了 归并排序首先要做的就是将数列分成左右两部分 xf
  • ROS学习笔记—— rospy

    所有资料均来自于 https www icourse163 org learn ISCAS 1002580008 learn announce 和 https github com DroidAITech ROS Academy for B
  • XCOM(串口监视器,无单片机)+ESP8266显示心知天气天气信息

    XCOM xff08 串口监视器 xff0c 无单片机 xff09 43 ESP8266显示心知天气天气信息 ESP8266 AT指令显示 这是第一次写博客 xff0c 写的内容尽量通俗易懂贴近生活 PS 写的不好务必不要打我 ESP826
  • Linux编程——交叉编译器基本指令介绍

    Linux编程 交叉编译器基本指令介绍 arm span class token operator span linux span class token operator span gnueabihf span class token o
  • 马尔可夫链蒙特卡洛采样(MCMC)

    首先我们要明确的是马尔可夫链蒙特卡洛采样以下简称MCMC xff0c 它首先是个采样方法 1 采样的目的 采样作为任务 xff0c 用于生成新的样本求和 求积分 比如我们知道样本z的后验分布 我们经常会有一个需求 xff0c 得到目标函数f
  • dlang语法的简单整理

    dlang整理 为什么使用dlang 优点 xff1a 快速 xff0c 开发高效的 xff0c 方便 xff0c 无虚拟机的 xff0c 快速的 xff0c 高性能的 垃圾回收 缺点 xff1a 语法较为复杂 xff0c 支持gc 曾经很
  • docker 搭建基于prometheus的监控体系

    Prometheus是一个时间序列数据库 但是 xff0c 它不仅仅是一个时间序列数据库 它涵盖了可以绑定的整个生态系统工具集及其功能 Prometheus主要用于对基础设施的监控 包括服务器 xff0c 数据库 xff0c VPS xff
  • React回退上个页面及跳转下个页面

    回退上个页面 React 不保存数据 span class token keyword this span span class token punctuation span props span class token punctuati
  • Linux上jar包运行,但是接口测试Connect超时

    工作过程中遇到的 xff0c 这个异常就是连接超时 引起连接超时的问题有很多 xff0c 因为是feign调用超时 xff0c 我第一时间没怀疑是不是我的程序无法访问 xff0c 我一直怀疑是feigin那部分出错了 xff0c 什么跨服务
  • 网络调试助手(pc端)+ESP8266指令

    一 所需软件 链接 xff1a https pan baidu com s 1ycyOSZJOsiIocY3umrG7 g 提取码 xff1a 38f2 链接 xff1a https pan baidu com s 1EUuXUKcvf A
  • AD、PADS、allegro 哪个好用?

    AD PADS allegro 哪个好用 xff1f 用哪个都没问题 xff0c 都能完成任务 xff0c 主要看公司的选择了 AD是元老级的软件了 xff0c 也是PCB设计最先出的软件 xff0c 使用最为广范 在很多操作上都非常的人性
  • 基于python+pyqt5的串口助手

    基于python 43 pyqt5的串口助手 环境 xff1a pycharm python3 8 xff0c pyqt5 xff0c pyserial xff08 需要该节的工程文件 请私信 xff0c 或加VX xff1a Crazzy
  • STM32F4四轴飞行器总结

    xff08 菜鸡一枚 xff0c 记录一些学习的体会 xff0c 并记录了学习时提出的问题 xff0c 便于自己再次查阅 xff0c 若有错误之处 xff0c 希望大佬们指正 xff0c 谢谢 xff09 四旋翼简介 xff1a 嵌入式芯片
  • 详解RTK,RTD,SBAS,WAAS,PPP,PPK,广域差分等技术之间的关系与区别

    RTK与RTD的区别 xff0c 一个是载波相位差分 一个是码差分 xff0c 并且RTK的定位精度要高一些 RTK与PPK的区别 xff0c 一个是实时提供数据信息 xff0c 一个是事后处理 WAAS是SBAS系统一个具体的实例 xff
  • c实现set集合

    集合有点编程语言会带有 xff0c 有的没有 但是我想redis的集合set你一定听说过或者用过 下面咱们用链表来实现set 相信有了前面的基础我们可以很容易的实现set集合 需要引入我的链表的list c和list h 头文件 span
  • 实时单目物体SLAM Real-time Monocular Object SLAM

    2015 摘要 xff1a 我们提出了一个基于对象的实时SLAM系统 xff0c 该系统利用了迄今为止最大的对象数据库 我们的方法包括两个主要部分 xff1a 1 xff09 利用对象刚性约束改进地图并找到其真实比例的单目SLAM算法 xf