【OpenVINS】(一)ZUPT

2023-05-16

参考:Measurement Update Derivations » Zero Velocity Update


在典型的自主汽车场景中,传感器系统将在停止灯处变得静止,其中动态物体(例如交叉路口的其他车辆)可能会快速损坏系统,通过零速检测识别当前车辆处于静止状态,以暂停特征跟踪,来避免定位系统崩溃


1. Inertial-based Detection

1.1 误差构造

当车辆静止(对于车辆匀速直线运动这种case可以通过速度幅值检测剔除),加速度和角速度先验值都是0,先验也是一种观测,所以构造如下观测方程:
z ~ = [ a − ( a m − b a − G I k R G g − n a ) ω − ( ω m − b g − n g ) ] = [ − ( a m − b a − G I k R G g − n a ) − ( ω m − b g − n g ) ] \tilde{\mathbf{z}}=\left[\begin{array}{c} \mathbf{a}-\left(\mathbf{a}_{m}-\mathbf{b}_{a}-{ }_{G}^{I_{k}} \mathbf{R}^{G} \mathbf{g}-\mathbf{n}_{a}\right) \\ \boldsymbol{\omega}-\left(\boldsymbol{\omega}_{m}-\mathbf{b}_{g}-\mathbf{n}_{g}\right) \end{array}\right]=\left[\begin{array}{c} -\left(\mathbf{a}_{m}-\mathbf{b}_{a}-{ }_{G}^{I_{k}} \mathbf{R}^{G} \mathbf{g}-\mathbf{n}_{a}\right) \\ -\left(\boldsymbol{\omega}_{m}-\mathbf{b}_{g}-\mathbf{n}_{g}\right) \end{array}\right] z~=[a(ambaGIkRGgna)ω(ωmbgng)]=[(ambaGIkRGgna)(ωmbgng)]

openvins代码也利用速度为0的先验,构造误差方程,
0 = v k + 1 = v k − g ∗ d t + R T ∗ ( a m − b a − n a ) ∗ d t 0 = v_{k+1} = v_k - g*dt + R^T*(a_m - b_a - n_a)*dt 0=vk+1=vkgdt+RT(ambana)dt

此误差与上面的 z ~ \tilde{\mathbf{z}} z~ 中以加速度为 0 0 0 的先验构造的误差项可认为是等价的,只需要使用一个即可

1.2 计算雅可比

a = a m − b a − G I k R G g − n a ω = ω m − b g − n g \begin{aligned} \mathbf{a} &=\mathbf{a}_{m}-\mathbf{b}_{a}-{ }_{G}^{I_{k}} \mathbf{R}^{G} \mathbf{g}-\mathbf{n}_{a} \\ \boldsymbol{\omega} &=\boldsymbol{\omega}_{m}-\mathbf{b}_{g}-\mathbf{n}_{g} \end{aligned} aω=ambaGIkRGgna=ωmbgng

对上式一阶泰勒展开,即可得到雅可比
∂ z ~ ∂ G I k R = − ⌊ G I k R G g × ⌋ ∂ z ~ ∂ b a = ∂ z ~ ∂ b g = − I 3 × 3 \begin{aligned} \frac{\partial \tilde{\mathbf{z}}}{\partial_{G}^{I_{k}} \mathbf{R}} &=-\left\lfloor ^{I_{k}}_{G} \mathbf{R}^{G} \mathbf{g} \times \right\rfloor\\ \frac{\partial \tilde{\mathbf{z}}}{\partial \mathbf{b}_{a}} &=\frac{\partial \tilde{\mathbf{z}}}{\partial \mathbf{b}_{g}}=-\mathbf{I}_{3 \times 3} \end{aligned} GIkRz~baz~=GIkRGg×=bgz~=I3×3

注意,这里使用的JPL四元数,所以关于 G I k R _{G}^{I_{k}} \mathbf{R} GIkR的雅可比前面会多一个负号

1.3 卡方分布来确定当前车辆是否处于静止状态

z ~ ⊤ ( H P H ⊤ + α R ) − 1 z ~ < χ 2 \tilde{\mathbf{z}}^{\top}\left(\mathbf{H P H}^{\top}+\alpha \mathbf{R}\right)^{-1} \tilde{\mathbf{z}}<\chi^{2} z~(HPH+αR)1z~<χ2

  • P \mathbf{P} P表示状态 G I k R G , b g , b a ^{I_{k}}_{G} \mathbf{R}^{G}, \mathbf{b}_g, \mathbf{b}_a GIkRG,bg,ba的协方差,观测方程会使用两帧图像中间所有的imu测量值构造(每个测量值构造一组观测方程),方程中关于状态的协方差并非都是常量,
    • P \mathbf{P} P中关于 G I k R G ^{I_{k}}_{G} \mathbf{R}^{G} GIkRG的协方差是常量,就是 k k k时刻姿态的协方差
    • b g , b a \mathbf{b}_g, \mathbf{b}_a bg,ba的协方差则需要从 k k k时刻积分到当前imu测量值时刻 t t t,这段时间记为 Δ t \Delta t Δt,则 Σ t b g , b a = Σ c o n t i n u o u s b g , b a Δ t \Sigma_t^{\mathbf{b}_g, \mathbf{b}_a} = \Sigma_{continuous}^{\mathbf{b}_g, \mathbf{b}_a} \Delta t Σtbg,ba=Σcontinuousbg,baΔt也就是说ZUPT中不只是有观测方程,还隐含了一个这样的state propagation的过程
    • openvins为了简便做了近似,使用两帧图像间的时间差 Δ t k , k + 1 \Delta t_{k,k+1} Δtk,k+1替代 Δ t \Delta t Δt
  • 实际使用中,IMU的噪声 R \mathbf{R} R需要放大50-100倍,因为我们有可能低估了我们的IMU的噪声,以及IMU挂在的车体本身存在振动

1.4 状态更新

  • 对状态 b g , b a \mathbf{b}_g, \mathbf{b}_a bg,ba进行state propagation,即更新状态协方差
  • 执行正常的KF更新步骤

2. Disparity-based Detection

1 N ∑ i = 0 N ∥ u v k , i − u v k − 1 , i ∥ < Δ d \frac{1}{N} \sum_{i=0}^{N}\left\|\mathbf{u v}_{k, i}-\mathbf{u v}_{k-1, i}\right\|<\Delta d N1i=0Nuvk,iuvk1,i<Δd

注意,这种方式在动态环境中将会失效,所以需要配合第一种方式一起使用


@leatherwang
二零二一年十月三日

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

【OpenVINS】(一)ZUPT 的相关文章

随机推荐

  • c ++ Set存放自定义 结构体 类 重载比较运算符

    结构体 xff1a 结构体重载操作在结构体外实现 span class token macro property span class token directive hash span span class token directive
  • c++ 哈希map unorder map set 存放自定义结构体作为key

    c 43 43 中的哈希map xff0c 即unorder set与unorder map如何使用结构体作为key 示例代码如下 xff1a span class token macro property span class token
  • leetcode 5 回文子串

    题目 很明显暴力方法是n平方复杂度 xff0c 所以一直在想有没有不是n平方复杂度的方法 然后就掉坑里了 最后看了题解发现其实就是n平方复杂度 xff0c 所以就直接暴力了 附上一份随手暴力代码 xff0c 遍历对称中心 span clas
  • 【ceph】理解Ceph的三种存储接口:块设备、文件系统、对象存储

    Ceph是一个开源的 统一的 分布式的存储系统 xff0c 这是我们宣传Ceph时常说的一句话 xff0c 其中 统一 是说Ceph可以一套存储系统同时提供块设备存储 文件系统存储和对象存储三种存储功能 一听这句话 xff0c 具有一定存储
  • 二叉树的迭代遍历 前序 中序 后序 模板

    作为个人学习笔记 xff0c 原出处讲的很清楚 xff1a 代码随想录 非标记法 使用非标记法写的话 xff0c 中序的代码风格和前后序完全不同 中序 xff1a span class token keyword class span sp
  • (8)requests发起get/post请求

    一 基本概念 1 什么是接口 前后端数据传输的通道 2 http请求的接口 协议 43 域名 ip 43 接口地址 43 请求参数 3 http请求的要素 请求地址 43 请求方法 43 请求数据 二 request请求接口 1 安装 pi
  • 【面试必备】面向Android开发者的复习指南!最全的BAT大厂面试题整理

    近日一好友去阿里面试 xff0c 面试失败了 xff0c 分享了一个他最不擅长的算法面试题 题目是这样的 题目 xff1a 给定一个二叉搜索树 BST xff0c 找到树中第 K 小的节点 出题人 xff1a 阿里巴巴出题专家 xff1a
  • c memcpy 带重叠部分 实现

    主要是要注意当目标地址在源地址后面且存在重叠区域的时候 xff0c 需要从后往前复制 span class token macro property span class token directive hash span span cla
  • 主流PCB画图软件的对比区别(AD、Pads、Allegro)

    国内的EDA软件市场几乎被三家瓜分 xff0c 分别是Altium Mentor Pads Cadence xff0c 也是我们这次主要分析和比较的软件 本人用的多的是 Alitum 也用过allegro xff0c pads目前还没用过
  • 新书推荐 |《Prometheus监控实战》

    新书推荐 Prometheus监控实战 点击上图了解及购买 Docker公司前服务与支持副总裁 Kickstarter前首席技术官 Empatico首席技术官撰写 xff0c 全方位介绍继Kubernetes之后的第二个CNCF毕业项目 P
  • 腾讯大数据总体架构图,对外公开!

    导读 xff1a 腾讯作为国内体量最大的互联网公司之一 xff0c 业务涵盖用户日常生活的方方面面 xff0c 面对如此巨大业务数据量 xff0c 如果不能对数据进行专业化处理并高效有序地存 管 用 xff0c 如果不能使数据产生应有的价值
  • API安全实战

    一提起 信息安全 xff0c 不管是业内专家还是所谓的 吃瓜群众 xff0c 多半都会在脑海中浮现 网络安全 Web安全 软件安全 数据安全 等常见的词汇 市面上绝大多数安全类书籍也多集中在这几个领域 xff0c 而从API视角阐释信息安全
  • 【第115期】世界一流大学计算机专业,都在用哪些书当教材?

    导读 xff1a 转眼间离新学期开学又不远了 清华 北大 MIT CMU 斯坦福的学霸们在新学期里要学什么 xff1f 本文就带你盘点一下那些世界名校计算机专业采用的教材 不用多说 xff0c 每本都是经典的烧脑技术书 xff0c 建议配合
  • 什么是AB实验?能解决什么问题?终于有人讲明白了

    导读 xff1a 走向身边的AB实验 作者 xff1a 木羊同学 来源 xff1a 大数据DT xff08 ID xff1a hzdashuju xff09 AB实验 是一个从统计学中借来的工具 我和大家一样 xff0c 每次只要看到 统计
  • 树莓派3b引脚图

    如上图所示 xff0c 我们可以很清楚的看到各个引脚的功能 例如我们想使用pwm引脚来控制舵机 xff0c 则我们可以考虑使用其中的 BCM18 PWM0 和 BCM13 PWM1 在使用wiringPi库时 xff0c 我们定义的引脚即B
  • 跟踪slab分配堆栈流程的方法(perf、systemtap)

    跟踪slab分配堆栈流程的方法 xff08 perf systemtap xff09 内存泄露是在解决内核故障会遇到的棘手情况 xff0c 根据具体的内存使用情况 xff0c 追踪相应slab cache的分配堆栈流程 xff0c 是追踪泄
  • prometheus+grafana监控mysql、canal服务器

    一 prometheus配置 1 prometheus安装 1 1官网下载安装包 xff1a https prometheus io download 1 2解压安装包 xff1a tar zxvf prometheus 2 6 1 lin
  • mac配置jmeter

    一 步骤 1 安装jdk1 8版本 xff0c 因为jmeter是基于java环境运行的 2 安装jmeter5 x版本 二 安装jdk 1 下载jdk Java Downloads Oracle 2 下载好之后安装 xff0c 全部下一步
  • 操作系统(四):动态链接与静态链接的区别

    在回答这个问题之前希望大家大概了解一个文件编译的过程 xff0c 比如一个C文件在编译成功后文件夹里的文件会有什么变化 xff0c 大家可以先去创建一个helloworld c的文件 xff0c 观察其编译后的变化 那么问题来了 面试官经常
  • 【OpenVINS】(一)ZUPT

    参考 xff1a Measurement Update Derivations Zero Velocity Update 在典型的自主汽车场景中 xff0c 传感器系统将在停止灯处变得静止 xff0c 其中动态物体 xff08 例如交叉路口