IMU校正以及姿态融合[通俗易懂]

版权声明:本文为博主原创文章,未经博主允许不得转载。博主:shenshikexmu联系方式:shenshikexmu@163.com缘起有缘在简极科技兼职两年。接触了IMU,我去的时候那家公司还是一个要把IMU放进足球的公司,祝愿简极越来越好。IMU校正算法大概是接触传感器三个月做出来的,博客IMU加速度、磁力计校正--椭球拟合的内容,那时只是把校准问题当作椭球拟合问题。融合算法大…

大家好,又见面了,我是你们的朋友全栈君。

本文为博主“声时刻”原创文章,未经博主允许不得转载。
联系方式:shenshikexmu@163.com

缘起
有缘在简极科技兼职两年。接触了IMU,我去的时候那家公司还是一个要把IMU放进足球的公司,祝愿简极越来越好。IMU校正算法大概是接触传感器三个月做出来的,博客IMU加速度、磁力计校正--椭球拟合的内容,那时只是把校准问题当作椭球拟合问题。融合算法大概是接触IMU一年做出来的,中途学习了kalman滤波。在安卓上的实时算法一年半完成,视频
IMUCalibration-Gesture换了一个更好的校正算法,滤波算法不变。愿和大家一起学习并讨论。有些朋友邮件上问我问题,真的给我很大的鼓励。
2021年4月,我自己的论文TII《Low-cost IMU Calibration with Nonlinear Scale Factors》

校正
这边有一篇讲IMU误差的很好的博客,直接引用了,IMU误差模型和校准。也是在《A Robust and Easy to implement method for imu calibration without External Equipments》框架下解释误差的。
这里写图片描述
图源于IMU误差模型和校准
加速度
参照ICRA2014论文:《A Robust and Easy to implement method for imu calibration without External Equipments》
说明
摘数据的部分我没有按照ICRA2014的算法写,而是自己写了FindFixData这样一个函数。ICRA2014的摘数据的算法我也拿matlab写了一遍,算方差实在是太花时间了(可能我的那个算法需要优化),FindFixData算法轻便一些,就是要人为的设置参数,ICRA2014不需要人为设置参数。摘出的稳定数据校正角速度参数和磁力计参数,摘出的运动的数据用来校正角速度传感器。
角速度
参照ICRA2014论文:《A Robust and Easy to implement method for im calibration without External Equipments》
磁力计
算法1:mag2acc_matrix,假设重力与磁向量的夹角不变。

算法2:Cal_mag4acc_frame,利用不同姿态下传感器感受的磁通向量的变化与姿态变化的相关性,计算参数。

说明
算法中的校正传感器为MPU9250,这个传感器的加速度坐标系与磁力计坐标系的z轴反向。在校正时,把变换矩阵的 T 33 T_{33} T33位置设为-1,如果其他传感器z轴相同, T 33 T_{33} T33设为1.

这里写图片描述
MPU9250
T m 2 a = [ T 11 T 12 T 13 T 21 T 22 T 23 T 31 T 32 − 1 ] Tm2a=\begin{bmatrix} T_{11} & T_{12} &T_{13} \\T_{21} & T_{22}&T_{23} \\T_{31} &T_{32}&-1\end{bmatrix} Tm2a=T11T21T31T12T22T32T13T231

其他,是1还是-1,这个要看传感器资料了 。
T m 2 a = [ T 11 T 12 T 13 T 21 T 22 T 23 T 31 T 32 1 ] Tm2a=\begin{bmatrix}T_{11} & T_{12} &T_{13} \\T_{21} & T_{22}&T_{23} \\T_{31} &T_{32}&1\end{bmatrix} Tm2a=T11T21T31T12T22T32T13T231
参数
c a l a c c = T a ∗ K a ∗ ( r a w a c c + B a ) cal_{acc}=Ta*Ka*(raw_{acc}+Ba) calacc=TaKa(rawacc+Ba)
c a l g y r o = T g ∗ K g ∗ ( r a w g y r o + B g ) cal_{gyro}=Tg*Kg*(raw_{gyro}+Bg) calgyro=TgKg(rawgyro+Bg)
c a l m a g = T m 2 a ∗ ( r a w m a g + B m ) cal_{mag}=Tm2a*(raw_{mag}+Bm) calmag=Tm2a(rawmag+Bm)

LM算法

增加了我自己写的Levenberg-Marquardt算法,matlab自带的lsqnonlin函数被注释,可以选择注释我手写的LM算法,选择取消注释lsqnonlin函数。

姿态
Mahony filter
参考 《Nonlinear Complementery Filters on the Special Orthogonal Group》
受启发于 http://blog.csdn.net/luoshi006/article/details/51513580
EKF
参考 《A Double-Stage Kalman Filter for Orientation Tracking with an Integrated Processor in 9-D IMU》

High Low pass
Gyro进行高通滤波器,Accelerate & Magnetic进行低通滤波。

滤波结果
滤波结果
校正与融合

imuCalibration-Gesture

开源代码
具体请参考github开源代码:IMUCalibration-Gesture.

如果您觉得此文对您所要做的工作有帮助,欢迎在github上标星星。

欢迎在“知识星球”更深入地探讨问题。

知识星球


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125502.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 《欲罢不能:刷屏时代如何摆脱行为上瘾》书摘

    《欲罢不能:刷屏时代如何摆脱行为上瘾》书摘!!!此书大大提高我对这个信息时代的认知,也理解了为什么过去对一些事情那么沉迷。一开始书讲一些物质上瘾,确实不太好看,但是往下看你会感到惊讶。这个信息时代给了我们这代人,太多了获得感,并非获得。这是我最大的感受。然后。具体讲什么内容,谁看谁知道。

  • Linux内核的整体架构简介

    Linux内核的整体架构简介1.前言本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。注:本文和其它的“Linux内核分析”文章都基于如下约定:  a)内核版本为Linux3.10.29(该版本是一个longterm的版本,会被Linux社区持续维

  • Python 图像处理_图像处理的一般步骤

    Python 图像处理_图像处理的一般步骤Python图像处理基础对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Python的图像处理较之matlab相对复杂(应该只是代码量的问题),但我依然觉得学习python环境比较实用和高效。在进行Python图像处理之前,Pillow是不可或缺的实用性工具,pillow是Py

    2022年10月14日
  • list转有序map「建议收藏」

    list转有序map「建议收藏」publicstatic<KextendsComparable<?superK>,V>Map<K,V>sortByKey(Map<K,V>map){ Map<K,V>result=newLinkedHashMap<>(); map.entrySet().stream() .sorted(Map.Entry.<K,V>c..

  • 个人微信api接口调用代码[通俗易懂]

    个人微信api接口调用代码[通俗易懂]个人微信api接口1、微信好友收发消息/***给微信好友发消息*@authorwechatno:tangjinjinwx*@bloghttp://www.wlkankan.cn*/@AsyncpublicvoidhandleMsg(ChannelHandlerContextctx,TransportMessagevo,StringcontentJsonStr){try{…

  • 计算机定时关机命令,电脑定时关机怎么设置_电脑定时关机命令

    计算机定时关机命令,电脑定时关机怎么设置_电脑定时关机命令标签:电脑(142)命令(11)电脑系统WindowsXP第一种:电脑定时关机怎么设置的步骤是这样的:例如,要使电脑在23:00的时候定时自动关机,单击“开始”-“运行”命令,在打开的“运行”对话框中输入at23:00shutdown-s,单击”确定”按钮关闭“运行”对话框即可。这样,您就可以在23:00点时电脑就会弹出“系统关机”对话框,默认30秒钟倒计时并提示保存工作。(当你不想它运行…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号