MPU6050详细介绍
一、MPU6050介绍
MPU6050是由三个陀螺仪和三个加速度传感器组成的6轴运动处理组件
内部主要结构:陀螺仪、加速度计、数字运动处理器DMP(Digital Motion Processor)
MPU6050有两个IIC接口,第一IIC接口可作为主接口给单片机传输数据;第二IIC接口用于连接一个第三方数字传感器(如外部磁力传感器等),然后通过这个IIC接口输出完整的9轴信号,否则只有6轴。
那么三轴、六轴、九轴传感器,这些传感器指的什么?其中到底又有哪些区别呢?
实际上,只要说到多少轴的传感器一般是就是指加速度传感器(即加速计)、角速度传感器(即陀螺仪)、磁感应传感器(即电子罗盘)。这三类传感器测量的数据在空间坐标系中都可以被分解为X,Y,Z三个方向轴的力,因此也常常被称为3轴加速度计、3轴陀螺仪、3轴磁力计。
上面3类传感器有其各自的功能特点及应用,比如加速计可以测量设备的测斜情况,陀螺仪可以测量设备自身的旋转运动,还有磁力计可以定位设备的方位。通过它们相互组合和匹配融合又可以衍生出更多的不同应用,在叫法上通过这样简单的轴数上相加的可以变成六轴传感器或者九轴传感器。
六轴传感器:通常指的是三轴加速度计+三轴陀螺仪,三轴加速器是检测横向加速的,三轴陀螺仪是检测角度旋转和平衡的,可以用在体感游戏上。
九轴传感器:就是三轴加速度计+三轴陀螺仪+三轴磁强计的组合,在飞行器上是广泛应用的。 另外,在九轴传感器基础上在加入气压传感器,从而能获取海拔高度的数据,也有人把这些传感器组合称为十轴传感器。
二、MPU6050引脚说明

1、SCL、SDA:是连接MCU的IIC接口,MCU通过这个IIC接口来控制MPU6050,此时MPU6050作为一个IIC从机设备,接单片机的I2C_SCL。
2、XCL、XDA:辅助IIC用来连接其他器件,可用来连接外部从设备,比如磁传感器,这样就可以组成一个九轴传感器,不需要连接单片机。(并不常用)
3、AD0:地址管脚,可以不接单片机。当MPU6050作为一个IIC从机设备的时候,有8位地址,高7位的地址是固定的,就是WHOAMI寄存器的默认——0x68,最低的一位是由AD0的连线决定的。
AD0接GND时,高8位的最后一位是0,所以iic从机地址是0x68;
AD0接VCC时,高8位的最后一位是1,所以iic从机地址是0x69。
4、INT:数据输出的中断引脚,可以不接单片机,准备好数据之后,通过中断告诉STM32,从而获取数据。
5、VCC:接3.3V或5V电源,GND:接地
三、MPU6050工作原理
通过MPU6050读取加速度和角度的原始数据,数据管理平台(DMP)将原始角速度转化为四元数,进而完成欧拉角的计算。
MPU6050自带数字运动处理器(DMP),通过主IIC接口,可以向CPU提供四元数,CPU可利用四元数得到欧拉角。
MPU6050含有一个第二IIC接口,可用于连接外部磁力传感器;
角速感测范围±250、±500、±1000与±2000°/sec
四元数是什么?
四元数就是简单的超复数,由实数加上三个虚数单位 i、j和k 组成,
就是形如a + bi+ cj + dk的数,其中a、b、c 、d是实数,
i2 = j2 = k2 = -1, io = jo = ko = 1 。
对于i、j和k本身的几何意义可以理解为一种旋转,其中
i 旋转代表Z轴与Y轴相交平面中Z轴正向向Y轴正向的旋转,
j 旋转代表X轴与Z轴相交平面中X轴正向向Z轴正向的旋转,
k旋转代表Y轴与X轴相交平面中Y轴正向向X轴正向的旋转,
-i、-j、-k分别代表i、j、k旋转的反向旋转。
欧拉角(ψ,θ,φ)
用来确定定点转动刚体位置的3个一组独立角参量,由章动角θ、旋进角(即进动角)ψ和自转角φ组成。简单来说,欧拉角就是物体绕坐标系三个坐标轴(x,y,z)的旋转角度。
以航空次序欧拉角为例,简单理解欧拉角的三个参量:
ψ 通常代表方向或偏航(heading or yaw)
θ 通常代表升降或俯仰(elevation or pitch)
φ 通常代表倾斜或横滚(bank or roll)
姿态角
什么是姿态角(Euler角) pitch yaw roll
陀螺仪是测角速度的,加速度传感器是测角加速度的,二者数据通过算法就可以得到航向角(yaw) 横滚角(roll) 俯仰角(pitch)了,单位均为度。
姿态角和欧拉角区别
对于旋转问题,欧拉角指的是绕某个轴旋转的角度,姿态角指的是载体系与导航系之间的关系。
滚转角是z轴与通过x轴的铅锤面的夹角,
航向角是x轴投影到水平面与导航系的夹角
俯仰角则是x轴与水平面的夹角。
虽然姿态角与欧拉角概念不同,但由于导航系到载体系旋转矩阵的旋转顺序是ZYX(NED坐标系),所以滚转角,航向角,俯仰角可以等价于欧拉角。姿态角可以说是其中一对特殊的欧拉角。
代码实现姿态角
#include "stm32f1xx_hal.h"
#include "MPU6050.h" // 确保你已经包含了适用于STM32的MPU6050库MPU6050 mpu6050(I2C_ADDRESS_AD0_LOW); // 使用正确的I2C地址void SystemClock_Config(void);
void MX_I2C1_Init(void);
void MPU6050_Init(void);int main(void) {HAL_Init();SystemClock_Config();MX_I2C1_Init();MPU6050_Init(); // 初始化MPU6050if (!mpu6050.testConnection()) {// 传感器连接失败的处理while (1);}while (1) {int16_t ax, ay, az, gx, gy, gz;mpu6050.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);float accX = ax * MPU6050_SENSITIVITY_16G / 32768.0f;float accY = ay * MPU6050_SENSITIVITY_16G / 32768.0f;float accZ = az * MPU6050_SENSITIVITY_16G / 32768.0f;float gyroX = gx * MPU6050_SENSITIVITY_2000DPS / 32768.0f;float gyroY = gy * MPU6050_SENSITIVITY_2000DPS / 32768.0f;float gyroZ = gz * MPU6050_SENSITIVITY_2000DPS / 32768.0f;// 计算姿态角,这里使用简单的数学转换作为示例float pitch = atan(accY / sqrt(accX * accX + accZ * accZ)) * (180.0f / M_PI);float roll = atan(accX / sqrt(accY * accY + accZ * accZ)) * (180.0f / M_PI);float yaw = atan2(gy, gz) * (180.0f / M_PI); // 简单的yaw计算,可能需要更复杂的滤波// 输出姿态角printf("Pitch: %f, Roll: %f, Yaw: %f\r\n", pitch, roll, yaw);HAL_Delay(100); // 简单的时间延迟}
}
int16_t ax, ay, az, gx, gy, gz;这些是16位整数变量,用于存储从MPU-6050读取的原始加速度计和陀螺仪数据。
getMotion6函数从MPU-6050读取六个值:X轴加速度(ax)、Y轴加速度(ay)、Z轴加速度(az)、X轴角速度(gx)、Y轴角速度(gy)和Z轴角速度(gz)。

这些行将原始加速度计数据转换为实际的加速度值(单位:g,1g ≈ 9.81 m/s²)。MPU6050_SENSITIVITY_16G是加速度计的灵敏度因子,32768.0f是16位整数的最大值(即2^15)。
同理,下面一行,将原始陀螺仪数据转换为实际的角速度值(单位:度/秒)。MPU6050_SENSITIVITY_2000DPS是陀螺仪的灵敏度因子。

俯仰角是通过解算加速度计在Y轴上的分量与X轴和Z轴分量的平方和的平方根的比值得到的。atan函数返回的是弧度值,通过乘以(180.0f / M_PI)转换为度。

横滚角是通过解算加速度计在X轴上的分量与Y轴和Z轴分量的平方和的平方根的比值得到的。
![]()
偏航角通常更复杂,因为它可能受到加速度计和陀螺仪数据的共同影响。这里的简化版本仅使用陀螺仪的Y轴和Z轴数据,atan2函数返回正确的象限角度,然后转换为度。
这些计算提供了一个基本的姿态估计,但可能不够稳定或准确,特别是在存在噪声和传感器误差的情况下。在实际应用中,通常会使用更高级的滤波算法(如卡尔曼滤波器、马德威克算法或非线性观测器)来提高姿态估计的准确性和稳定性。
相关文章:
MPU6050详细介绍
一、MPU6050介绍 MPU6050是由三个陀螺仪和三个加速度传感器组成的6轴运动处理组件 内部主要结构:陀螺仪、加速度计、数字运动处理器DMP(Digital Motion Processor) MPU6050有两个IIC接口,第一IIC接口可作为主接口给单片机传输数…...
【分享】Excel的3个隐藏功能
我们在制作Excel表格的时候,有时候会包含一些敏感信息,为了确保这些数据的安全性,Excel提供了隐藏功能来保护工作表,下面小编分享3个Excel常用的隐藏功能,一起来看看如何设置吧! 功能一:隐藏部分…...
Linux中的chown指令
chown(change owner)命令在 Linux 和其他类 Unix 系统中用于更改文件或目录的用户和/或组所有权。 基本用法 chown [选项] 用户名[:组名] 文件或目录 参数说明 用户名:指定新的文件或目录的所有者 组名:可选,指定新…...
UCOSIII内存管理机制详解
目录 前言 1. 内存管理概述 2. 内存区域(存储区)和内存块 3. 存储区控制块(OS_MEM) 4. 内存管理函数 5. 内存碎片问题 6. 注意事项 7.代码实现 7.1创建内存区域 7.2申请内存 7.3释放内存 前言 UCOSIII(即Mi…...
Android12 显示框架之Transaction----client端
目录:Android显示终极宝典 在前面的章节中,应用通过createSurface()在surfaceflinger中创建了一层layer,紧接着要做的事情就是对这个layer设置一些属性(或者叫状态),常设置的属性有位置、大小、z-order等等…...
在Windows上使用FRP搭建内网穿透:
FRP服务器端配置(公网服务器) 下载FRP: 访问FRP的GitHub发布页面:https://github.com/fatedier/frp/releases下载对应系统架构的frp_<version>_linux_amd64.tar.gz(如果你的服务器是Linux系统)或者f…...
TypeError: Cannot read properties of undefined (reading ‘scrollIntoView‘)(已解决)
问题复现:眨眼睛使用vitevue3实现跳转dom功能时使用了scrollIntoView方法,在打包上传以后使用该功能报错 小友可能会陷入误区,以为是函数方法有问题,毕竟在开发时是没有问题的, 而实际上呢问题出在获取节点失败了 在这…...
【解决】Unity Inspector 视窗脚本中文乱码问题
开发平台:Unity 2020 编程平台:Visual Studio 2022 问题描述 开发过程中,为便利化快速审阅代码内容,通过 Unity Inspector 确认代码内容与逻辑。但对于默认安装的 Visual Studio 编程平台,保存的 UTF- 8 脚本文件在…...
使用 C/C++访问 MySQL
目录 准备工作 尝试链接 MySQL Client MySQL 接口介绍 准备工作 保证 MySQL 服务有效。下载MySQL开发包(可以在MySQL官网下载安装也可以在软件源安装) MySQL 开发包通常会包含一些特定的头文件和库文件。您可以检查以下常见的路径: /us…...
Linux 网络套接字解析:实现网络通信
目录 一.网络基础1.协议2.OSI与TCP/IP模型3.网络通信流程4.IP与Mac地址 二.网络编程套接字1.端口号2.网络字节序3.tcp、udp协议4.socket编程5.sockaddr结构解析6.实现Udp_socket7.实现Windows与Linux通信8.Linux下远程执行指令9.实现tcp_socket10.守护进程 一.网络基础 1.协议…...
vue3 组合式API
<!-- 深度监听 deep 点击按钮控制台,才输出count变化了: 1, 老值: 0;否则控制台不输出 --> <script setup>import { ref,watch } from vueconst state ref({count:0})const setCount () > {state.count.value}watch(state, () > {console.log(…...
二、什么是Vue中的响应式?Vue的响应式原理
什么是Vue中的响应式 Vue中的响应式,简而言之就是当数据发生变化时,页面跟随变化。使用过Vue的v-model都有比较深刻的感受,我们在代码中修改双向绑定的数据后,页面上的数据也会自动更新,页面跟随变化 我们看个例子&am…...
快9月了才开始强化,跟张宇还是武忠祥?
快9月了才开始强化,跟张宇还是武忠祥! 说真的,我也替这位同学着急,但是考研数学越是进度慢,就越不能急!急着赶进度,容易出事!遇到这个问题的朋友肯定不止一位,那我就帮大…...
SSM好易学学习平台---附源码92142
摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设好易学学习平台。本文…...
对于mp4 ios和mac safari不能播放问题处理
直接对原mp4文件进行重新转码就可以了 ffmpeg -i origin.mp4 -vcodec h264 -profile:v high -level 4.1 orgin_hl.mp4 原因源文件不符合苹果基本规则 苹果官网文档...
开发同城交友找搭子系统app前景分析
开发同城交友系统APP的背景 社交需求多样化: 随着城市化的加速和人们生活节奏的加快,现代人的社交圈子往往较为狭窄,难以结识新朋友。传统的线下交友方式受限于时间、地点等因素,难以满足现代人对于交友的多样化需求。互联网和智…...
faiss向量数据库测试《三体》全集,这家国产AI加速卡,把性能提了7倍!
在人工智能和机器学习技术的飞速发展中,向量数据库在处理高维数据方面扮演着日益重要的角色。近年来,随着大型模型的流行,向量数据库技术也得到了进一步的发展和完善。 向量数据库为大型模型提供了一个高效的数据管理和检索平台,…...
负载均衡---相关概念介绍(一)
负载均衡(Load Balance)是集群技术的一种重要应用,旨在将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,从而提高系统的并发处理能力、增加吞吐量、加强网络处理能力,并提供故障转移以…...
计算机基础知识复习8.14
子线程抛异常主线程能否catch 在不做任何处理的情况下,主线程不能catch 解决方式: 子线程使用try catch来捕获异常 为线程设置未捕获异常处理器UncaughtExceptionHandler 通过future的get方法捕获异常 JVM相关参数 显示指定堆内存-Xms和-Xmx指定最…...
【io深层理解】
io深层理解 1.内核态2.用户态3. select IO多路复用执行原理4. select io多路复用限制和不足 1.内核态 一个进程会涉及多文件的修改,比如说。那么在内核态就会维护一个表,这个表叫文件描述符bitmap,这个表会传递给内核态,当然肯定传…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
在Zenodo下载文件 用到googlecolab googledrive
方法:Figshare/Zenodo上的数据/文件下载不下来?尝试利用Google Colab :https://zhuanlan.zhihu.com/p/1898503078782674027 参考: 通过Colab&谷歌云下载Figshare数据,超级实用!!࿰…...
