zoukankan      html  css  js  c++  java
  • VIO主流框架

    本节主要说明当前主流的VIO算法流程。课程来源于B站

    高斯牛顿法

    误差项:
    $$
    e(x+Delta x)=e(x)+J(x)Delta x
    $$

    1. 一次观测
    2. 多次观测
    3. 逆深度 + VIO

    EKF滤波和优化

    1. EKF铝箔相当于之迭代一次的优化,区别是滤波仅考虑上一帧的影响,而优化则考虑所有帧的影响
    2. 多次优化精度比滤波高,但效率低于滤波,因优化可以迭代多次,不断优化线性化点,是误差最小

    IMU预积分

    1. 积分下一个时刻的PVQ作为视觉初始值
    2. 预计分相邻帧的PVQ变化量,作为IMU的约束
    3. 计算IMU误差的协方差和jacobian

    image-20191202112248399

    VIO分类

    1. 将视觉约束就加到联合优化是紧耦合

    2. 将视觉约束后的位姿加入到联合优化是松耦合

    image-20191202135710367

    MSCKF

    具体流程如下所示:

    1. 初始化
    2. IMU预测
    3. 视觉跟踪
    4. 视觉增广
    5. 视觉更新—选老点或者看不见的点
    6. 视觉更新—边缘化
    7. 剔除老帧

    image-20191202142230678

    误差状态向量
    $$
    hat{X_k}^{(15+6N) imes1} = [hat{X_{IMU_k}} delta heta_{C_1} ce{G}hat{p}{C_1} …ce{^{G}hat{p}{c_N} ce{G}hat{p}_{C_N}}]
    $$

    $$
    hat{X}_{IMU}_k^{15 imes1}=[delta heta_I hat{b_g}spacece{G}hat{v}_Ihat{b}_aspace ce{G}hat{p}_I ]^T
    $$

    每得到一个新图像以后需要对协方差矩阵做一个增广

    MSCKF对协方差矩阵的增广

    image-20191202144228268

    成熟的路标点 表示窗口内各帧都看得到的点

    因子图

    image-20191202145520572

    Tbc表示IMU与相机间的转换矩阵

    image-20191202145642717

    image-20191202145714060

    路标点边缘化完后就可以了

    第j个路标点的所有视觉误差为
    $$
    r^{2M imes1}cong H_x^{2M imes(15+6N) ilde{X}^{(15+N) imes1}}+H_f^{2M imes3}ce{G}hat{p}_{f_j}^{3 imes1}+n^{2M imes1}
    $$
    image-20191202150951897

    将r投影到Hf的左零空间,想党羽对路标点进行边缘化,将边缘化约束来优化共视帧。
    $$
    r_0^(2M-3M_L) imes1=A^Tr^2M imes1cong A^TH_{x}^{2M imes(15+6N)} ilde{X}^{(15+6N) imes1}+A^Tn^(2M imes1)
    $$

    ROVIO

    复杂 不常用

    流程

    1. IMU预测
    2. 视觉更新
    3. IEKF
    4. 相机模型
    5. 像素坐标校正
    6. 光度误差
    7. QR分解
    8. Paych提取及Warp计算
    9. 路标点质量评价及维护

    image-20191202152338738

    ROVIO使用光度误差

    image-20191202152951499

    ROVIO将路标点包含到状态向量中。有因将路标点表征在当前帧的坐标系下,有范围限制,因此对其进行归一化得到无约束的状态量—方向向量Bearing Vector

    ROVIO的创新点如下所示:

    ROVIO中,路标点使用当前帧下的归一化相机系坐标Pc和你深度表示,并作为状态向量进行预测和更新。参数化不同导致预测和更新的细节不同,但总体还是EKF五大公式。又因Pc有边界约束,因此引入了Bearing Vector老了使得Pc平滑可导

    image-20191202153359978

    状态向量:当前帧的PVQB和路标点( mu,p)

    image-20191202154121085

    因子图如下

    image-20191202154600998

    VINS

    优化向量

    包括滑动窗口内的n个相机状态PVQB、Camera到IMU的外参、m个3D点的逆深度:

    $$
    X=[x_0,x_1,…x_n,x_c^b,lambda_0,lambda_1,…lambda_m]
    $$

    image-20191202155816170

    框表示滑动窗口,T中的R、t表示P、Q ;M中的是v和b;lambda表示路标的逆深度;(外参没有考虑)

    VI-ORB

    流程图

    image-20191202160942722

    Tracklocal map:仅优化当前帧

    image-20191202160729305

    Local Map:优化华创内的所有帧的PVQB和路标点

    image-20191202161217237

    ICE-BA

    增量式BA,误差为IMU和视觉,LBA为滑窗优化,GBA为所有KF优化,速度很快。

    image-20191202161618980

    ICE-BA认为在建立增量方程时,对之前已经算过的且不变的那些状态向量没必要重新线性化(线性化及计算Jacobian),因为即使重新计算Jacobian也没什么变化。另外,也没必要对整体[H|b]矩阵进行消元,而是只对变化的进行更新。最后只计算变化的路标点即可。对于没有变化的状态向量的临时值则一直保存下来,避免重新计算。

    总结而言,在ICE-BA中更新Factor有三种情况:

    1. 该Factor在本次迭代中没有变化,则不更新;
    2. 该Factor是新Factor,则在原来基础上+=新Factor。如新观察到一个新的路标点,则对此新路标点的观测约束就是一个新的Factor;
    3. 该Factor已存在但需要更新,则先减去旧Factor,再架上新Factor。

    image-20191202162754352

  • 相关阅读:
    JAVA_Collection容器
    ArrayList实现分组功能
    scrapy 安装出错 [err2] no such file or directory: 'README.rst'【已解决】
    python spyder 今天突然打不开了【已解决】
    SVN使用教程总结
    MVC框架浅析(基于PHP)
    Web性能优化方案
    野生程序员的故事
    js控制页面跳转,清缓存,强制刷新页面
    js中json处理总结之JSON.parse
  • 原文地址:https://www.cnblogs.com/guoben/p/13339292.html
Copyright © 2011-2022 走看看