点击“计算机视觉life”关注,置顶更快接收消息!
由于格式问题最好在公众号上观看《IMU 标定-工业界和学术界有什么不同?》
本文主要介绍了IMU基本结构原理和误差的相关概念,IMU误差模型,并较详细介绍了商用产品和学术文献提到的两种IMU标定方法。
本文阅读时间约8分钟

了解IMU和误差

IMU(Inertial Measurement Unit)是测量运动物体惯性运动,输出三轴加速度和三轴角速度等信息的电子元件,用于姿态角和运动路径等测量。IMU常常还包含了磁力计、压力计、温度计和GPS等辅助单元,相互配合完成更复杂的任务。

IMU的应用广泛。放图说明,姿态角确定,惯性导航,SLAM,动作捕捉,无人机镜头防抖(实现鸡头类似的效果

六轴IMU的结构如下图,坐标轴一般遵循右手定则,理想情况下XYZ轴相互正交,加速度计和陀螺仪的轴相互重合。但是通常情况下,IMU存在一定的偏差。例如,从Inven Sense的MPU-9250芯片内部结构图可以看到该加速度计(XY、Z轴)和陀螺仪分开制造,因此加速度计和陀螺仪的坐标轴中心并不严格重合,甚至加速度计不同轴也是分开加工,坐标轴也不能保证完全正交。而且,加工过程或多或少有误差,如对称度不好,产生零偏。另外,IMU的内部参数还会随时间、温度变化,产生温漂。

IMU出厂时存在参数误差不可避免,而参数误差常常会造成严重问题:

  • 偏置异常,会造成数据漂移严重。
  • 轴向正交性和尺度异常,x-,y-,z-轴不正交或尺度不一致,会造成同一失量的模在不同方向上不一致。
  • 另外,噪声也会使测量值失真。

IMU误差模型

IMU中x-y-z轴的偏置误差\(\mathbf{b}^a\)可以表示为不同轴的零点偏置,即
\[
\mathbf{b}^a = \begin{bmatrix}
b_x \\
b_y \\
b_z \\
\end{bmatrix}
\]
IMU中x-y-z轴的正交误差$\mathbf{T}^a \(和尺度误差\)\mathbf{K}^a \(可以通过下图表示。\)\mathbf{x}^B\(-\)\mathbf{y}^B\(-\)\mathbf{z}^B\(为外部坐标系正交归一的三个轴(可以理解为\) |\mathbf{x}^B| = 1\(,\) |\mathbf{y}^B| = 1\(,\) |\mathbf{z}^B| = 1$),而 \(\mathbf{x}^S\) 表示传感器x轴的放大系数(相比\(\mathbf{x}^B\)),\(\beta_{\mathbf{x}\mathbf{y}}\) 表示x轴在x-y平面内顺时针偏离了\(\beta_{\mathbf{x}\mathbf{y}}\)弧度(小角度近似),其他参数同理。

正交误差\(\mathbf{T}^a\) 通常可以表示为
\[
\mathbf{T}^a = \begin{bmatrix}
1 & -\beta_{\mathbf{y}\mathbf{z}} & \beta_{\mathbf{z}\mathbf{y}} \\
\beta_{\mathbf{x}\mathbf{z}} & 1 & -\beta_{\mathbf{z}\mathbf{x}} \\
-\beta_{\mathbf{x}\mathbf{y}} & \beta_{\mathbf{y}\mathbf{x}} & 1 \\
\end{bmatrix}
\]
尺度误差\(\mathbf{K}^a\) 通常可以表示为
\[
\mathbf{K}^a = \begin{bmatrix}
\mathbf{x}^S & 0 & 0 \\
0 & \mathbf{y}^S & 0 \\
0 & 0 & \mathbf{z}^S \\
\end{bmatrix}
\]
在忽略噪声误差的条件下,加速度计的偏置误差\(\mathbf{b}^a\)、正交误差$\mathbf{T}^a \(和尺度误差\)\mathbf{K}^a$的模型可以表示为
\[
\mathbf{a}^O = \mathbf{T}^a \mathbf{K}^a
\begin{pmatrix} \mathbf{a}^S + \mathbf{b}^a \end{pmatrix}
\]
其中\(\mathbf{a}^S\)是加速度计的原始测量值,\(\mathbf{a}^O\)是加速度计误差补偿后的值。同理,陀螺的误差模型可以表示为
\[
\mathbf{\omega}^O = \mathbf{T}^g \mathbf{K}^g
\begin{pmatrix} \mathbf{\omega}^S + \mathbf{b}^g \end{pmatrix}
\]
其中\(\mathbf{\omega}^S\)是陀螺的原始测量值,\(\mathbf{\omega}^O\)是陀螺误差补偿后的值。

较方便的标定方法

在看严谨的标定操作之前,看一下商用产品大疆Spark无人机的标定流程

官方给的方法是在水平面上,按照图片提示六个位置静止放置片刻,即自动得到标定参数。由于重力方向和大小不变,这六个位置分别(近似)是IMU的X、-X、Y、-Y、Z和-Z朝向下的方向,因此至少可以拟合出加速度计三个轴的尺度因子、偏置以及陀螺仪的偏置。该标定方法有以下的假设

  • 重力不变且垂直向下。
  • 保持静止,可以测量陀螺仪的偏置。

对于外行人这样的标定流程简洁、快捷,适合商用级产品,但是由于标定数据太少,标定误差会较大,不利于高精度测量和导航应用,如SLAM等。

更精确标定方法

为了更深入了解标定原理过程,文献A robust and easy to implement method for IMU calibration without external equipments 给出了一种更为精确的IMU标定方法,GitHub上也有相应的Matlab源代码实现,亲试可用,还有动态演示效果不错。相比商用产品的简易标定流程,该标定方法有以下几点不同:

  • 给出了加速度计和陀螺仪更复杂的模型。
  • 利用Allan方差的定义,标定陀螺仪的偏置。
  • 大量冗余数据,保证最优化收敛。利用数十次测量数据而不是仅仅6个位置。
  • 利用Runge-Kutta积分和四元数表示法,实现陀螺仪的轴向偏差和尺度因子的标定。

标定流程图:

标定首先通过Allan方差定义测试出IMU标定静止的时间T,等待T时间后,旋转IMU并静止,静止时获取加速度数据,旋转时获取陀螺数据,循环多次后(36-50次)完成标定操作,随后算法自动完成标定。

算法首先标定加速度计,利用加速度计测量值的模和重力加速度真实g的方差构建损失函数,利用LM算法,使得最优化快速收敛,得到\(\mathbf{b}^a\)、$\mathbf{T}^a \(和\)\mathbf{K}^a$ 参数。

在标定完加速度计的基础上,标定陀螺,获得陀螺坐标相对于加速度计参考坐标的正交误差,最后偏置和尺度误差也能通过最优化算法求出。此处有一个处理的小技巧,利用四元数的超复数表示方法,可以通过积分的办法,方便地求出一个时序角速度产生的总的角度变化,并利用加速度计得到的角度和积分得出的角度比较,得到损失函数,并同样用LM算法求出陀螺的误差参数。

实际标定操作和算法处理过程中,有几点很重要。

1、和深度学习训练样本一样,IMU标定的最优化过程也需要样本的平衡性。和复杂一些的非线性最优化类似,IMU参数标定算法一般也是基于LevenbergMarquardt参数算法的拟合算法。而旋转操作可以让IMU数据(如加速度计)在三维数据空间中形成椭球形,数据均匀分布在椭球面上能够避免某一轴向的拟合权重过大,造成拟合椭球变形。

2、传感器对温度敏感(特别是陀螺仪),因此在没有温度计并且温度补偿的条件下,保证IMU的热平衡很重要。陀螺仪除了零点偏置,还有零点偏置漂移等更多误差,因此动态调节。

3、对加速度数据积分的起点和终点很关键。由于是人为转动IMU产生的抖动比较严重,因此转动的开始和结束不是很清晰,可以通过滤波减少积分误差。

4、标定器材配套很重要。手持式标定会引入人为振动,因此最好为IMU设计相应稳定可靠的标定装置,比如具有类似地球仪的旋转结构,并且带有刻度、有水平仪的仪器,这样能够实现垂直状态和特定角度转动。

5、利用Allan方差定义,可得到等待时间。但仍然存在问题,不同轴陀螺的Allan方差不一样,甚至可能差别很大。

6、IMU的坐标绝对基准还是不能标定得到。

以上两种方法制作的轻量级标定工具适用于一般的研究或产品,但对于一些高性能传感器,它们自身误差甚至小于标定参数精度,以上标定方法不再适用。需要很多价格不菲的精密仪器去标定,即提供绝对基准。

推荐阅读

从零开始一起学习SLAM | 为什么要学SLAM?
从零开始一起学习SLAM | 学习SLAM到底需要学什么?
从零开始一起学习SLAM | SLAM有什么用?
从零开始一起学习SLAM | C++新特性要不要学?
从零开始一起学习SLAM | 为什么要用齐次坐标?
从零开始一起学习SLAM | 三维空间刚体的旋转
从零开始一起学习SLAM | 为啥需要李群与李代数?
从零开始一起学习SLAM | 相机成像模型
从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?
从零开始一起学习SLAM | 神奇的单应矩阵
从零开始一起学习SLAM | 你好,点云
从零开始一起学习SLAM | 给点云加个滤网
从零开始一起学习SLAM | 点云平滑法线估计
零基础小白,如何入门计算机视觉?
SLAM领域牛人、牛实验室、牛研究成果梳理
我用MATLAB撸了一个2D LiDAR SLAM
可视化理解四元数,愿你不再掉头发
最近一年语义SLAM有哪些代表性工作?
视觉SLAM技术综述

欢迎关注公众号:计算机视觉life,一起探索计算机视觉新世界~

IMU 标定 | 工业界和学术界有什么不同?的更多相关文章

  1. 工业界 vs. 学术界: 一个年轻员工的视角

    本文发表于<中国计算机学会通讯>2015年第5期,转载已获得授权 作者:菲利普·郭 (Philip Guo),美国罗切斯特大学助理教授 译者:​王长虎,微软亚洲研究院主管研究员 如果你即将 ...

  2. imu标定 imu_tk

    1. 首先标定加速度计,这是imu加速度计xyz三个轴在标定过程中的读数: 标定结果: 2. 利用加速度计的标定结果,标定陀螺仪,结果: 也可以使用港科大开源的一个工具: https://github ...

  3. 如何从零开始系统化学习视觉SLAM?

    由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...

  4. 相机标定:kalibr标定工具箱使用总结

    1 多相机标定 1.1采集图像和IMU 1.2制作Bag包 1)组织文件结构 ~/kalibr_workspace/test/stereo_calib bagsrc cam0 (1+time(0))* ...

  5. 【项目实战】自备相机+IMU跑通Vins-Mono记录

    前言 初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以供大家参考. 我 ...

  6. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  7. TaintDroid深入剖析之启动篇

    ​1 背景知识 1.1   Android平台软件动态分析现状 众所周知,在计算机领域中所有的软件分析方法都可以归为静态分析和动态分析两大类,在Android平台也不例外.而随着软件加固.混淆技术的不 ...

  8. OpenModelica仿真

    复杂产品通常涉及机械.控制.电子.液压.气动和软件等多学科领域,其设计过程需要进行仿真,以满足对成本.质量.性能等的要求.目前各个学科和领域都已经有了比较成熟的仿真软件,但大部分仿真软件仅适用于本学科 ...

  9. RDD:基于内存的集群计算容错抽象(转)

    原文:http://shiyanjun.cn/archives/744.html 该论文来自Berkeley实验室,英文标题为:Resilient Distributed Datasets: A Fa ...

随机推荐

  1. IDEA 使用笔记

    IDEA 关闭默认打开上一个项目 File | Settings | Appearance & Behavior | System Settings=> Reopen last proj ...

  2. Centos系统中彻底删除Mysql数据库

    步骤: 1.输入命令查询系统中已安装的mysql. rpm -qa |grep -i mysql 2.逐个卸载mysql. yum remove 系统显示已安装的mysql 比如:yum remove ...

  3. Eclipse中代码字体背景变红/变黄/变绿

    如图所示:运行之后,突然这样.到底是什么原因导致的呢? : 经过查找资料可知:因为Eclipse中有覆盖代码功能 (绿色表示代码被执行到,红色表示代码没有被执行到,黄色表示代码部分执行到) 怎么解决这 ...

  4. C# 默认访问修饰符

    c# 中类,成员,枚举,结构等默认访问修饰符是? 根据MSDN文档有: [MSDN] Classes and structs that are not nested within other clas ...

  5. 使用CSS选择器实现选择指定子节点

    HTML CSS 具体效果 其他事例 事例图片来自MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS/:nth-child

  6. GMA Round 1 最短距离

    传送门 最短距离 在椭圆C:$\frac{x^2}{20^2}+\frac{y^2}{18^2}=1$上作两条相互垂直的切线,切线交点为P,求P到椭圆C的最短距离.结果保留6位小数. 设椭圆方程:$\ ...

  7. vue_ajax 请求

    yarn add vue-resource axios npm install --save axios pubsub-js // import VueResource from "vue- ...

  8. 数据结构-堆 Java实现

    数据结构-堆 Java实现. 实现堆自动增长 /** * 数据结构-堆. 自动增长 * */ public class Heap<T extends Comparable> { priva ...

  9. servlet数据库验证登录

    servlet数据库验证登录 一.将数据库连接和验证封装为一个单独的类 import java.sql.*; public class SQLtest { // JDBC 驱动名及数据库 URL st ...

  10. WinForm打包或部署

    一.新建InstallShield项目 二. 三. 四. 五. 六. 七. 最后重新生成,安装包一般在E\Setup1\Setup1\Express\SingleImage\DiskImages\DI ...