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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/Yangquot/article/details/118390733
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/371661

相关文章

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

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

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C