MPU9250调试。做姿态、指南针(融合磁力计计算Yaw)

2023-11-08 18:20

本文主要是介绍MPU9250调试。做姿态、指南针(融合磁力计计算Yaw),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

底部 附工程源码链接

--2022-10-5

===================

近期调了一个姿态传感器,使用了MPU9250,主要是算法库不太好找,自己写是不太可能的,欧拉角、四元素计算反正我是没看懂,也贪图快,想一步到位调出来。

硬件工程师使用了IIC接口。

1. 最早调试使用了官方提供的mpl例程,移植完后俯仰和翻滚都没有问题,主要是YAW 方向角,每次芯片重启Yaw都是0,转动芯片吧这个值也变,就是置0不大对,毕竟9250是9轴有磁力计,每次重启计算出来的YAW应该和重启前一至是正北的角度偏移才对。

2. 后来翻了下mpl文档,发现需要对磁力计8字校准,mpl才会把磁力计融合进Yaw,否者Yaw是6轴融合的结果。试了下8字校准,不知道是不是环境内磁场干扰的关系,特别难校准,校准后的确融合了磁力计,得到了理想的Yaw。不过似乎这个校准值可以被存储下来,再次启动时传给mpl继续使用。我没有实现,因为产品需要,我想找一个校准简便的方式,但是这样一来mpl库就无法使用了。

3. 开始了漫长的找库过程,主要是找能够融合磁力计的计算方法,搜遍了大小论坛,基本上就是copy的mpl库。特别是某莫,交了几百块钱,反正没翻到有价值的东西,后来听说还改版了,钱也打了水漂,这都是后话了。

4. 在git找到了救命稻草。

GitHub - kriswiner/MPU9250: Arduino sketches for MPU9250 9DoF with AHRS sensor fusion

移植了这个例程,主要还是免费的,开源就是伟大。

例程比较简洁,开始会先进行校准,陀螺仪、重力。磁力计校准没有细看,这里换了自己的校准方式。

我的磁力计的校准思路是 :校准时进行三个轴面采样,每个轴面校准两个磁力计轴向。比如水平面采集X Y;每个平面划分成4个象限(要求高可以分为8个),判断每个象限采集足够的点之后判定为采集完成。采集过程记录点的最大值和最小值即可找到中心点。中心点值即为磁力计补偿值。

关于象限的判断,比如水平面采样,Z不使用。计算方法:atan2(X,Y)/(2*acos(-1))*360 方位角转度数,进而判断象限。校准完这些值可以做个结构体写flash,下次还用它。

最后

例程似乎有个bug,在选择坐标系时磁力计的坐标系与其他6轴不能吻合,也不符合右手定理。

当时把磁力计的Z轴反转了下,没有使用例程。计算的Yaw比较稳定,方向和手机磁力计大致相同。

使用的坐标系:

原例程磁力计是mag[1] mag[0] mag[2]。

这个库还算稳定,Yaw有小范围漂移,漂到一定范围自己修正。对比官方的mpl计算值的确差点,不过自己产品对Yaw要求不是特别高,区分东西南北绰绰有余。

在git评论区看到有同样疑问,作者还没有回复,或许是个bug。

附件:

https://download.csdn.net/download/Yangquot/86735853

代码入口mpu_9250_9axis,先初始化再进行计算。磁力计校验后存了下flash,校验时是按区域采点数做判断。

==========================>

同时自己做了一套最小系统评估板,宝上淘了几次9250发现都是翻新的,磁力计无法读取到;后面采购了些原装9250做了一套最小系统。并且基于STM32F103调试了一个简易的、可视化的磁力计校准方法。

评估板实测:

“简易式”磁力计校准:

在要求轴面转动,软件采集平面上8个区间上的点。并以“可视化”方式显示8个区间采集进度。

mpu9250

淘链接:

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d293d0dnCTcxQ&ft=t&id=735135647199

<<END

这篇关于MPU9250调试。做姿态、指南针(融合磁力计计算Yaw)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/371661

相关文章

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,