VINS论文推倒及代码解析
VINS 的功能模块可包括五个部分:数据预处理、初始化、后端非线性优化、闭环检测及闭环优化。代码中主要开启了四个线程,分别是:前端图像跟踪、后端非线性优化(其中初始化和 IMU 预积分在这个线程中)、闭环检测、闭环优化。、总体框架Measurement PreprocessingInitializationCamera(30hz)Feature Detectionnd rackerVisual-lnertialInitializedis- onlySfMAlignmentIMU (100hMU Pre-integrationLocal Visual-Inertial: OldestSliting WindowNewestNonli+、 Keyframe?OptimizationBundle Adjustment II Loop detectionwith RelocalizationStates from Loop ClosureFealure retrievel oop Deleted二二1---11------22===Global Pose Graph4-DoF Pose Graph OptimizationKeyframe DatabaseOptimization图1VINS框架ⅵINS的玏能模块可包括五个部分:数据预处理、初始化、后端非线性优化、闭环检测及闭环优化。代码中主要开启了四个线稈,分别是:前端图像跟踪、后端非线性伉化(其中初始化和IMU预积分在这个线程中)、闭环检测、闭环优化各个功能模块的作用上要有:1.I图像和MU预处理●图像:提取图像 Harris角点,利用金字塔光流跟踪相邻帧,通过 RANSAC去除异常点,最后将跟踪到的特征点push到图像队列中,并通知后端进行处理●IU:将IMU数据进行积分,得到当前时刻的位置、速度和旋转(PVQ),同时计算在后端优化中将用到的相邻帧的预积分增量,及预积分误差的 Jacobian矩阵和协方差项。1.2初始化首先,利用SFM进行纯视觉佔计滑窗內所有帧的位姿及3D点逆深度,最后与IMU预积分进行对齐求解初始化参数1.3后端滑窗优化将视觉约束、IMU约束和闭环约束放在·个大的目标函数中进行非线性优化,求解滑窗内所有帧的PVQ、bias等。L M States in the sliding windowIMU:k States from loop clos1Camera:冷 MU measurements>visual measurements★ Catur图2滑窗优化示意图14闭环检测和优化利用D)BoW进行闭环检测,当检测成功后进行重定位,最后对整个相机轨迹进行闭环优化。U预积分VisionIMUVision图3MU预积分示意图21当前时刻pVQ的连续形式将第k唢和第kl帧之间的所有IMU进行积分,可得第kHI帧的位置、速度和旋转(PVQ),作为视觉估计的初始值,这里的旋转采用的四元数。v△t+k+1∈[k,k+1]rW(at-ba ) -owletbk JtE[k, k+1]n(,-bdt∈[k,k+1]其中,a2和O为ⅠMU测量的加速度和角速度,是在Body自身坐标系, world坐标系是IMU所在的惯导系,上式的旋转公式推导可参考附录10.1。22当前时刻PVQ的中值法离散形式公式(1)给出的是连续吋刻的相机当前PVR的达代公式,为了跟代码致,下面给出基于中值法的公式,这与 Estimator:; processIMg(O函数中的Ps]、Rs]和Vs是一致的,IMU积分出来的第j时刻的物理量可以作为第j帧图像的初始值。tr t+a26t(2)ka,St其中q(a1-ba)-g"+q:+1(a+1-ba)(a;+o;+1)2.3两帧之间PVQ增量的连续形式通过观察公式(1)可知,IvU的预积分需要依赖与第k帧的ν和R,当我们在后端进行非线性优化时,需要迭代更新第κ唢的ν和R,这将导致我们需要根据每次迭代后值重新进行积分,这将非常耗吋。因此,我们考虑将优化变量从第k帧到第κ+1帧的IU预积分项中分离开来,通过对公式(1)左右两侧各乘Rb,可化简为:R(+p2k-=2△)+ak+1b其中DtElk, k+1t∈[k,k+1R k(at-bar)ldt)Wendtt∈[kk+1这样我们就得到了连续时刻的MU预积分公式,可以发现,上式得到的MU预积分的值只与不同时刻的a2和o相关。这里我们需要重新讨论下公式(5)预积分公式,以ab,为例,我们发现它是与MU的bias相关的,而bias也是我们需要优化的变量,这将导致的问题是,当每次迭代时,我们得到一个新的bias,又得根据公式(巧5)重新对第k帧和第k+1帧之间的IMU预积分,非常耗时。这里假设预积分的变化量与bias是线性关系,可以写成:ab,+/6n6ba+/16b+8 8ba +p(6)k+1sb24两帧之间PVQ增量的欧拉法离散形式面给出离散时刻的IMU预积分公式,首先按照论文中采用的欧拉法,给出第i个MU时刻与第i1个IMU时刻的变量关系为b+1k+的6t+元R(P)(1+R(P")(a2-bbn)δt25两帧之间PⅤQ增量的中值法离散形式卜面给出代码中采用的基」中值法的IMU预积分公式,这与 Estimator: processIMUO函数中的 Integration Base: push backo上是一致的。注意这里跟公式(2)是不一样的,这里积分出来的是前后两顿之间的IU增量信息,而公式(2)给出的当前帧时刻的物理量信息+1+B k St +=a, &tbb+1Bi + au1其中a,=slqilai-bai)+qiDi t aitl2.6连续形式下PVQ增量的误差、协方差及 JacobianIMU在每个吋刻积分出来的值是有误差的,下面我们对误差进行分析。首先我们直接给出在t时刻误差项的导数为:sa00016a000000-82(066hkR;0006|=00-(a-bh)0-1192k|+|000|mLL000016ba00101n000018b000F+ozk+ Gt其中:F25×15,G215×2,62x1,n12×,上式推导可参考附录102。下面我们讨论它的作用,将其可以简写为:6之k=F62z+Gtnt根据导数定义可知:62b=1m24-6262+8=62+628t=(+F6t)6z+(Gt6t)nt(11)这里我们对公式(1)的IMU误差运动方程再说明,将上式和EKF对比可知,上式恰好给出了如EKF一般对非线性系统线性化的过程,这里的意义是表示下一个时刻的IMU测量误差与上一个时刻的成线性关系,这样我们根据当前时刻的值,可以预测出下一个时刻的均值和协方差,而公式(1)给出的是均值预测,协方差预测公式如下Pb+6=(1+Ft)P(+Fl6t)7+(G,t)Q(G18t)ot(12)上式给出了协方差的选代公式,初始值Pk=0。其中,Q为表示噪声项的对角协方差矩阵000003000另外根据(11)式可获得诀差项的 Jacobian的迭代公式:(I+F26t)(14)其中 Jacobian的初始值为bk=12.7离散形式的PVQ增量误差分析我们首先直接给出PVQ增量误差在离散形式下的矩阵形式,为了与代码一致,我们修改下变量顺序,这和代码中 midPointIntegration(函数是一致的。(但不知为何计算的V中与前四个噪声项相关的差个负号?)1t fo660f106t‖loeBk+1=0f211f20016bδb0[6b102001rnot000kRkotk+1(15006t0n0000δt其中,推导可参考附录10.3:stE(ak-ba)02-4B+1(kk+121k+1b.)6t|6t2(Rr+ rk+18t2Stn=71=Rk+1(a+1-b)6tWr+ wf1=Ik+11+Gb。)δt-Rn+1(ak+121=-2配+1Stl st21(RK+Ruts)4rula1RrotstStR+1(a1R,+114/+11t28离散形式的PVQ增量误差的 Jacobian和协方差将公式(15)简写为:k+1F15×158215×1+V15×13Q则 Jacobian的迭代公式为k+15×15=F/k(16)其中, Jacobian的初始值为/k=l。这里计算出来的k+1只是为了给后面提供对bias的acoblar。协方差的迭代公式为P+15×15=FPFr+vQv(17)其中,初始值P=0。Q为表示噪声项的对角协方差矩阵:00000000aa000Q18×180a00(18)000000三、后端非线性优化31状态向量状态向量共包括滑动窗口内的n+l1个所有相机的状态(包括位置、朝向、速度、加速度计bias和陀螺仪bias)、 Camera到IMU的外参、m+1个3D点的逆深度X=[xr=pw,vb bpc,q3.2目标函数吗+(喻,2)+2(19)其中三个残差项即误差项分别为边缘化的先验信息、IMU测量残差、视觉的重投影残差。三种残差都是用马氏距离表示。根据《十四讲》中高斯牛顿法,若要计算目标函数的最小值,可以理解为,当优化变量有一个增量后,目标函数值最小,以IU残差为例,可写成如下所示:nin lre2bk, X+8Xrk x)+HSⅩDk+1oXk+1k+1其中HB,为B关于 XIK Jacobian,将上式展开并令关于6X的导数为0,可得增量δx的计算公式:H k 8X=k+1TB那么,公式(28)可写成+∑+∑Tk∑1rc上式中,B为MU预积分噪声项的协方差,P为vual观测的噪声协方差。当MU的噪声协方差P越大时,其信息矩阵Pk,将越小,意味着该MU观测越不可信,换句话说,因MU噪声较大,越不可信IMU预积分数据,而更加相信 visual观测。注意,这里的IMU和vsua协方差的绝对值没有意义,因为考虑得是两者的相对性可将上式继续简化为:(Ap+AB +Acox=bp +bB +bc其中,Ap,AB和Ac为 Hessian矩阵,上述方程称之为增量方程。33MU约束1)残差:两帧之间的PVQ和bias的变化量的差△tx+k+1bk qbk+1bR+1 xyz+g"△t)-Bk(20)sbbbb其中各增量关于bias的 Jacobian可从公式(16)的大 Jacobian中的相应位置获得。上面与代码中 Integration base: evaluateD对应,2)优化变量pb, 0W, Svb ,8ba:,bor Opb,, 80W ,Swb,, bakr, Sba3)Jacobian:计算 Jacobian时,残差对应求偏导对象分别为p6e,6vB,6h,ba],6b,6b
- 2020-12-07下载
- 积分:1
高能物理分析软件ROOT的入门使用方法
root是cern开发的数据分析软件,根据cern官网的A ROOT Guide For Beginners英文版翻译的中文文档,适合初学者了解root软件的使用723存储任意类型的 N-tuples…724处理跨文件的 n-tuple7.2.5对进阶用户:使用送择器即本处理树…547.2.6对干进阶价用户:使用 PROOF lite进行多核处理72.7关于 N-tuples的优化8 ROOT in python:::::::::::t·::::··:598. 1 PYROOT598.1. 1 More Python-less C++8.2自定义代码:从C+到 Python9结束语…64References64摘要ROOT是一个用于数据分析和I/O的软件框架:一个强大的工只,可以应对最先进的科学数据分析的典型任务。它的突出特点包括高级图形用户界面,非常适合交互式分析,C++编程语言的解释器,快速高效的原型设计和C艹+对象的持久性杋制,还用于写入大型强了对撞机实验记录的每年PB级数据(1PB=1024TB译者注)。本入门指南说明了ROOT的主要特征,这些特征与数据分析的典型问题相关:输入和绘制测量数据和分析功能的拟合。原创作者-D. Piparo-G. Quast-M,cisc译者注:本文均是 Google翻译结果,仅对代码和板式作调整,欢迎修改分享软件背景与简介欢迎来到数据分析ROOT!测量与理论模型的比较是实验物理学中的标准仟务之一。在最简单的情况下,“模型”只是提供测量数据预测的函数。通常,模垩取决于参数。这种模型可以简单地表示“电流I与电压U成比例”,并且实验者的任务包括从一组测量中确定电阻R作为第一步,需要数据的可视化。接下来,通常必须应用一些操作,例如,校正或参数转换。通常,这些操作是复杂的,并且应该提供强大的数学函数和程序库-例如,考虑应用于输入光谱的积分或峰值搜索或傅立叶变换以获得模型描述的实际测量偵。实验物理学的一个特点是影响每个测量的不可避免的不确定性,可视化工具必须包括这些。在随后的分析中,必须正确处理错误的统计性质作为最后一步,将测量值与模型进行比较,并且需要在此过程中确定自由模型参数。有关适合数据点的函数(模型)的示例,请参见图1.1。有儿种标准方法可供使用,数据分析工具应能方便地访问其中一种以上。还必须提供量化测量和模型之间一致性水平的方法。通常,要分析的数据量很大-考虑借助计算机累积的细粒度测量。因此,可用工具必须包含易于使用且有效的方法来存储和处理数据在量子力学中,模型通常仅根据许多参数预测测量的概率密度函数(“pdf),并且实验分析的目的是从观察到的频率分布中提取参数,其中观察测量。这种测量需要生成和可视化频率分布的装置,所谓的直方图和严格的统计处理,以从纯粹的统计分布中提取模型参数。预期数据的模拟是数据分析的另一个重要方面。通过重复生成“伪数据”,其以与用于真实数据的预期相同的方式进行分析,可以验证或比较分析过程。在许多情况卜,测量误差的分布并不是精确已知的,并且模拟提供了测试不同假设的景响的可能性。满足上述所有要求的强大软件框架是ROOT,这是个由日内瓦欧洲核了研究中心欧洲核研究组织协调的开源项目ROOT非常灵活,既可以在自己的应用程序中使用编程接口,也可以提供用于交互式数据分析的图腦用户界面。木文档的目的是作为初学者指南,并根据学生实验室中解决的典型问题为您自己的用例提供可扩展的示例。本指南有望为您未来科学工作中更复杂的应用奠定基础,建立在现代,最先进的数据分析上具之上本指南以教程的形式向您介绍ROOT包。根据“边做边学”的原则,这个目标将通过具体的例子来完成。也正因为这个原因,本指南无法涵盖ROOT包的所有复杂性。然而,一日您对以卜章节中介绍的概念有信心,您将能够欣赏ROOT用户指南( The Root Users guide2015)并浏览类参考(根参考指南2013)以査找所有详细信息您可能会感兴。您甚至可以查看代码本身,因为ROOT是一个免费的开源广品。与本教程并行使用这些文档!ROOT数据分析框架本身是编写的,并且在很大程度上依赖于C++编程语言:需要些关于C++的知识。如果您不了解这种语言的含义,Js可以利用有关C++的大量文献。ROOT可用于许多平台( Linux, Mac osx, Windows….),但在本指南中我们将隐含地假设您使用的是 Linux。你需要做的第一件事就是安装ROOT,不是吗?获取最新的ROOT版本非常简单。只需在此网页htp:/ root, cern.ch/ downloading-root上寻找“专业版”。您将找到针对不同体系结构的预编译版木,或者您自凵编译的ROOT源代码。只需拿起您需要的味道并按照安装说明操作即可。让我们深入了解ROOT!ROOT基础既然你凵经安装了ROOT,那么你止在运行的这个交互式 shell是什么?就像这样:ROOT带来了双重功能。它有一个宏的解释器(Cing( What is Cling”2015)),您可以从命令行运行或像应用程序一样运行。但它也是一个可以评估任意语句和表达式的交互式 shell这对于调试,快速黑客攻击和测试非常有用。我们先来看一些非常简单的例子2.1ROOT作为计算器您甚至可以使用ROOT交互式she代替计算器!使用该命令启动ROOT交互式shelroot在你的Liux机器上。提示应该很快出现:root「8让我们来看看这里显示的步骤root [0] 1+1(int)2root[1]2*(4+2)/12(doub1e)1.0000root [2] sqrt(3.( double)1.732051root[3]1>2(bool) falseroot [4] TMath: Pi()( double)3.141593root [5] TMath: Erf( 2)( double).222703不错。您可以看到,ROOT不仅可以输入C++语句,还可以输入存在于 MAth命名空间中的高级数学函数。现在让我们做一些更详尽的事情。一个众所周知的几何系列的数字小例root [6 double X=5(double)0.500000root [7] int N=30(int)30root [8] double geom series=0(doub1e)8.099root [9] for (int i=0; i
- 2020-06-28下载
- 积分:1