IMU标定算法流程

2023-10-31

由于VIO中,普遍使用的是精度较低的imu,所以其需要一个较为准确的内参数和noise的估计。Noise大家通常使用Allan方差进行估计可以得到较为可信的结果,这里不赘述了。内参数标定比较方便的一个工具就是imu_tk。所以本篇文章主要详细介绍一下imu_tk的算法流程以及使用时的注意事项。下一篇的内容 计划是imu-camera外参数的标定方法。

首先分步介绍算法流程:

1. 读入数据,将时间单位转化为秒

2. 设置初始参数和标定算法的控制参数

3. 开始标定

3.1 标定加速度计

首先调用initiInterval函数,返回前50s(默认是30s)的数据的index

计算初始的init_static_interval的方差,定义为norm_th

For循环:th_mult=2:10

{利用大小为101的滑动窗口搜索静止区间:如果该滑动窗口内的加速度计读数的方差小于th_mult*norm_th,则认为是静止区间

提取出静止区间内的加速度计读数。如果某个区间的大小小于初始设置的interval_n_samples_(默认是100)则去除该静止区间;注意,如果初始参数中acc_use_means_为true,则在静止区间内只取所有读数的平均值作为static_sample,且其时间戳为静止区间的时间戳的中值。否则保存所有的静止区间内的sample。如果提取出的静止区间个数小于初始设置的min_num_intervals_(默认是12),则认为采集的数据不足以标定imu,则程序退出。

构造目标函数:g-unbiasnorm(acc_samples),其中前者为初始设置的重力加速度值,后者为去除bias以后的加速度计读数的norm。因为如果imu静止,则其加速度计的读数的模应当等于重力加速度的值。

利用ceres最小化目标函数得到加速度计的九个参数。并利用标定得到的参数将加速度计的raw_data进行修正。

}

th_mult在2~10时最小的估计误差对应的参数为最准的加速度计标定参数,同时保存该参数对应的static_interval。

3.2 标定陀螺仪

根据加速度计的标定结果,提取static_sample。

根据初始的50s的陀螺仪读数,估计陀螺仪的bias。

利用上步得到的bias矫正陀螺仪读数。

根据提取的static_interval找到运动区间的start_index和end_index。

构造目标函数:integrate_R’*g_start-g_end。其中g_start和g_end均是归一化后的向量。因为在imu运动区间内,两帧加速度计的读数之间应当是两帧间imu的旋转,也就是imu的陀螺仪积分后得到的结果。

利用ceres最小化目标函数得到陀螺仪的十二个参数。注意,如果初始optimize_gyro_bias_为true,则在矫正陀螺仪读数后仍然需要标定bias参数,否则返回初始读数估计得到的bias。gyro_dt_如果为-1,则利用两帧陀螺仪的timestamp进行积分,否则利用gryo_dt给定的时间间隔进行积分。

注意事项:

1. 标定时,首先需要将imu静止一段时间,根据程序可知,至少需要静止50s以上。

2. 由于程序中检测静止区间的滑动窗口大小为101,所以每次静止时间需要超过100帧数据

3. 由于程序中检测静止区间时,需要至少end_index开始的滑动窗口内的方差大于2倍的静止方差,所以每两次静止区间之间的运动时间不能太短,且最好是有明显的加速或减速运动。最好运动时间超过100帧。

4. 由于程序中需要检测到的静止区间数大于12,且论文中提到静止区间为30+~40+次时,精度较好。所以需要有大概30多次的静止区间。

5. 静止区间内尽量保证imu是静止不动的。初始的1分钟中内尤其要保持imu静止,以得到较好的norm_th的估计和gyro_bias的估计。

参考文献:

Tedaldi D, Pretto A, Menegatti E. A robust and easy to implement method for IMU calibration without external equipments[C]//2014 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2014: 3042-3049.

作者:张明,中科院自动化所博士
链接: https://zhuanlan.zhihu.com/p/21563943
来源:知乎
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IMU标定算法流程 的相关文章

  • 自定义Flink消费和生产Kafka消息(消费时Schema、生产时Key&Value&分区)

    当我们在消费Kafka数据时 比较常用的是SimpleStringSchema 我个人比较喜欢用的是JSONKeyValueDeserializationSchema 上述两个API可以完成绝大多数的开发场景 但是但遇到个别的特殊场景时 我
  • Qt——加载qss文件简单用法

    1 新建后缀名为 qss的通用文件 添加需要实现的样式代码 2 在资源文件中添加刚刚新建的 qss文件 3 main函数添加以下代码 int main int argc char argv QApplication a argc argv
  • 用服务器怎么修改奥的斯的速度,奥的斯服务器使用指南-20210412074643.pdf-原创力文档...

    OTIS电梯 电脑软件画面 1 2 com com com com 3 4 Disp Ent M 7 8 9 state D E F call Test F 4 5 6 Disp A sel B 开始 In out S 1 2 3 ON U
  • texture和sprite使用上的区别

    1 什么情况下使用Texture 当图片过大 不适合合成图集的时候 可以使用Texture 此时要尽量的保证图片的宽高是2的N次方 使用的地方少 当图片为2的N次方 且出现的频率不高时 可以使用Texture 例如游戏的背景和Logo 需要
  • gzip: stdin: unexpected end of file Linux解压文件出错

    root localhost jdk1 8 tar zxvf jdk 8u161 linux x64 tar gz jdk1 8 0 161 jdk1 8 0 161 javafx src zip gzip stdin unexpected
  • 【计算机网络】HTTP首部详解

    HTTP首部详解 HTTP 协议的请求和响应报文中必定包含 HTTP 首部 首部内容为客户端和服务端分别处理请求和响应提供所需要的信息 对于客户端用户来说 这些信息中的大部分内容都无需亲自查看 1 HTTP请求报文 2 HTTP响应报文 3
  • Java 动态代理简单使用

    Java简单的动态代理 项目结构 dao包 public interface UserInfodao public boolean LoginCheck String username String password void listAl
  • mongodb 查询效率_2020年9个好用的MongoDB 图形化界面工具

    市场上有许多MongoDB管理工具 这些工具可以提高MongoDB开发和管理的效率 下面我们就列举一些2020年好用的mongo管理工具 1 NoSQLBooster 用于MongoDB的NoSQLBooster 以前称为MongoBoos
  • 如何将Spotify音乐下载并保存为MP3

    Spotify歌曲采用原始的OGG Vorbis格式 具有DRM保护 可防止您下载并将其分发到其他地方以供欣赏 得益于精心设计的DRmare Spotify Music Converter for Mac 您现在可以批量下载Spotify曲
  • 【操作系统】浅谈 Linux 中的中断机制

    操作系统 浅谈 Linux 中的中断机制 参考资料 2015 SP 北京大学 Principles of Operating System 操作系统原理 by 陈向群 p7 p10 认认真真的聊聊中断 什么是软中断 认认真真的聊聊 软 中断
  • iOS实现麦克风捕获和AAC编码

    转载地址 http blog csdn net shenyi0106 article details 47004039 在Ios中 实现打开和捕获麦克风大多是用的AVCaptureSession这个组件来实现的 它可以不仅可以实现音频捕获
  • 调试破解无限dubugger

    目标网站上PM2 5实时查询 PM2 5历史数据查询 PM2 5全国城市排名 PM2 5雾霾地图 中国空气质量在线监测分析平台 真气网 首先要确定是否是虚拟机 虚拟机https www aqistudy cn 明显的特征虚拟机一般源文件上会
  • Hutool常用工具类及方法使用

    Hutool常用工具类及方法使用 依赖注入 类型转换工具类 Convert 时间工具类 DateUtil 字符串工具类 StrUtil 身份证验证工具 IdcardUtil 控制台打印 Console 依赖注入
  • 每秒上千次高并发访问,HDFS优雅的抗住了

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 写在前面 二 问题源起 三 HDFS优雅的解决方案 1 分段加锁机制 内存双缓冲机制 2 多线程并发吞吐量的百倍优化 3 缓冲数据批量刷磁盘 网络优化 一
  • 如何在navicat for mysql画图(建模型)并直接生成

    1 登录进数据库后 点击模型 新建模型 如下 2 点击 小手 下面的图标 双击右边的空白处 即出现一个表格 可命名 此时我们命名为A 3 双击A表下空白处 即可设计A表属性 点确定 如下 4 同理 生成一个B表 加粗样式 5 如何让A B表
  • 特征归一化优点

    什么是特征归一化 数据的标准化 normalization 是将数据按比例缩放 使之落入一个小的特定区间 在某些比较和评价的指标处理中经常会用到 去除数据的单位限制 将其转化为无量纲的纯数值 便于不同单位或量级的指标能够进行比较和加权其中最
  • dsolve函数的功能_为什么Mathematica的DSolve函数会解不出显式解??

    In 6 DSolve v t 3 v t 2 v t 2 v t 2 2 v t v t v t t Out 6 v t gt E t Sqrt C 1 Tan E t Sqrt C 1 C 2 说明书里面是这么说的 DSolve inc

随机推荐

  • 43. 字符串相乘

    43 字符串相乘 注意 不能使用任何内置的 BigInteger 库或直接将输入转换为整数 示例 1 输入 num1 2 num2 3 输出 6 示例 2 输入 num1 123 num2 456 输出 56088 提示 1 lt num1
  • 判断Android主题是否为深色主题

    fun isDarkTheme context Context Boolean val flag context resources configuration uiMode and Configuration UI MODE NIGHT
  • java.lang.NoClassDefFoundError:com/google/common/base/Moreobjects

    项目所属环境不同 解决方案不一定适合所有人 见谅 java lang NoClassDefFoundError com google common base Moreobjects 编译可以通过 运行报错 很无奈 突然蹦出这鬼东西 经过一番
  • ESP32S2+ES8388移植过程及问题

    电路图如下 有点小瑕疵ES8388 VMID PIN10 19 20电容没有忘加 查资料应该不影响语言输出 可能噪音大 如果能导致不输出请告诉我一下 ESP32S2管脚映射 这里主要问题是我不确定MCLK 放到S2的PIN33是否合适 查资
  • C++ 类的静态成员和非静态成员

    类的静态成员不占据类对象的字节数 1 一个空类占用字节数为1 2 int整形变量占据的字节数为4 class Person int m A 非静态成员变量 属于类的对象上 static int m B 静态成员变量 不属于类的对象上 voi
  • JSP三大指令,六个动作,九个内置对象,四大作用域

    一 JSP三大指令 1 1 page指令 page指令 后面跟着三个属性 分别是language contentType pageEncoding 属性名 取值范围 描述 language Java 解释该JSP文件时采用的语言 一般为Ja
  • 少样本学习概述及三种经典方法

    从迁移学习讲起 Pre train Fine tune 不同领域数据规模不同 模型表现并不理想 但是 模型浅层可以学到通用特征 深层才学到更为复杂的分类特征 在大规模数据上训练的模型 其底层特征保持较高的通用性 迁移学习的下游任务仍然受限于
  • 计算机键盘正确指法操作方法,键盘指法,图文详解键盘指法练习方法

    随着时代的发展 现在越来越多的工作都是用电脑来完成的了 这就需要我们会打字了 很多朋友打字很慢是因为键盘指法不对 为了让您能更好的打字 今天小编就教您键盘指法练习方法 很多打字很快的朋友都是采用的盲打的方式 这就要求对键盘上的按键很熟悉 同
  • 二叉树之重建(js)

    二叉树之重建 输入一颗二叉树的先序遍历和中序遍历 输出它的后序遍历 输入 DBACEGF ABCDEFG BCAD CBAD 输出 ACBFGED CDAB var root value null left null right null
  • 【华为面试题】栈(二)

    题目 代码 function getMinElectricBoxes input str const n input str length const powerBoxPositions let lastPowerBoxUsed false
  • requests 实现模拟登录,获取cookie

    有个需求需要模拟登录csdn获取cookie 对csdn进行后续系列操作 刚开始使用的selenium 功能可以实现 但是效率有点低 后来改用的requests 遇到不少坑 今天来总结一下 首先找到csdn登录的url 在故意输错密码的情况
  • size函数 matlab 含义,size()函数的使用

    matlab中对于矩阵的计算是十分方便的 其中关于矩阵的函数有很多 size 在c c 中sizeof用来求某变量所占用的字节数 在matlab中size 则可以用来求矩阵的 长度 矩阵的长度有两方面 1 行数 2 列数 所以size 也有
  • [创业之路-73] :如何判断一个公司或团队是熵减:凝聚力强、上下一心,还是,熵增:一盘散沙、乌合之众?

    目录 前言 一盘散沙 乌合之众 凝聚力强 上下一心 一 股权结构与利益分配 一盘散沙 乌合之众 凝聚力强 上下一心 二 组织架构与岗位职责 一盘散沙 乌合之众 凝聚力强 上下一心 三 战略目标 一盘散沙 乌合之众 凝聚力强 上下一心 四 规
  • Cloudflare 重定向配置

    最近把之前的一个网站域名换成另一个域名 想要添加一下重定向 避免流量流失 虽然本来就没流量 然后在 Cloudflare 配置时尝试多次都失败了 遇到各种 Your connection is not private 或者 Webpage
  • 代码审查常见问题,建议收藏

    最近某宝弹窗事件导致其APP被大量用户删除 影响极其恶劣 我在想 如果他们的内部代码审查更加严格一点 少走形式 就能将隐患扼杀在摇篮里了 基于此 我们部门专门成立了由小组长和核心成员组成的代码评审组 将以前的代码评审模式进行了一些优化 加强
  • Win10 设备管理器一个USB设备描述符请求失败解决方法

    问题 进入设备管理器 发现 通用串行总线控制器 下有一项带有黄色 未知USB设备 设备描述符请求失败 或者 解决方法如下 1 点击Windows键 R或者 点击系统桌面左下角 开始 在开始菜单中点击 运行 在运行对话框中输入 service
  • 彻底学会IO流

    概述 IO流就是用来处理设备间数据传输问题的 常见的应用 文件复制 文件上传 文件下载 IO的数据传输 可以看做是一种数据的流动 按照流动的方向 已内存为参照物 进行读写操作 IO可以保存到文件 其实就是内存在读取 内存在写入 而且不会消失
  • Linux常用命令记录

    1 查询当前文件夹下各个文件尺寸大小 du h max depth 1 查看当前目录下文件总共占用的空间 du sh 查看当前目录下各个文件或目录分别占用的空间大小 du sh 2 查询端口占用 lsof i xxxx 3 防火墙允许端口
  • Jaspersoft 报表: 基于JDBC填充报表数据

    第一步 在Jaspersoft Studio工具中新建JDBC数据源 然后Next 选择 Database JDBC Connection 点击Test 显示 Successful 然后Finish 第二步 新建报表模板 1 新建报表模板人
  • IMU标定算法流程

    由于VIO中 普遍使用的是精度较低的imu 所以其需要一个较为准确的内参数和noise的估计 Noise大家通常使用Allan方差进行估计可以得到较为可信的结果 这里不赘述了 内参数标定比较方便的一个工具就是imu tk 所以本篇文章主要详