凌天007 发表于 2017-5-9 09:49:36

admin 发表于 2017-5-8 23:33
把Roll和Yaw也发到上位机即可

#include "sys.h"
/**************************************************************************
作者:平衡小车之家
我的淘宝小店:http://shop114407458.taobao.com/
**************************************************************************/
u8 Way_Angle=2;   
float Angle_Balance;
int main(void)
{
        Stm32_Clock_Init(9);            //系统时钟设置
        delay_init(72);               //延时初始化
        uart_init(72,9600);         //初始化串口1
        IIC_Init();                     //模拟IIC初始化
MPU6050_initialize();         //=====MPU6050初始化       
        DMP_Init();                     //初始化DMP   
Timer1_Init(49,7199);         //=====5MS进一次中断服务函数
        while(1)
                {
                                printf("卡 尔 曼 滤 波 输 出 Pitch:%f\r\n",Angle_Balance);//y
                                printf("卡 尔 曼 滤 波 输 出 ROLL:%f\r\n",Angle_Balance);//x-----
                                printf("卡 尔 曼 滤 波 输 出 YAW:%f\r\n",Angle_Balance);//z -----
                }
}
应该不是这样吧 ,你看那个Angle_Balance应该是Pitch的值,但是ROLL和YAW的值不知道是什么,卡尔曼滤波那块好像又没有

凌天007 发表于 2017-5-9 10:22:54

admin 发表于 2017-5-8 23:33
把Roll和Yaw也发到上位机即可

还有一个问题,就是我用DMP读取数据时,假如我读取YAW角数据,我没有动那个mpu模块,但是YAW角数据会一直往大增加,这是DMP这个算法的问题还是芯片本身的问题,有没有解决的办法呢?

魂萦xy 发表于 2017-5-9 11:05:48

凌天007 发表于 2017-5-9 09:49
#include "sys.h"
/**************************************************************************
...

看来你比我还新手
                q0 = quat / q30;        //q30格式转换为浮点数
                q1 = quat / q30;
                q2 = quat / q30;
                q3 = quat / q30;
                //计算得到俯仰角/横滚角/航向角
                *pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3;        // pitch
                *roll= atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3;        // roll
                *yaw   = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3;        //yaw

凌天007 发表于 2017-5-9 12:23:46

魂萦xy 发表于 2017-5-9 11:05
看来你比我还新手
                q0 = quat / q30;        //q30格式转换为浮点数
                q1 = quat / q30; ...

我知道这个,但是这个是DMP融合数据的,在卡尔曼滤波算法那个主程序里没有读取DMP的数据。
就是说我现在想用卡尔曼滤波算法得到旋转角的数据,然后到串口上显示,我看卡尔曼滤波算法的程序里只是计算了俯仰角的数据,其他两个角的数据没有计算。
我不用DMP那个程序。
你用DMP那个程序的时候,上电复位后有没有发现有的角度(比如我用的YAW角)开始时一直增大到6 度,然后变化很缓慢(但还在增加),遇到过这个情况吗?

魂萦xy 发表于 2017-5-9 12:59:03

单靠 MPU6050 无法准确得到 Yaw 角,需要和地磁传感器结合使用。不用dmp用卡尔曼得到yaw和roll需要自己去姿态解算融合,我也不会,做平衡车用不到yaw和roll,我觉得你应该到搞四轴的论坛去寻找答案。

凌天007 发表于 2017-5-9 14:00:56

魂萦xy 发表于 2017-5-9 12:59
单靠 MPU6050 无法准确得到 Yaw 角,需要和地磁传感器结合使用。不用dmp用卡尔曼得到yaw和roll需要自己去姿 ...

哦哦,谢谢了

凌天007 发表于 2017-5-9 18:18:26

admin 发表于 2017-5-8 23:33
把Roll和Yaw也发到上位机即可

用卡尔曼滤波算法能否消除YAW角的偏移呢,具体有程序吗?
卡尔曼滤波算法姿态解算出YAW角的程序又该怎么写呢,揪心啊,不想用HMC5883进行校准YAW角

凌天007 发表于 2017-5-9 20:12:56

魂萦xy 发表于 2017-5-9 12:59
单靠 MPU6050 无法准确得到 Yaw 角,需要和地磁传感器结合使用。不用dmp用卡尔曼得到yaw和roll需要自己去姿 ...

那么用卡尔曼滤波算出来的YAW会不会也存在漂移

ly66 发表于 2018-3-5 14:30:14

admin 发表于 2017-4-24 00:26
gyro, accel,


gyro, accel,两个数组怎么转化为三个轴的角速度,对应关系是啥
页: 1 [2]
查看完整版本: MPU6050如何获取三个轴加速度的原始数据呢