当前位置: 首页 > news >正文

imu_tk阅读笔记

1. imu_tk简介

imu_tk是一款开源的面向消费级imu的无基准标定软件,不需要转台设备,即可以实现acc/gyr bias、scale和misalignment的标定。标定原理参考文献[1]。

2. 程序框架

2.1 文件读取

读取acc和gyr的数据(如果自己的acc和gyr数据在文件中需要改一下)。

void importAsciiData( const char *filename,std::vector< TriadData_<_T> > &samples, TimestampUnit unit = TIMESTAMP_UNIT_USEC,DatasetType type = DATASET_SPACE_SEPARATED ); 

通过unit将数据中的时间戳转化成秒,所以需要根据自己的数据具体调整。

2.2 参数配置

// 配置加计零偏和陀螺刻度因子 (将文件中acc和gyr转成已m/s^2和rad/s为单位)
CalibratedTriad init_acc_calib, init_gyro_calib;
init_acc_calib.setBias( Vector3d(32768, 32768, 32768) );
init_gyro_calib.setScale(Vector3d(1.0/6258.0, 1.0/6258.0, 1.0/6258.0));MultiPosCalibration mp_calib;
// 设置静态数据时间长度,默认是在数据最前段取,也可以自己手动改成在数据最后段取(程序中已实现)
mp_calib.setInitStaticIntervalDuration(50.0);
mp_calib.setInitAccCalibration( init_acc_calib );
mp_calib.setInitGyroCalibration( init_gyro_calib );  
// 设置当地重力,用来acc标校(最好用重力模型计算一个较准确的当地重力值)
mp_calib.setGravityMagnitude(9.81744);
mp_calib.enableVerboseOutput(true);
mp_calib.enableAccUseMeans(false);
//mp_calib.setGyroDataPeriod(0.01);
// 标校程序主函数
mp_calib.calibrateAccGyro(acc_data, gyro_data );	
// 输出acc和gyr的标校结果,acc和gyr标定的结果文件被保存在程序运行路径下
mp_calib.getAccCalib().save("test_imu_acc.calib");
mp_calib.getGyroCalib().save("test_imu_gyro.calib");

2.2 静态识别

根据配置静态数据时长(mp_calib.setInitStaticIntervalDuration(50.0))取数据最前段(static DataInterval initialInterval( const std::vector<TriadData_<_T> > &samples, _T duration ))或最后段(static DataInterval finalInterval( const std::vector< TriadData_<_T>> &samples, _T duration ))的数据,计算静态数据的方差norm_th,通过th_mult*norm_th对数据进行静态判别。

2.3 acc标定

然后用判别出的静态数据及当地重力对acc进行标校,对比th_mult取不同值对应的标校残差大小,选残差最小的th_mult*norm_th作为静态判别指标。

bool MultiPosCalibration_<_T>::calibrateAcc ( const std::vector<TriadData_<_T> >& acc_samples )

\[\boldsymbol{g= \left\| f^b\right\|^2} \]

2.4 gyr标定

最后用标校后的acc数据矢量标校gyr。大致原理:g_versor_pos1 = Cbb * g_versor_pos0,g_versor_pos0和g_versor_pos1为相邻acc静态数据,Cbb为g_versor_pos0和g_versor_pos1中间动态段imu的姿态变化(用动态段gyr求得)。

bool MultiPosCalibration_<_T>::calibrateAccGyro ( const vector< TriadData_<_T> >& acc_samples, const vector< TriadData_<_T> >& gyro_samples )

\[\boldsymbol{f^{b_1}=C_{b_2}^{b_1}f^{b_2}} \]

所以,测试数据需要静止一会儿,动一下(变化一下姿态),静止一会儿,动一下(变化一下姿态),以此重复。文献[1]中指出至少需要9个不同的姿态,最好动36-50次。

程序与文献[1]的区别是bias补偿的正负号不一致,程序中补偿模型:

\[\boldsymbol{imu^o=TK(imu^S - b)} \]

参考文献

[1] D. Tedaldi, A. Pretto and E. Menegatti, “A Robust and Easy to Implement Method for IMU Calibration without External Equipments”. In: Proceedings of the IEEE International Conference on Robotics and Automation (ICRA 2014), May 31 - June 7, 2014 Hong Kong, China, Page(s): 3042 - 3049.

http://www.jsqmd.com/news/44574/

相关文章:

  • 在.NET 中,bindingRedirect(程序集绑定重定向)和codeBase(程序集位置指定)是两种解决程序集加载问题的机制
  • Docker 安装 Oracle 11g
  • 深入解析:15、Electron专题:使用 electron-store 进行本地数据存储
  • 2025年燃气报警器制造企业权威推荐榜单:一氧化碳报警器/烟雾报警器/燃气泄漏报警器源头厂家精选
  • linux dns重启
  • ICPC2025沈阳 游记
  • 推荐北京起诉离婚律师:专业团队助力婚姻纠纷妥善处理
  • AVLT
  • 推荐东城区婚姻律师:专业团队助力化解婚姻家庭难题
  • 一线操作工也能管能耗?MyEMS 的 “傻瓜式仪表盘”,把专业数据变成 “大白话”
  • 有哪些北京知名家事律师?专业领域服务解析
  • 数形结构转换工具类
  • Topic
  • 2025年【口碑好的/比较好的/靠谱的】工业级/国产化/变电站/变电站/电力/机房/光伏/远动/发电厂/工业级/嵌入式机柜/通讯管理机【公司/工厂/厂家】推荐/排行榜 哪家好/强/靠谱
  • 配置Jenkins代理节点的过程,将代理节点注册为服务
  • linux dns修改
  • linux dns 服务器 搭建
  • linux dmesg
  • 实用指南:Vue2 与 Vue3 父子组件参数传递全解析:从实例到原理
  • ES6(ECMAScript 2015)功能介绍,运用场景,对应机制点完整采用示例
  • 11.19_刷题有感
  • web框架——flask-1
  • 2025 年 11 月自动裁床厂家推荐排行榜,服装自动裁床,皮革自动裁床,工业自动裁床,智能数控自动裁床公司精选
  • AI眼镜外包团队:Rokid Glasses默认接入了通义大模型
  • 双指针的“适用边界”:从直方图最大矩形错误,看透三大经典问题的本质差异
  • SketchUp 坯子库插件从下载到使用全流程教程
  • webrtc弱网-AcknowledgedBitrateEstimatorInterface类源码分析与算法原理 - 详解
  • 注意力富集与女性优势
  • linux disable
  • linux dia