参考链接

DMP简介

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

四元数转欧拉角

四元数可以方便的表示3维空间的旋转,但其概念不太好理解,可以先类比复数,复数表示的其实是2维平面中的旋转。

四元数的基本表示形式为:q0+q1i+q2j+q3*k,即1个实部3个虚部,具体细节本篇先不做展开介绍。

四元数虽然方便表示旋转,但其形式不太直观,旋转转换成pitch、roll、yaw的表示形式,方便观察姿态。

程序表示为:

pitch = asin(-2 * q1 * q3 + 2 * q0* q2)
roll  = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)
yaw   = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3)

尝试使用mpu6050 dmp欧拉角解算 PlatformIO(未成功

具体过程:

文章地址:mpu6050 dmp欧拉角解算 PlatformIO

-下载链接ESP32-MPU6050.zip

改用Arduino环境尝试

Arduino环境配置

1.安装老版本的Arduino ,不要用2.0版本的arduino,安装方法根据官方文档安装:ESP32C3 Arduino 安装

请输入图片描述

2.选择开发板时要调整FLASHmode为:DIO

3.安装Electronic Cats的“mpu6050”库,内有DMP解算示例程序

要注意:

合宙购买的GY-521(MPU6050,六轴)传感器默认i2c地址为0x68,如果程序内是0x69则需要修改。

例程中使用的是wire.begin();未对ESP32C3进行IO适配,我们使用ESP32C3需要指定I2C的SDA,SCL端口,所以程序中的wire.begin();需要修改为wire.begin(4,5);

硬件连接

使用GY-521(MPU6050,六轴)的DMP内置运算需要有个外部中断引脚触法,默认使用如下接法:

ESP32C3的IO2接GY-521(MPU6050,六轴)的INT
ESP32C3的IO4接GY-521(MPU6050,六轴)的SDA
ESP32C3的IO5接GY-521(MPU6050,六轴)的SCL
ESP32C3的GND及5v或3.3v接GY-521(MPU6050,六轴)的GND及VCC

图形显示

可以使用Arduino的串口绘图器显示输出的欧拉角数据图像,注意要通过串口发送任意字符才能触发显示波形
欧拉角波形

也可以使用匿名上位机显示图像(还未尝试)
匿名上位机

发表评论