Imu_tk算法流程

由于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.

test_imu_calib.cpp

需要修改代码里的offset和scale,把offset设置为0,把scale设置为1

  init_acc_calib.setBias( Vector3d(, , ) );
init_gyro_calib.setScale( Vector3d(1.0, 1.0, 1.0) );

Imu_tk算法流程及数据采集要求和标定程序参数设置的更多相关文章

  1. 双目深度估计传统算法流程及OpenCV的编译注意事项

    起因: 1. 双目立体视觉中双目深度估计是非常重要且基础的部分,而传统的立体视觉的算法基本上都在opencv中有相对优秀的实现.同时考虑了性能和效率.因此,学习使用opencv接口是非常重要的. 2. ...

  2. 深度学习(一)——CNN算法流程

    深度学习(一)——CNN(卷积神经网络)算法流程 参考:http://dataunion.org/11692.html 0 引言 20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感 ...

  3. Adaboost算法流程及示例

    1. Boosting提升方法(源自统计学习方法) 提升方法是一种常用的统计学习方法,应用十分广泛且有效.在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的 ...

  4. Zbar算法流程介绍

    博客转载自:https://blog.csdn.net/sunflower_boy/article/details/50783179 zbar算法是现在网上开源的条形码,二维码检测算法,算法可识别大部 ...

  5. PBFT && RBFT算法流程

    PBFT && RBFT算法流程以及其实现(上) 这篇文章主要是讲一下RBFT中共识算法流程以及节点的加入的流程.在下一篇博客中,将使用Java实现该算法. 传统的PBFT算法无法动态 ...

  6. AI系统——机器学习和深度学习算法流程

    终于考上人工智能的研究僧啦,不知道机器学习和深度学习有啥区别,感觉一切都是深度学习 挖槽,听说学长已经调了10个月的参数准备发有2000亿参数的T9开天霹雳模型,我要调参发T10准备拿个Best Pa ...

  7. SSL/TLS算法流程解析

    SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住.本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获. 一.相关版本 Version Source Description ...

  8. [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.

    给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...

  9. Python多继承解析顺序的C3线性算法流程解析

    Python多继承MRO 在Python2.1中,采用了经典类,使用深度优先算法解析. Python2.2中,引入了新式类,使用深度优先算法和广度优先算法. 在Python2.3以后的版本中,经典类和 ...

随机推荐

  1. 新课程网上选课系统V1.0—适用于中小学校本课程选课、选修课选课

    学校要开设选修课,人工选课实施了两年,耗时耗力,于是打算用网上选课,在网上搜索了一番,没多少实用的,有一个网上用的比较多的,功能太简单了,于是打算自己开发一个,功能参考了部分学校的功能,也有基于Aja ...

  2. SessionFactory 执行原生态的SQL语句

    public List<User> getPageIndex(int pageIndex,int topNum){ String hql = "select top(" ...

  3. os.walk() 目录生成器

    目录生成器 Directory tree generator.! walk() 是 generator,直接print() 为  <generator object walk at 0x0000 ...

  4. Java list对象列表排序 实例

    package com.test; public class Bean { private String name; private int priority; public String getNa ...

  5. 有关Linux下request.getRealPath("/")获取路径的问题

    request.getRealPath("/") 在window获取的是服务器的根目录,结尾包含分隔符, 如E:\apache-tomcat-6.0.29-bak\apache-t ...

  6. IT? 挨踢

    中国的IT,是最憋屈的IT. 他们掌握着正常人看不懂的英文+字母+标点符号组成的各类代码语言 他们像作者一样从无到有,从空白的白纸上敲出上千上万条华丽的计算机语言 但是他们承受着正常人的鄙视: 我的需 ...

  7. IIS7 配置 PHP5.6

    环境: 操作系统:Win7 & 10 (x64) 中文专业版 PHP       :V5.6 首先添加IIS. 控制面板-〉程序-〉打开或关闭Windows功能 1. 勾选"Inte ...

  8. argparse - 命令行选项与参数解析

    argparse模块作为optparse的一个替代被添加到Python2.7.argparse的实现支持一些不易于添加到optparse以及要求向后不兼容API变化的特性,因此以一个新模块添加到标准库 ...

  9. linux每日命令(21):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. 一. exec参数说明: -exec 参数后面跟的是com ...

  10. python中的列表、元组、数组——是不是特别容易混淆啊??

    列表: 1. 即list, 是python内置的数据类型.  它的形式是: a = [1, 2, 3, 4, 5] 2. 列表内的值是可以改变的:  即可以这样子: a[0] = 100,  把列表的 ...