六轴传感器基础知识学习:MPU6050特性,四元数,姿态解算,卡尔曼滤波

news/2024/5/17 5:56:01/文章来源:https://blog.csdn.net/weixin_44788542/article/details/129328712

实际上,只要说到多少轴的传感器一般是就是指加速度传感器(即加速计)、角速度传感器(即陀螺仪)、磁感应传感器(即电子罗盘)。这三类传感器测量的数据在空间坐标系中都可以被分解为X,Y,Z三个方向轴的力,因此也常常被称为3轴加速度计、3轴陀螺仪、3轴磁力计。

上面3类传感器有其各自的功能特点及应用,比如加速度计可以测量设备的测斜情况,陀螺仪可以测量设备自身的旋转运动,还有磁力计可以定位设备的方位。通过它们相互组合和匹配融合又可以衍生出更多的不同应用,在叫法上通过这样简单的轴数上相加的可以变成六轴传感器或者九轴传感器。
六轴传感器:通常指的是三轴加速度计+三轴陀螺仪,三轴加速度计是检测横向加速的,三轴陀螺仪是检测角度旋转和平衡的,可以用在体感游戏上。
九轴传感器:就是三轴加速度计+三轴陀螺仪+三轴磁强计的组合,在飞行器上是广泛应用的。另外,在九轴传感器基础上在加入气压传感器,从而能获取海拔高度的数据,也有人把这些传感器组合称为十轴传感器。

认识MPU6050

MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件。下面以这个芯片为例分析六轴传感器相关的知识点,其他的三轴或六轴传感器很多特性都是与之类似的。

某MPU6050模块:
在这里插入图片描述

MPU6050芯片的检测轴和方向:
在这里插入图片描述
图示向右为 X 轴正方向,向前为 Y 轴正方向,垂直模块向上为 Z 轴正方向。

旋转的方向按右手法则定义,即右手大拇指指向轴向,四指弯曲的方向即为绕该轴旋转的方向。
X 轴角度(滚转角 Roll)即为绕 X 轴旋转方向的角度,
Y 轴角度(俯仰角 Pitch)即为绕 Y 轴旋转方向的角度,
Z 轴角度(偏航角 Yaw)即为绕 Z 轴旋转方向的角度,
三者合称姿态角/欧拉角(Euler angles)。

滚转角、俯仰角、偏航角通过一架飞机的运动形态就容易理解为啥这样命名了。
在这里插入图片描述

  • 偏航角Yaw:绕Z轴转动(机头水平转)
    在这里插入图片描述

  • 俯仰角Pitch:绕Y轴转动(飞机上下抬头)

在这里插入图片描述

  • 横滚角Roll:绕X轴转动(飞机左右翻滚)

在这里插入图片描述

根据上面的信息我们应该要意识到:在项目中应用六轴传感器时,需要注意芯片的放置方向与整机前进方向的关系,否则将对软件解读运动状态造成麻烦。

下面我把 MPU6050 的有代表性的几个特性摘出来了:
1.以数字形式输出 6 轴或 9 轴(需外接磁传感器)(通过XCL、XDA进行通信)的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据(需 DMP 支持)

2.具有 131 LSBs/° /sec 敏感度与全格感测范围为±250、±500、±1000 与±2000°/sec 的 3 轴角速度感测器(陀螺仪)

3.集成可程序控制,范围为±2g、±4g、±8g 和±16g 的 3 轴加速度传感器

4.自带数字运动处理(DMP: Digital Motion Processing)引擎可减少 MCU 复杂的融合演算数据、感测器同步化、姿势感应等的负荷

5.自带一个数字温度传感器

6.可程序控制的中断(interrupt)(INT接口的功能),支持姿势识别摇摄、画面放大缩小、滚动、快速下降中断、high-G 中断、零动作感应、触击感应、摇动感应功能

7.自带 1024 字节 FIFO,有助于降低系统功耗

8.高达 400Khz 的 IIC 通信接口

系统框图:
在这里插入图片描述MPU-60X0对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。从系统框图中可以看出加速度计和陀螺仪都有3个ADC模块,转化后的数字量最后保存到寄存器中供用户读取。

加速度计

加速度计顾名思义,就是测量加速度的.那么,我们如何认识这个加速度呢?在此用一个盒子形状的立方体来做模型,认识加速度。
我们可以把加速度计想象为一个正方体盒子里放了一个球如图所示,假设盒子没有任何受力时(包括重力),小球将处于正中心的位置,那么六个壁面感受到的压力都是0,可以理解为三轴的加速度均为0。
在这里插入图片描述
如果我们突然将立方体向左侧移动(我们加快加速,1G =9.8米/ S ^ 2),皮球打在了墙上X-。然后,我们测量球适用于在X轴上的壁和输出-1g值的压力。如下图
在这里插入图片描述

注意,加速度计反应的加速向量与当前的受力方向是相反的.如上图所示,受力方向向左,但是加速度的向量方向为右.

对于MPU6050,寄存器0x3B到0x40的6个寄存器分别保存了XYZ轴的加速度值,每个轴的值分为高八位和低八位,但注意这个加速度计的读数,以LSB为单位的,不是g(9.8米/秒^ 2),需要做转换。
在这里插入图片描述
MPU6050的加速度计的三轴分量ACC_X、ACC_Y和ACC_Z均为16位有符号整数,其均以重力加速度g的倍数为单位,有四个可选量程:±2g、±4g、±8g、±16g。

为了得到最终的力值,单位为g,我们
用下面的公式:
RX = ADCRx /灵敏度 (RX是转换为g单位后的结果,ADCRx是从sensor读出的加速度原始值)

此时以X轴ACC_X为例,量程选择±2g,则实际加速度转换参考下面公式:
在这里插入图片描述
ACCx是X轴的读数,注意最高位是符号位。
后面这部分实际上是LSB灵敏度,不同的加速度范围对应的灵敏度如下:

在这里插入图片描述
量程选择±2g,当x轴的计数为ADCx 时,那么对应的加速度值就是 (ADCx/16384)g
这个灵敏度与寄存器原始值支持的位数有关,上面这个表仅代表MPU6050。

加速度计的标定

当MPU6050水平放置时,±2g量程,理论上Z轴感受到重力 将读出16384。前面说到,加速度计反应的加速向量与当前的受力方向是相反的,所以重力的方向是Z轴的负方向,则加速度计的值就是正的1g,即读出正16384。同时X 轴和Y轴的读数将是0。可实际会有误差。这是由于每个芯片在制作时都不一样,数据手册上的都是理论的值,真正的芯片在水平时Z轴可能并不是16384。我们需要找到当各个轴在0g重力时的计数,1g时的读数,以及-1g时的读数,得到一个补偿值,在每次读取ADC结果后都进行补偿。这个过程我们称之为标定。用数学公式表示为:
ADCx = K*Gx + Offset
ADCx 传感器输出
Gx 真实的加速值
Offset 加速度为0g时传感器的输出
K 标度因数

陀螺仪

陀螺仪是测试角速度的传感器,也有人把角速度说成角速率,说的是一样的物理量。拿电机做例子,当我们说一个电机10转每秒。一转是360度,那么它的主轴在一秒内转过3600度。也就是说这个电机在转动时的角速度是3600dps.dps 就是dergee per second 度每秒
(或者写成 deg/s)。MPU6050 集成了三轴的陀螺仪。角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps).当选择量程为±250dps的时候,将会得到分辩率为131LSB/(º/s).也就是当载体在X+轴转动1dps时,ADC将变化131。

对于MPU6050,寄存器0x43到0x48的6个寄存器分别保存了XYZ轴的陀螺仪测量值,每个轴的值分为高八位和低八位,但注意这个陀螺仪的读数,以LSB为单位的,不是 deg / s,需要做转换。

在这里插入图片描述
每个 16位陀螺仪测量值的满量程定义在 FS_SEL(寄存器 27)。对于每个满量程的设置,GYRO_xOUT里陀螺仪测量值的灵敏度最低分辨率( LSB)如下表:
在这里插入图片描述
从ADC值到 dps
通过I2C接口读出来的转换结果ADC值,并不是以度每秒为单位。一般按以下公式进行转换:
Anglerate = ADCrate /灵敏度
以量程为±1000º/s为例,说明如何转换。假设读取x轴的ADC值为200,从上表中得知在±1000º/s下的灵敏度为32.8LSB/(º/s) 。根据上面的公式:
Anglerate = 200/32.8 = 6.09756º/s
这就是说,MPU6050检测到模块正在以约6度每秒的速度绕X轴(或者叫在YZ平面上)旋转。ADC值并不都是正的,请注意,当出现负数时,意味着该设备从现有的正方向往相反的方向旋转。

DMP

DMP就是MPU6050内部的运动引擎,全称Digital Motion Processor,直接输出四元数,有了四元数就可以转换成欧拉角,可以减轻外围微处理器的工作负担且避免了繁琐的滤波和数据融合。Motion Driver是Invensense针对其运动传感器的软件包,并非全部开源,核心的算法部分是针对ARM处理器和MSP430处理器编译成了静态链接库,适用于MPU6050、MPU6500、MPU9150、MPU9250等传感器。

FIFO

MPU-60X0包含一个可通过串行接口访问的1024字节FIFO寄存器。 FIFO配置寄存器决定哪个数据写入FIFO。 可能的选择包括陀螺仪数据,加速计数据,温度读数,辅助传感器读数和 FSYNC 输入。 FIFO 计数器跟踪 FIFO 中包含的有效数据字节数。 FIFO寄存器支持突发读取。 中断功能可用于确定新数据何时可用。

姿态融合

MPU6050的正式名称为六轴运动姿态陀螺仪传感器,之所以称其为“六轴”,是因为MPU6050是一个6轴运动处理组件,包含了3轴加速度计和3轴陀螺仪,可分别输出三轴加速度和三轴角速度,然后再根据以上原始数据在DMP(Digital Motion Processor,数字运动处理器)中使用算法进行姿态融合解算出三轴的角度数据。
常用的姿态融合算法有四元数法 、一阶互补算法和卡尔曼滤波算法,其中第三者最为常用。

卡尔曼滤波算法简述:对于姿态传感器模块来说,角度解算来源于两种类型的数据,第一种是通过加速度和磁场数据进行运动学解算可以求出三轴的姿态角,优点是没有长期漂移和误差累计,但缺点是精度差,而且仅在静态时能保证精度。第二种是通过陀螺仪测量出来的角速度进行积分运算,可以得出三轴姿态角,优点是精度高,可以进行动态测量,对加速度不敏感,缺点是有累积误差和漂移,时间越长累积误差越大。卡尔曼滤波就是一种数据融合算法,结合加速度计和陀螺仪的信息,共同来解算姿态,集合二者的优点获得在动态环境下可以准确测量姿态的方法。

欧拉角

以下图的坐标为例,飞机头是X轴方向,两翼是Y轴方向,垂直是Z轴方向,
假想当前的飞机自身有个随运动而动的坐标,然后与当前一个固定不动的坐标重合,就像动图中的初始状态,
分别对应绕Z轴转ψ,再绕Y轴转θ,再绕X轴转φ,注意这里的轴指的是随自身运动的坐标
完成后飞机处于一个新的动作状态
(ψ, θ, φ)就是ZYX欧拉角
在这里插入图片描述

欧拉角是用来 唯一的 确定定点转动刚体位置的 三个一组的 独立角参量。

通俗来讲的话有:

eg:你去问路得到了两种回答

1 往东经104°04′北纬30°40′走

2 往前走100m后右转

第一种令人难以理解,第二种则是相对坐标,比较具有操作性

欧拉角的思想就是采用第二种回答的方式,优点在于较好理解
可以说欧拉角每次转动的角度都是根据自身上一次动作生成的新的坐标而言的,就像一个人每次左转或右转都是相对自己面向的方向来说

相对欧拉角,还有一种固定角的思路就是对应第一种回答。
固定角,每一次旋转都是绕固定的坐标系的轴,即所谓“固定”。
每一次都是绕运动的坐标系B的轴旋转而不是绕固定的坐标系A的轴旋转,这样的三个一组的旋转称为欧拉角。

关于旋转顺序

eg:问路时候先左转30度后右转60度 和 先右转30度后左转60度 有着根本上的区别
想要让两个人动作一致,除了报先转30度再转60度还不行,必须说明先左转30度后右转60度

旋转顺序 (x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z).

我们指定绕x轴旋转α,绕y轴旋转β.但是可以有多个旋转顺序, 比如:

情况1:先绕x轴旋转α,再绕y轴旋转β.得到姿态 O1

情况2:先绕y轴旋转β,再绕x轴旋转α,得到姿态 O2

得到的 O1 一般是不等于 O2 的.

对于x,y,z三个轴的不同旋转顺序一共有(x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z)六种组合.我们需要明确旋转顺序,才能确定欧拉角所指的姿态.

在很多不太专业的博客中,关于欧拉角上来就是Yaw,Pitch,Roll,都没有搞清楚欧拉角是怎么定义的,是绕哪个轴在转动。

通过对比不同领域的文献,我发现关于欧拉角的定义似乎有所差别,比如在一些文献当中,是不区分固定角和欧拉角的,绕固定轴和绕运动轴的区别称为外旋和内旋。因此,为了和上面保持一致,这里就以Z-Y-X绕运动轴旋转的角度称为欧拉角,一般用Yaw,Pitch,Roll表示。偏航角yaw,俯仰角pitch,滚动角 roll

偏航角,俯仰角,滚动角似乎都是以飞机的动作来命名,即使不讲究XYZ轴,也知道是往哪个方向转动。
只能说偏航角,俯仰角,滚动角是用了欧拉角的表达方式,但是最好不要把欧拉角和偏航角,俯仰角,滚动角划等号。

四元数

提出意义:上述欧拉角是多次旋转后才能得到,那么为什么不一步到位,只旋转一次呢?那么四元数应运而生。
定义:
对于一个物体的旋转,我们只需要知道四个值:一个旋转的向量 + 一个旋转的角度。而四元数也正是这样的设计:
在这里插入图片描述
其中x,y,z 代表的是向量的三维坐标,w代表的是角度

四元数和欧拉角间的相互转化

1、四元数转为欧拉角
在这里插入图片描述
2、欧拉角转为四元数
在这里插入图片描述

https://blog.csdn.net/qq_40604876/article/details/119024790

https://blog.csdn.net/weixin_45263626/article/details/105230225

https://blog.csdn.net/weixin_55073640/article/details/125757469

https://blog.csdn.net/absll/article/details/124835737

https://blog.csdn.net/weixin_55073640/article/details/125757469

https://blog.csdn.net/thefist11cc/article/details/126595776

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_302906.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5【detect.py源码及参数】超详细注释解读!!!建议收藏✨✨!

之前的文章介绍了YOLOv5的网络结构🚀与目录结构源码🚀的详细解读,今天带来的是YOLOv5的 detect.py 代码逐行解读以及注释,废话不多说,让我们一起学习YOLOv5的 detect.py 源码吧! YOLOv5所使用版本&#xf…

Simulink 自动代码生成电机控制:软件在环测试(SIL)步骤总结

目录 前言 模型配置 SIL模型生成 模型仿真对比 总结 前言 电机模型仿真可以叫做模型在环测试(MIL),至于SIL就是软件在环仿真测试,说白了就是验证生成的代码有没有问题,如果有问题那在模型里面修复,不要…

kettle——处理缺失值

目录 一、删除缺失值 1、文本文件输入 2、字段选择 3、过滤记录 4、输出excel文件 5、运行 二、填充缺失值 1、添加文件 2、过滤记录 3、替换NULL值 4、合并记录 5、替换NULL值2 6、字段选择 7、Excel输出 8、运行并查看执行结果 一、删除缺失值 1、文本文件输入…

极客的git常用命令手册

极客的git常用命令手册 1.1 权限配置篇1.1.1 创建ssh key1.1.2 本地存在多个密钥时,如何根据目标平台自动选择用于认证的密钥? 1.2 基础信息配置篇1.2.1 配置用户名1.2.2 配置用户邮箱1.2.3 设置文件名大小写区分1.2.4 设置命令行显示颜色1.2.5 检查git全…

简答题题集

简答题: 1.测试和开发如何配合工作,即测试何时介入测试工作? 测试工作应该覆盖需求分析、概要设计、详细设计、编码等前期阶段,而不应该在系统开发初步完成后才开始。 2.软件测试的对象:正确的依据应该是需求规格说明书…

SpringBoot日志配置(四十七)

当一切被遗忘,那么就回到最初的地方 上一章简单介绍了SpringBoot配置文件敏感信息加密(四十六) , 如果没有看过,请观看上一章 这一章节,我们学习一下日志配置. 参考文章: Spring Boot 日志配置(超详细) 一. 日志配置处理 我们创建一个普通的 SpringB…

终极猜想 |欧科云链研究院揭秘货币未来形态

前言 5月18日,澎湃科技联合欧科云链研究院重磅发布的《从Web3“去美元化”看货币未来形态的终极猜想》文章,通过分析Web3.0“去美元化”的两大路径,对货币未来形态进行了前沿性的猜想。其中,Web3行业盛会Consensus2023&#xff0…

MySQL高级_第11章_数据库的设计规范

MySQL高级_第11章_数据库的设计规范 1. 为什么需要数据库设计 2. 范 式 2.1 范式简介 在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。 可以理解为,一张数据表的设计结构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关…

『iperf3 』服务器连接速度测试(2023/02/16 最新版)

文章目录 一、简介1.1 我的测速需求1.2 iperf 二、安装iperf2.1 windows中下载与构建2.2 Ubuntu中下载与构建 三、测速3.1 连接速度测试3.2 服务器网速测试 一、简介 1.1 我的测速需求 我目前有2个需求: 测试服务器的上传、下载速度;测试与服务器的连…

Pytest技巧大揭秘:编写高质量接口自动化测试

目录 前言: 一、Pytest测试框架简介 二、安装Pytest测试框架 三、编写Pytest测试用例 四、Pytest参数化(Parameterization) 五、Pytest插件的使用 六、总结 前言: 在软件开发中,接口的测试是非常重要的一环。接…

【zabbix】PostgreSQL表信息查询收集监控

昨天开发那边给了一个需求,每隔一段时间查询一下数据库某表中的数据是否在最近更新,让我这边做一个监控信息收集 一、agent linux侧配置 这边目前就直接在zabbix上实现,首先就是脚本,我用python2实现 脚本名:check_y…

瑞吉外卖 - 修改菜品功能(18)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

分代回收工作流程

GC回收算法之分代回收 GC回收垃圾主要有三个算法,分别是标记清除,复制算法以及标记整理。 三种算法各有优缺点,其中标记清除的优点就是简单高效,缺点就是很容易带来内存碎片化问题。 复制算法的话,优点确实解决了内存碎…

python 递归下降分析法的设计与实验原理 编译原理

本文内容: 本文章实现的文法: E->T|ET; T->F|T*F; F->i|(E);利用上一篇文章:python 预备实验2 LL(1)文法构造转化后的输出: E->TE; T->FT; F->i|(E); E->TE|; T->*FT|; 手工测试,是LL(1)文…

ar在汽车维修行业的应用场景

由于AR增强现实技术的易用性,在汽车产业链中,已处处可见AR技术的踪影,像汽车设计AR远程协同,汽车装配AR远程指导,汽车维修AR远程协助等等,那么下面为详细介绍AR增强现实技术在汽车制造领域的应用。 环境/物…

5th-Generation Mobile Communication Technology(四)

目录 一、5G/NR 1、 快速参考(Quick Reference) 2、5G Success 3、5G Challenges 4、Qualcomm Videos 二、PHY and Protocol 1、Frame Structure 2、Numerology 3、Waveform 4、Frequency Band 5、BWP 6、Synchronization 7、Beam Management 8、CSI Fra…

瑞吉外卖 - 新增菜品功能(16)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

前端必学,crud,magic-Api

CRUD还要后端写&#xff1f; 前端自己搞定&#xff0c;只需要会写sql就行。 文档写的比我写的好太多&#xff0c;直接看文档 创建springBoot&#xff08;springBoot版本要小于3.0&#xff09; 引入pom <?xml version"1.0" encoding"UTF-8"?> &…

C++:采用哈希表封装unordered_map和unordered_set

目录 一. 如何使用一张哈希表封装unordered_map和unordered_set 二. 哈希表迭代器的实现 2.1 迭代器成员变量及应当实现的功能 2.2 operator函数 2.3 operator*和operator->函数 2.4 operator!和operator函数 2.5 begin()和end() 2.6哈希表迭代器实现代码 三. unord…

探索云原生技术的优势和挑战

文章目录 探索云原生技术的优势和挑战一、云原生技术简介二、云原生技术的优势1. 弹性和可伸缩性2. 高可用性3. 快速迭代和部署4. 更好的安全性和可靠性 三、云原生技术的挑战1. 复杂性2. 安全风险3. 成本 四、总结 结语 探索云原生技术的优势和挑战 随着云计算技术的快速发展…