正点原子-战舰V3第三十七章 MPU6050 六轴传感器实验
文章以ALIENTEK 战舰 STM32F1 开发板为例
原文链接:/s?id=1664210044090658371&wfr=spider&for=pc
MPU6050工作原理及STM32控制MPU6050
①陀螺仪传感器:个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。人们根据这个道理,用它来保持方向。
(相关资料图)
②加速度传感器:加速度传感器是一种能够测量加速度的传感器。通常由质量块、阻尼器、弹性元件、敏感元件和适调电路等部分组成。传感器在加速过程中,通过对质量块所受惯性力的测量,利用牛顿第二定律获得加速度值。
数字运动处理器(DMP):/C2Wof
DMP 从陀螺仪、加速度计以及外接的传感器接收并处理数据,处理结果可以从 DMP 寄存器读出,或通过 FIFO 缓冲。DMP 有权使用 MPU 的一个外部引脚产生中断。
原文参考:
vcc--->
GND--->GND
SCL---->PB6
SDA----->PB7
OLED接线:
vcc--->
GND--->GND
SCL---->PA6
SDA----->PA7
卡尔曼滤波:
是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。
数据滤波是去除噪声还原真实数据的一种数据处理技术,Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。由于它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理,Kalman滤波是目前应用最为广泛的滤波方法,在通信,导航,制导与控制等多领域得到了较好的应用。
采用up主爱转的光凌/video/BV15f4y1h7GM?share_source=copy_web的卡尔曼滤波法接收数据,详细可看视频
正常显示的情况
有时候也会出现一下情况
读取不到数值的时候建议reset一下,如果依然没有解决,建议重新烧录程序,或者换大佬分享的其它更加稳定的代码试一试。当然这个时候也要检查接线是否有问题,有时候杜邦线可能接触不良。
mpu6050姿态解算与卡尔曼滤波(用于飞行器的参考)
定义地理坐标系n系:x轴指向东,y轴指向北,z轴指向天。在mpu6050芯片上定义载体坐标系b系。那么b系的姿态就是指n系与b系相对的旋转关系,即如何由n系旋转到b系。
欧拉角指的是将n系按照z轴->x’轴->y”轴的顺序依次转动 ψ,θ,γψ,θ,γ 后就是b系,事实上欧拉角并没有规定转动顺序,以上转动顺序z轴->x’轴->y”轴为惯性导航中常使用的规定,(ψ,θ,γ)T(ψ,θ,γ)T依次命名为偏航、俯仰、滚转。
由于算法公式较多在这里附上参考:/n7ESW
关于mpu6050加速度计,很多人可能无法理解为什么在相对n系静止的情况下加速度计会测量到一个与重力加速度相反的加速度,建议阅读这篇知乎专栏文章中关于加速度计的部分:/p/20082486这里对加速度计的测量解释的较为形象。
MPU6050多用于航模的飞行数据监控。
计步器算法
计步原理:
1.先要模型的特征
目前,大部分设备都提供了能够检测各个方向的加速度传感器。以iOS设备为例,咱们利用了其三轴加速度传感器(x,y,z轴表明方向如图)的特性来分析。分别用以检测人步行中三个方向的加速度变化。
用户在水平步行运动中,垂直和前进两个加速度会呈现周期性变化,如图所示。在步行收脚的动做中,因为重心向上单只脚触地,垂直方向加速度是呈正向增长的趋势,以后继续向前,重心下移两脚触底,加速度相反。水平加速度在收脚时减少,在迈步时增长。
2.计步的合理算法
经过计算三个加速度的矢量长度,咱们能够得到一条步行运动的正弦曲线轨迹
此外还需做一些数据的排除
参考此文:/article/
由于MPU6050内置了一个DMP库,由此可以直接调用直接获取步数
调用方法参考:/x1131230123/article/details/105986156
DMP库的移植:/blog/
当然在这里直接调用DMP库中的会出现模拟正常走步动做7次左右,才能正确读出计步数,动做频率过快或和人体走路动做不匹配时,读出的数据都是0的现象,可以通过代码进行优化。
标签: