Fusion SLAM
  • 概述
  • 介绍
  • 里程计
  • 地图生成
  • 地图优化
  • 数据集与实验
  • 接口与扩展
  • 已知问题
  • 未来工作
  • 附录与参考
  • 相关教程
项目
  • 简体中文
  • English
  • 概述
  • 介绍
  • 里程计
  • 地图生成
  • 地图优化
  • 数据集与实验
  • 接口与扩展
  • 已知问题
  • 未来工作
  • 附录与参考
  • 相关教程
项目
  • 简体中文
  • English
  • 概述
  • 介绍

    • 符号
    • 流程图
    • 流程描述
    • 坐标系定义
    • 主要论文
    • 相关研究
  • 里程计

    • 介绍
    • 初始化
    • 状态估计
    • 时间同步
    • 地图约束
    • 异常处理
  • 地图生成
  • 地图优化
  • 数据集与实验
  • 接口与扩展
  • 已知问题
  • 未来工作
  • 附录与参考

    • 参考文献
    • 附录
  • 相关教程

    • 里程计教程
    • ROVIOLI教程

初始化

在运行整个里程计系统时,我们需要定义整个系统的初始状态(即初始的q、p、v、ba和ba)。而初始状态则需要通过初始化进行计算。针对实际中的不同情况我们设计了静态初始化和动态初始化两种方案,通过IMU和视觉联合判断旋转哪一种方式进行初始化。在静态初始化中我们使用滑窗内IMU数据的平均值,并且通过施密特正交化恢复IMU姿态。而在动态初始化中我们通过视觉、状态和先验构造代价函数,通过优化的方式恢复初始状态。

静态初始化

静止初始化是指在视频序列开始阶段,需要有一段静止状态,系统利用静止状态的IMU数据来估计重力方向、加速度计陀螺仪biases。

静止初始化需要检测IMU的跳变过程(其中包含两个状态:静止状态、跳变状态): 在这里插入图片描述

计算初始旋转矩阵

使用施密特正交化计算:WI0R

计算z轴:

z=zz.norm()(1)

计算x轴:

x=|z|×e1(2)

其中,e1=[1,0,0]⊤

计算y轴:

y=|z|×x(3)

可得:

WI0R=[x⊤y⊤z⊤](4)

计算陀螺仪bias

静止时刻的陀螺仪理想测量值(角速度)应该为0,因此陀螺仪的bias即窗口陀螺仪数据的平均值。

avgwm=1n∑1nwm(5)

计算加速度计bias

静止时的加速度计bias为加速度平均值与实际重力加速度的差:

avgam−WI0Rg(6)

g为世界系下的重力加速度,将重力矢量从世界系投影到IMU坐标系下。

动态初始化

构造线性约束计算初始[特征点位置, 速度,重力]

利用帧变换的基本性质,可以将向量Iipf(i帧第j个特征在IMU坐标系下的坐标)表示如下:

Cipj=ICCI0IiC(I0pj−I0pIi)+CpI(7)

通过位置计算公式将I0pIi展开可得:

Cipj=ICCI0IiC(I0pj−I0v0Δti−I0gΔti22−s(ti))+CpI(8)

其中,[I0pj,I0v0,I0g] 是想获得的系统部分初始状态。

通过相机投影公式:

zij=[uijvij]=[CixjCizjCiyjCizj](9)[10−uij01−vij]Cipj=[00](10)

可将(8)式写成Aijx=bij的形式:

x=[I0p1⊤…I0pM⊤I0v0⊤I0g⊤]⊤(11)Aij=[10−uij01−vij]ICCI0IiCTij(12)bij=[10−uij01−vij](ICCI0IiCs(ti)−CpI)(13)

其中,

Tij=[…I3…−ΔtiI3IiI0CCIC−Δti22I3](14)

至此已构造出线性约束,通过多项式的伴随矩阵和SVD分解可解出x。

通过最大似然估计优化现有状态

通过施密特正交化计算出初始WI0R将x的所有状态转换到全局坐标系{W}当中用于构建残差,用相机模型、IMU模型和先验因子构建代价函数,并将状态设置为优化参数进行优化。

相机模型:

zc,k=hc(x)+nc,k=hd(zn,k,ζ)+nc,k=hd(hp(Ckpf),ζ)+nc,k=hd(hp(ht(Wpf,WCkR,WpCk)),ζ)+nc,k(15)

其中,hd为相机畸变矫正,hp为投影模型,ht为坐标系变化({G}->{C})。

残差:

CC≜‖zc−hc(x)‖Rc−12(16)

IMU模型:

Wpk+1=Wpk+WvkΔt−12WgΔt2+WkR⊤kαk+1(17)Wvk+1=Wvk−WgΔt+WkR⊤kβk+1(18)Wk+1q¯=kk+1q¯⊗Wkq¯(19)

其中,

kαk+1≃kα˘k+1+∂α∂ba|b¯aΔba+∂α∂bw|b¯wΔbw(20)kβk+1≃kβ˘k+1+∂β∂ba|b¯aΔba+∂β∂bw|b¯wΔbw(21)kk+1q¯≃q¯(Δbw)−1⊗kk+1q¯˘(22)

kα˘k+1,kβ˘k+1,kk+1q¯˘ 为当前估计偏置下与积分的测量值。

残差:

rI(x)=[2vec(Vk+1q¯⊗Vkq¯−1⊗kk+1q˘−1⊗q¯(Δbw))bw,k+1−bw,k(VkR(Vvk+1−Vvk+WVRWgΔt)−kβ˘k+1−∂β∂ba|b―aΔba−∂β∂bw|b―wΔbw)ba,k+1−ba,k(VkR(Vpk+1−Vpk−VvkΔt+12WVRWgΔt2)−kα˘k+1−∂α∂ba|b―aΔba−∂α∂bw|bwΔbw)](23)CI≜∥0−rI(x)∥P−12(24)

先验残差:

通过当前时间状态的线性化值和估计值构建残差:

CC≜‖x⊞xlin‖Λ2(25)

最后进行优化,使残差达到最小值,

minx∑CI+∑CC+∑CP(26)

当残差收敛,得到的优化参数为最终的初始状态,初始化结束。

Prev
介绍
Next
状态估计