视觉SLAM⑩后端Ⅱ(滑动窗口滤波和优化与位姿图)

2023-05-16

目录

10.0 本章概述

10.1 滑动窗口滤波和优化

10.1.1 实际环境下的BA结构

10.1.2 滑动窗口法 

10.2 位姿图 

10.2.1 位姿图的意义

10.2.2位姿图的优化

10.3 非线性优化整体总结:前端、后端


10.0 本章概述

1.理解滑动窗口优化

2.理解位姿图优化
3.理解带IMU紧耦合的优化

        第9讲我们重点介绍了以BA为主的图优化。BA能精确地优化每个相机位姿与特征点位置。不过在更大的场景中,大量特征点的存在会严重降低计算效率,导致计算量越来越大,以至于无法实时化。本讲介绍一种简化的BA:位姿图。 

10.1 滑动窗口滤波和优化

10.1.1 实际环境下的BA结构

        带有相机位姿和空间点的图优化称为BA,它能够有效地求解大规模的定位与建图问题。这在SfM问题中十分有用,但是在SLAM过程中,我们往往需要控制BA的规模,保持计算的实时性。倘若计算能力无限,那不妨每时每刻都计算整个BA——但是那不符合现实需要。现实条件是,我们必须限制后端的计算时间,比如BA规模不能超过1万个路标点,迭代不超过20次、用时不超过0.5秒,等等。像SfM那样用一周时间重建一个城市地图的算法,在SLAM里不见得有效。

        控制计算规模的做法有很多,比如从连续的视频中抽出一部分作为关键帧,仅构造关键帧与路标点之间的BA,于是非关键帧只用于定位,对建图则没有贡献。
        即便如此,随着时间的流逝,关键帧数量会越来越多,地图规模也将不断增长。像BA这样的批量优化方法,计算效率会不断下降。为了避免这种情况,我们需要用一定手段控制后端BA的规模。这些手段可以是理论上的,也可以是工程上的。

        例如,最简单的控制BA规模的思路,是仅保留离当前时刻最近的N个关键帧,去掉时间上更早的关键帧。于是,我们的BA将被固定在一个时间窗口内,离开这个窗口的则被丢弃。这种方法称为滑动窗口法

        取这N个关键帧的具体方法可以有一些改变,例如,不见得必须取时间上最近的,而可以按照某种原则,取时间上靠近,空间上又可以展开的关键帧,从而保证相机即使在停止不动时,BA的结构也不至于缩成一团(这容易导致一些糟糕的退化情况)。如果我们在帧与帧的结构上再考虑得深一些,也可以像ORB-SLAM2那样,定义一种称为“共视图”(Covisibility graph)的结构。所谓共视图,就是指那些“与现在的相机存在共同观测的关键帧构成的图。        

        于是,在BA优化时,我们按照某此原则在共视图内取一些关键帧和路标进行优化,例如,仅优化与当前帧有20个以上共视路标的关键帧,其余部分固定不变。当共视图关系能够正确构造的时候,基于共视图的优化也会在更长时间内保持最优。

        滑动窗口也好,共视图也好,大体而言,都是我们对实时计算的某种工程上的折中。不过在理论上,它们也引入了一个新问题:刚才我们谈到要“丢弃”滑动窗口之外,或者“固定”共视图之外的变量,这个“丢弃”和“固定”具体怎样操作呢?“固定”似乎很容易理解,我们只需将共视图之外的关键帧估计值保持不变即可。但是“丢弃”,是指完全弃置不用,即窗口外的变量完全不对窗口内的变量产生任何影响,还是说窗口外的数据应该对窗口内的有一些影响,但实际上被我们忽略了?如果有影响,这种影响应该是什么样子?它够不够明显,能不能忽略?

10.1.2 滑动窗口法 

        现在考虑一个滑动窗口,假设这个窗口内有N个关键帧,它们的位姿表达为:

x_{1},x_{2},...,x_{N}

        关于这几个关键帧,能带给我们什么?
        位置在哪里,以及它们的不确定度如何,这对应着它们在高斯分布假设下的均值协方差。如果这几个关键帧还对应着一个局部地图,则我们可以顺带着问整个局部系统的均值和方差应该是多少。设这个滑动窗口中还有M个路标点y_{1},y_{2},...,y_{M},它们与N个关键帧组成了局部地图。显然我们可以用第9讲介绍的BA方法处理这个滑动窗口,包括建立图优化模型,构建整体的Hessian矩阵,然后边缘化所有路标点来加速求解。在边缘化时,我们考虑关键帧的位姿,即:

[x_{1},x_{2},...,x_{N}]^T\sim N([\mu _{1},\mu _{2},...,\mu _{N}]^T,\Sigma )

         其中u_{k}为第k个关键帧的位姿均值,\Sigma为所有关键帧的协方差矩阵,那么显然,均值部分就是指BA迭代之后的结果,而\Sigma就是对整个BA的H矩阵进行边缘化之后的结果,即第9讲提到的矩阵S

        在滑动窗口中,当窗口结构发生改变,这些状态变量应该如何变化?这件事情可以分成两部分讨论:
1.我们需要在窗口中新增一个关键帧,以及它观测到的路标点。
2.我们需要把窗口中一个旧的关键帧删除,也可能删除它观测到的路标点。
        这时,滑动窗口法和传统的BA的区别就显现出来了。显然,如果按照传统的BA来处理,那么这仅仅对应于两个不同结构的BA,在求解上没有任何差别。但在滑动窗口的情况下,我们就要讨论具体的细节问题了。

新增一个关键帧和路标点:
        考虑在上个时刻,滑动窗口已经建立了N个关键帧,我们也已知道它们服从某个高斯分布,其均值和方差如前所述。此时,新来了一个关键帧x_{N+1},那么整个问题中的变量变为N+1个关键帧和更多路标点的集合。

        这实际上并没有什么区别,我们只需按照正常的BA流程处理即可。对所有点进行边缘化时,即得到这N+1个关键帧的高斯分布参数。
删除一个旧的关键帧:
        当考虑删除旧关键帧时,一个理论问题将显现出来。例如我们要删除旧关键帧x_{1},但是x_{1}并不是孤立的,它会和其他帧观测到同样的路标。将x_{1}边缘化之后将导致整个问题不再稀疏。我们举一个示意图,如图10-2所示。

图10-2 滑动窗口删除关键帧将破坏路标部分的对角块结构

         在这个例子中,我们假设x_{1}看到了路标点y_1y_4。于是,在处理之前,BA问题的Hessian矩阵应该像图10-2中的左图一样,在x_{1}行的y_1y_4列存在着非零块,表示x_{1}看到了它们。

        这时考虑边缘化x_{1},那么Schur消元过程相当于通过矩阵行和列操作消去非对角线处几个非零矩阵块,显然这将导致右下角的路标点矩阵块不再是非对角矩阵。这个过程称为边缘化中的填入(Fill-in)。
        回顾第9讲中介绍的边缘化,当我们边缘化路标点时,Fill-in将出现在左上角的位姿块中。不过,因为BA不要求位姿块为对角块,所以稀疏BA求解仍然可行。但是当边缘化关键帧时,将破坏右下角路标点之间的对角块结构,这时BA就无法按照先前的稀疏方式迭代求解。这显然是个十分糟糕的问题。实际上,在早期的EKF滤波器后端中,人们确实保持着一个稠密的Hessian矩阵,这也使得 EKF后端没法处理较大规模的滑动窗口。
        不过,如果我们对边缘化的过程进行一些改造,也可以保持滑动窗口BA的稀疏性。例如,在边缘化某个旧的关键帧时,同时边缘化它观测到的路标点。这样,路标点的信息就会转换成剩下那些关键帧之间的共视信息,从而保持右下角部分的对角块结构。在某些SLAM框架中,边缘化策略会更复杂。例如在OKVIS 中,我们会判断要边缘化的那个关键帧,它看到的路标点是否在最新的关键帧中仍能看到。如果不能,就直接边缘化这个路标点,如果能,就丢弃被边缘化关键帧对这个路标点的观测,从而保持BA的稀疏性。

SWF中边缘化的直观解释
        我们知道边缘化在概率上的意义就是指条件概率。所以,当我们边缘化某个关键帧,即“保持这个关键帧当前的估计值,求其他状态变量以这个关键帧为条件的条件概率”。所以,当某个关键帧被边缘化,它观测到的路标点就会产生一个“这些路标应该在哪里”的先验信息,从而影响其余部分的估计值。如果再边缘化这些路标点,那么它们的观测者将得到一个“观测它们的关键帧应该在哪里”的先验信息。从数学上看,当我们边缘化某个关键帧,整个窗口中的状态变量的描述方式,将从联合分布变成一个条件概率分布。以上面的例子来看,就是说:

p(x_{1},...,x_{4},y_{1},...,y_{6})=p(x_{2},...,x_{4},y_{1},...,y_{6}|x_{1})p(x_{1})

         然后舍去被边缘化部分的信息。在变量被边缘化之后,我们在工程中就不应再使用它。所以滑动窗口法比较适合VO系统,而不适合大规模建图的系统。

10.2 位姿图 

10.2.1 位姿图的意义

        根据前面的讨论,我们发现特征点在优化问题中占据了绝大部分。实际上,经过若干次观测之后,收敛的特征点位置变化很小,发散的外点则已被剔除。对收敛点再进行优化,似乎是有些费力不讨好的。因此,我们更倾向于在优化几次之后就把特征点固定住,只把它们看作位姿估计的约束,而不再实际地优化它们的位置估计。
        沿着这个思路继续思考,我们会想到:是否能够完全不管路标而只管轨迹呢?我们完全可以构建一个只有轨迹的图优化,而位姿节点之间的边,可以由两个关键帧之间通过特征匹配之后得到的运动估计来给定初始值。不同的是,一旦初始估计完成,我们就不再优化那些路标点的位置,而只关心所有的相机位姿之间的联系。通过这种方式,我们省去了大量的特征点优化的计算,只保留了关键帧的轨迹,从而构建了所谓的位姿图(Pose Graph),如图10-3所示。

图10-3 位姿图示意图。当我们不再优化BA中的路标点,仅把它们看成对姿态节点的约束时.就得到了一个计算规模减小很多的位姿图

         我们知道,在BA 中特征点数量远大于位姿节点。一个关键帧往往关联了数百个关键点,而实时BA的最大计算规模,即使利用稀疏性,在当前的主流CPU上一般也就是几万个点左右。这就限制了SLAM应用场景。所以,当机器人在更大范围的时间和空间中运动时,必须考虑一些解决方式:要么像滑动窗口法那样,丢弃一些历史数据;要么像位姿图的做法那样,舍弃对路标点的优化,只保留Pose之间的边。此外,如果我们有额外测量Pose的传感器,那么位姿图也是一种常见的融合Pose测量的方法。

10.2.2位姿图的优化

        那么,位姿图优化中的节点和边都是什么意思呢?这里的节点表示相机位姿,以T_{1},T_{2},...,T_{n}来表达。而边,则是两个位姿节点之间相对运动的估计,该估计可以来自于特征点法或直接法,也可以来自GPS或IMU积分。无论通过哪种手段,假设我们估计了T_{i}T_{j}之间的一个运动\Delta t_{ij}。该运动可以有若干种表达方式,我们取比较自然的一种:

\Delta \xi_{ij} = \xi_{i}^{-1}\bigcirc \xi_{j} = ln(T_{i}^{-1}T_{j})^{\vee }

        或者李群的写法:T_{ij}=T_{i}^{-1}T_{j}

        按照图优化的思路,实际中该等式不会精确地成立,因此我们设立最小二乘误差,然后和以往一样,讨论误差关于优化变量的导数。这里,我们把上式的T_{ij}移至等式右侧,构建误差e_{ij}

e_{ij} = \Delta \xi_{ij}ln(T_{ij}^{-1}T_{i}^{-1}T_{j})^{\vee }

         注意优化变量有两个:\xi_{i}\xi_{j},因此我们求误差e_{ij}关于这两个变量的导数。按照李代数的求导方式,给和各一个左扰动\delta \xi_{i}\delta \xi_{j}。于是误差变为:

\hat{e_{ij}} = ln(T_{ij}^{-1}T_{i}^{-1}exp((-\delta \xi_{i})^{\wedge })exp(\delta \hat{\xi_{j}})T_{j})^{\vee }

         该式中,两个扰动项被夹在了中间。为了利用BCH近似,我们希望把扰动项移至式子左侧或右侧。回忆第4讲习题中的伴随性质,即式。如果你没有做过这个习题,那就暂时把它当作是正确的结论来使用:

exp((Ad(T)\xi)^{\wedge }) = T exp(\xi^\wedge )T^{-1}

        稍加改变,有: exp(\xi^\wedge )T=Texp((Ad(T^{-1})\xi)^\wedge )

        该式表明,通过引入一个伴随项,我们能够“交换”扰动项左右侧的T。利用\varepsilon它,可以将扰动挪到最右(当然最左亦可),导出右乘形式的雅可比矩阵(挪到左边时形成左乘):

         因此,按照李代数上的求导法则,我们求出了误差关于两个位姿的雅可比矩阵。关于T_{i}的:

\frac{\vartheta e_{ij}}{\vartheta \delta \xi_{i}} = -\jmath _{r}^{-1}(e_{ij})Ad(T_{j}^{-1})

关于T_{j}的:

\frac{\vartheta e_{ij}}{\vartheta \delta \xi_{j}} = \jmath _{r}^{-1}(e_{ij})Ad(T_{j}^{-1})

         如果读者觉得这部分求导理解起来有困难,可以回到第4讲温习李代数部分的内容。不过,前面也说过,由于se(3)上的左右雅可比\jmath _{r}形式过于复杂,我们通常取它们的近似。如果误差接近零,我们就可以设它们近似为I或:

\jmath _{r}^{-1}(e_{ij})\approx I+\frac{1}{2}\begin{bmatrix} \phi _{e}^\wedge &\rho _{e}^\wedge \\ 0 & \phi _{e}^\wedge \end{bmatrix}

         理论上,即使在优化之后,由于每条边给定的观测数据并不一致,误差也不见得近似于零,所以简单地把这里的\jmath _{r}设置为I会有一定的损失。

        了解雅可比求导后,剩下的部分就和普通的图优化一样了。简而言之,所有的位姿顶点和位姿———位姿边构成了一个图优化,本质上是一个最小二乘问题,优化变量为各个顶点的位姿,边来自于位姿观测约束。记\varepsilon为所有边的集合,那么总体目标函数为:

min\frac{1}{2}\sum_{i,j \epsilon \varepsilon }^{}e_{ij}^{T}\Sigma _{ij}^{-1}e_{ij}

10.3 非线性优化整体总结:前端、后端

 

 

 

 

 

 

 

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

视觉SLAM⑩后端Ⅱ(滑动窗口滤波和优化与位姿图) 的相关文章

  • SLAM方法汇总

    原文 http blog csdn net smartxxyx article details 53068855 目录 SLAM概述 SLAM一般处理流程包括track和map两部分 所谓的track是用来估计相机的位姿 也叫front e
  • 《视觉SLAM十四讲》学习笔记-第四讲部分习题的证明思路

    1 验证SO 3 SE 3 和Sim 3 关于乘法成群 证明 先看SO 3 定义为 SO 3 R R3 3 RR I det R 1 S O 3 R
  • vscode_c++_slambook 编译配置

    工作目录 配置文件 launch json version 0 2 0 configurations name slamBook程序调试 type cppdbg request launch program fileDirname buil
  • SLAM入门

    SLAM定义 SLAM Simultaneous localization and mapping 同时定位 我在哪里 与建图 我周围有什么 当某种移动设备 汽车 扫地机 手机 无人机 机器人 从一个未知环境的未知地点出发 在运动过程中 通
  • LIO-SAM:在高斯牛顿法求解过程中用SO3代替欧拉角

    LIO SAM发表于IROS2020 是一个效果非常好的惯性 激光紧耦合里程计 我打算给我们的机器人搞一个激光里程计 于是打算把LIO SAM改一改搞过来 修改过程中发现一个问题 在里程计求解 mapOptimization的LMOptim
  • Event-based Stereo Visual Odometry(双目事件相机里程计)论文学习

    本文详细介绍一篇双目事件相机里程计的论文 Event based Stereo Visual Odometry 港科大沈邵劼团队Yi Zhou和TU Berlin的Guillermo Gallego共同完成 并公布了代码 我准备在接下来一段
  • 视觉SLAM实践入门——(20)视觉里程计之直接法

    多层直接法的过程 1 读图 随机取点并计算深度 2 创建图像金字塔 相机内参也需要缩放 并计算对应点的像素坐标 3 应用单层直接法 使用G N L M等方法 或者使用g2o ceres库 进行优化 源码中有一些地方会引起段错误 修改方法见下
  • 对最小二乘法的一点理解 - slam学习笔记

    我对最小二乘法的理解 在给定参数个数和函数模型之后 根据测试数据 找出与所有测试数据的偏差的平方和最小的参数 这里面应该有两个问题 1 为什么选取与真实数据平方和最小的拟合函数 2 如何求参数 为什么选取与真实数据平方和最小的拟合函数 极大
  • 视觉SLAM漫谈(二):图优化理论与g2o的使用

    视觉SLAM漫谈 二 图优化理论与g2o的使用 1 前言以及回顾 各位朋友 自从上一篇 视觉SLAM漫谈 写成以来已经有一段时间了 我收到几位热心读者的邮件 有的希望我介绍一下当前视觉SLAM程序的实用程度 更多的人希望了解一下前文提到的g
  • LeGO-LOAM论文翻译(内容精简)

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • 图像匹配算法

    图像匹配算法分为3类 基于灰度的匹配算法 基于特征的匹配算法 基于关系的匹配算法 1 基于灰度的模板匹配算法 模板匹配 Blocking Matching 是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像 基于灰度的匹配算法也称作
  • 互转(经纬度、地心坐标、东北天坐标)

    Part1三种坐标系介绍 经纬度坐标 假设空间某点P 用经纬度表示的话 你们B代表纬度 L代表经度 H代表大地高 纬度B P点沿着地球法线方向与赤道面的夹角 向北为正称为北纬 0 90 向南为负称为南纬 0 90 实际表示可以用 90 90
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • 高斯牛顿法求非线性最小二乘的步骤和c++代码实现

    slam图优化的本质是一个非线性优化问题 Gauss Newton求解步骤 1 线性化误差函数 2 构建线性系统 3 求解线性系统 4 更新解 并不断迭代直至收敛 一个简单的代码实现 一维参数xy 高维变为对应的矩阵即可 include
  • Eigen::aligned_allocator

    如果STL容器中的元素是Eigen库数据结构 例如这里定义一个vector容器 元素是Matrix4d 如下所示 vector
  • LeGO-LOAM中的数学公式推导

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • Ubuntu18.04安装pcl(过程/坑记录式教程)

    Ubuntu18 04安装pcl 1 下载pcl 2 安装依赖项 3 编译 4 安装 5 网上教程说要安装QT5和VTK 但按照本文的 本文记录了安装时出现的问题 出错的安装命令也记录了 建议浏览一遍再参考 不要错用了错误的指令 1 下载p
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • LIO-SAM运行自己数据包遇到的问题解决--SLAM不学无数术小问题

    LIO SAM 成功适配自己数据集 注意本文测试环境 Ubuntu18 04 ROS melodic版本 笔者用到的硬件以简单参数 激光雷达 速腾聚创16线激光雷达 RS Lidar 16 IMU 超核电子CH110型 9轴惯导 使用频率1
  • Ubuntu18.04安装Autoware1.15(解决Openplanner无法绕障的问题:Openplanner2.5)

    文章目录 一 下载Autoware1 15源码 二 安装依赖 三 修改CUDA版本 四 编译以及报错解决 编译 1 报 undefined reference to cv Mat Mat 的错就按照下面方式改相应包 2 遇到OpenCV的C

随机推荐

  • BFS题单总结

    BFS题单汇总 此文章用来记录遇到的经典的从某个点到达某个边界或者指定点的BFS题目 xff0c 将持续更新 1926 迷宫中离入口最近的出口 span class token keyword class span span class t
  • Java/C++输入输出特定格式模板总结

    Java输出每个数字占5个空格 xff0c 此输出模式见洛谷1443题 span class token class name System span span class token punctuation span out span c
  • DFS题单以及模板汇总

    此文章是为了记录自己学习DFS算法以及记录写过的DFS题单汇总 xff0c 持续补充 P1605 迷宫 迷宫 题目描述 给定一个 N M N times M N M 方格的迷宫 xff0c 迷宫里有
  • MacOS 用typora和picGo配置腾讯云COS图床

    MacOS 用typora和picGo配置腾讯云COS图床 首先去PicGo最新下载网址 xff0c 点击PicGo 2 3 0 dmg下载后安装 安装好了之后双击之后没有看到对应的启动icon xff0c 实际上是在上面的标题栏的右侧 x
  • 线段树 模板 Java语言版

    线段树 模板 Java语言版 P3373模板 线段树 2 题目描述 如题 xff0c 已知一个数列 xff0c 你需要进行下面三种操作 xff1a 将某区间每一个数乘上 x x x 将某区间每一个数加上 x
  • macos上VS Code上配置Python、Java、C++环境变量

    macos上VS Code上配置Python Java C 43 43 环境变量 首先打开设置 然后在搜索框输入set xff0c 去编辑settings json文件 下面是我本机上的配置文件 xff0c 记录一下 然后vs code上安
  • MacOS上的VS Code设置鼠标滚动轮 + Commond缩放

    路径 xff1a Code gt Preferences gt Settings 然后在搜索框中输入set去搜索 xff0c 接着点击Edit in settings json 添加这一行 34 editor mouseWheelZoom
  • MacOS Clion 使用<bits/stdc++.h>万能头提示 fatal error: ‘bits/stdc++.h‘ file not found

    MacOS Clion 使用 lt bits stdc 43 43 h gt 万能头提示 fatal error bits stdc 43 43 h file not found 百度搜了一圈答案 xff0c 都大坑了 xff0c 自己亲自
  • 多维线性DP

    多维线性DP 72 编辑距离 给你两个单词 word1 和 word2 xff0c 请返回将 word1 转换成 word2 所使用的最少操作数 你可以对一个单词进行如下三种操作 xff1a 插入一个字符删除一个字符替换一个字符 示例 1
  • Mac打开访达后如何快速知道当前文件绝对路径?

    百度查了多种方法 xff0c 还是下面这个快捷键最实用 比如我打开访达以后 xff0c 想知道当前Hello vue文件的绝对路径 xff0c 此时在当前界面直接按快捷键 option 43 command 43 c就可以复制当前文件路径到
  • 一元正态分布

    d import numpy as np import matplotlib pyplot as plt from scipy stats import norm 生成100个正态分布数据 xff0c 均值为1 xff0c 标准差为2 da
  • nohup命令详解

    nohup命令详解 一 背景说明 xff1a 启动服务的时候 xff0c 如果使用如下命令 xff0c 则会在start sh脚本所在的目录下 xff0c 产生一个名为 nohup out 的输出文件 nohup startup sh am
  • nohup命令详解

    nohup命令详解 一 背景说明 xff1a 启动服务的时候 xff0c 如果使用如下命令 xff0c 则会在start sh脚本所在的目录下 xff0c 产生一个名为 nohup out 的输出文件 span class token fu
  • Spring Boot启动后直接没有任何警告报错信息,打印`Process finished with exit code 0`直接退出

    Spring Boot启动后直接没有任何警告报错信息 xff0c 打印Process finished with exit code 0直接退出 日志 xff1a span class token number 2023 span 02 1
  • systemctl 启动/停止/重新加载 nginx

    systemctl 启动 停止 重新加载 nginx 一 新建nginx service脚本 span class token function sudo span span class token function vim span us
  • Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: ERROR: APK pat

    Unable to determine application id com android tools idea run ApkProvisionException ERROR APK path is not specified for
  • Java获取文件的MD5

    Java获取文件的MD5 主要是通过读取文件的字符流 xff0c 然后赋值给MessageDigest对象 xff0c 最后将文件流转换成16进制的字符串 span class token keyword import span span
  • android整合好视通sdk经验总结(二)

    一 无法正常访问好视通服务接口 当按照android整合好视通sdk经验总结 xff08 一 xff09 步骤整合完毕后 xff0c 在这里修改申请的应用id和服务地址 修改完毕后运行发现无法正常初始化sdk xff0c 错误码30 xff
  • 视觉SLAM⑤--相机与图像

    目录 5 0 本章简介 5 1 相机模型 5 1 1针孔相机模型 5 1 2 畸变模型 5 1 3 双目相机模型 5 1 4 RGB D相机模型 5 2 图像 5 3 实践 xff1a 计算机中的图像 5 3 1 OpenCV的基本使用方法
  • 视觉SLAM⑩后端Ⅱ(滑动窗口滤波和优化与位姿图)

    目录 10 0 本章概述 10 1 滑动窗口滤波和优化 10 1 1 实际环境下的BA结构 10 1 2 滑动窗口法 10 2 位姿图 10 2 1 位姿图的意义 10 2 2位姿图的优化 10 3 非线性优化整体总结 xff1a 前端 后