视频链接:
BILIBILI:用MPU6050进行姿态解算制作IMU控制器和IMU二维云台_哔哩哔哩_bilibili
抖音:3.38 复制打开抖音,看看【kolento的作品】制作一款简单的IMU(惯性测量器) 第一部分:如何... https://v.douyin.com/iNgbyXpw/ u@f.ba 10/05 pDh:/
准备材料: 1、MPU6050 x 1;
2、Arduino UNO/ESP32/ESP8266/STM32/GD32/PICO 任意其中一款即可
3、SG90舵机 x 2;
4、云台框架 x 1;(3D打印即可,模型T站可以获取,淘宝也有)
制作前需知:我的想法是让代码足够的简单,在简单的基础上能够实现一个不错的效果。所以什么四元数、卡尔曼滤波、欧拉角、万向锁等公式都不会涉及。
欧拉角您只需要知道x->pitch、y->roll、z->yaw,同时yaw轴即z轴,这里不多考虑,因为yaw轴需要有电子罗盘来进行数据融合,否则会漂移;
一、首先查看MPU6050产品手册
以上两张图在产品手册的12和13页,分别表示了陀螺仪和加速度计在本控制器中所使用的模式;我们来看看陀螺仪的参数:一度每秒对应轴会输出65.5,数据是16位,±500度每秒。
接下来我们来看看加速度计参数:每提升1g输出值就增加4096,数据是16位置,±8g。
二、利用陀螺仪计算角度
假设当前陀螺仪匀速6°/s的转动,输出值应该65.5 x 6 = 393,那么1min中输出是393x60=23580。
那么我们可以从MPU6050的陀螺仪传感器中1min读出的数据就是23580,将这个数据除以65.5即 23580/65.5 = 360°,而在这个例子里面陀螺仪匀速6°/s 转1min就是360°,所有利用这个公式可以通过输出值计算角度。
值得注意的是在IMU中我们需要在1s里面读取多次MPU6050的数据,需要大量的数据来计算角度,如果你用的是Arduino UNO 可以参考我的读取次数250次,这个数值依据你的单片机进行更改,具体项目适当更改。越高的主频可以设置的高一点。(我将Arduino UNO作为飞控,他的主频是16MHz,在执行其他代码后,得出250次是较为合理的。)
我们再回到这个例子上面,现在我们需要在1s里面读取250次数据。假设X轴每秒输出记作Xoutput 那么 每次读取的输出就是Xoutput / 250,每次转动的角度就是 Xoutput / 250 / 65.5 = Xoutput x 0.0000611。这样我们就得到了这个公式