久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2711|回復: 2
打印 上一主題 下一主題
收起左側

stm32f103c8t6+mpu6050四元數姿態解算法,通過移植網上的例程

[復制鏈接]
跳轉到指定樓層
樓主
ID:597428 發表于 2020-3-23 12:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "IMU.H"
#include "mpu6050.h"


float  q0=1,q1=0,q2=0,q3=0;         
float  exInt=0,eyInt=0,ezInt=0;

short Gyro_y=0,Gyro_x=0,Gyro_z=0;           //Y軸陀螺儀數據暫存
short Accel_x=0,Accel_y=0,Accel_z=0;          //X軸加速度值暫存

float  Angle_ax=0.0,Angle_ay=0.0,Angle_az=0.0;  //由加速度計算的加速度(弧度制)
float  Angle_gy=0.0,Angle_gx=0.0,Angle_gz=0.0;  //由角速度計算的角速率(角度制)
float gx; float gy; float gz; float ax; float ay; float az;
float pitch,roll,yaw;         //歐拉角
short aacx,aacy,aacz;        //加速度傳感器原始數據
short gyrox,gyroy,gyroz;    //陀螺儀原始數據

#define    Kp        0.8f                        
#define    Ki        0.001f                        
#define    halfT    0.004f



void shujuzh(float *gx, float *gy, float *gz, float *ax, float *ay, float *az)//取陀螺儀原始數值
{
    MPU_Get_Gyroscope(&Gyro_x,&Gyro_y,&Gyro_z);
        MPU_Get_Accelerometer(&Accel_x,&Accel_y,&Accel_z);
  *ax = Accel_x/8192.0;        //根據設置換算
    *ay = Accel_y/8192.0;
  *az = Accel_z/8192.0;
   
    *gx = Gyro_x/65.5*0.0174533;//根據設置換算
    *gy = Gyro_y/65.5*0.0174533;
  *gz = Gyro_z/65.5*0.0174533;
}




void IMUupdate(float *pitch,float *roll)
{
   
   
    float  norm;
    float  vx, vy, vz;
    float  ex, ey, ez;
  shujuzh(&gx, &gy, &gz, &ax, &ay, &az);
   
    norm = sqrt(ax*ax + ay*ay + az*az);    //把加速度計的三維向量轉成單維向量   
    ax = ax / norm;
    ay = ay / norm;
    az = az / norm;

        //    下面是把四元數換算成《方向余弦矩陣》中的第三列的三個元素。
        //    根據余弦矩陣和歐拉角的定義,地理坐標系的重力向量,轉到機體坐標系,正好是這三個元素
        //    所以這里的vx vy vz,其實就是當前的歐拉角(即四元數)的機體坐標參照系上,換算出來的
        //    重力單位向量。
    vx = 2*(q1*q3 - q0*q2);
    vy = 2*(q0*q1 + q2*q3);
    vz = q0*q0 - q1*q1 - q2*q2 + q3*q3 ;

    ex = (ay*vz - az*vy) ;
    ey = (az*vx - ax*vz) ;
    ez = (ax*vy - ay*vx) ;

    exInt = exInt + ex * Ki;
    eyInt = eyInt + ey * Ki;
    ezInt = ezInt + ez * Ki;

    gx = gx + Kp*ex + exInt;
    gy = gy + Kp*ey + eyInt;
    gz = gz + Kp*ez + ezInt;

    q0 = q0 + (-q1*gx - q2*gy - q3*gz) * halfT;
    q1 = q1 + ( q0*gx + q2*gz - q3*gy) * halfT;
    q2 = q2 + ( q0*gy - q1*gz + q3*gx) * halfT;
    q3 = q3 + ( q0*gz + q1*gy - q2*gx) * halfT;

    norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
    q0 = q0 / norm;
    q1 = q1 / norm;
    q2 = q2 / norm;
    q3 = q3 / norm;

    *pitch  = asin(2*(q0*q2 - q1*q3 )) * 57.2957795f; // 俯仰   換算成度
    *roll = asin(2*(q0*q1 + q2*q3 )) * 57.2957795f; // 橫滾
}


#include "stm32f10x.h"
#include "sys.h"
#include "led.h"
#include "timer.h"
#include "usart.h"
#include "mpu6050.h"
#include "IMU.H"


//mpu6050 scl PB10  sda PB11


float Pitch,Roll,Yaw;         //歐拉角



#define JTAG_SWD_DISABLE   0X02
#define SWD_ENABLE         0X01
#define JTAG_SWD_ENABLE    0X00   

void JTAG_Set(u8 mode)
{
    u32 temp;
    temp=mode;
    temp<<=25;
    RCC->APB2ENR|=1<<0;     //開啟輔助時鐘      
    AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
    AFIO->MAPR|=temp;       //設置jtag模式
}

int main(void)
{     


   
     JTAG_Set(JTAG_SWD_DISABLE);   
     JTAG_Set(SWD_ENABLE);
     delay_init();
     uart_init(9600);     
    MPU_Init();        
        OLED_Init();
    OLED_Clear();
     LED_Init();

   
    SYSTM=1;
   
   
   
    while(1)
    {

        
        IMUupdate(&Pitch,&Roll);
            OLED_Float(0,0,Pitch,12);
          OLED_Num2(0,2,Roll);
    }
}
   
   
全部資料51hei下載地址:
四元數法自己移植.7z (249.77 KB, 下載次數: 71)


評分

參與人數 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:410541 發表于 2020-4-4 13:44 | 只看該作者
謝謝分享
回復

使用道具 舉報

板凳
ID:102688 發表于 2020-4-9 21:06 | 只看該作者
學習學習,感謝分享,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产99国产精品 | 国产成人精品在线 | 四虎影音 | 国产午夜av片 | 欧美区在线观看 | 欧美久| 午夜精品影院 | 在线观看中文字幕 | 天天影视色综合 | 国产乱码久久久久久一区二区 | av黄色国产| 亚洲欧美网站 | 亚洲91精品 | 欧美一区二区在线观看 | 日韩欧美在线视频一区 | 免费观看www7722午夜电影 | 国产精品久久久久久吹潮 | xxxxxx国产 | 欧美a在线| 午夜精品导航 | 成人视屏在线观看 | 亚洲欧洲中文日韩 | 国产激情偷乱视频一区二区三区 | 97精品国产一区二区三区 | 国产免费一区二区三区 | 亚洲自拍偷拍视频 | 精品欧美一区二区在线观看欧美熟 | 亚洲最新网址 | 福利av在线 | 一级毛片免费视频 | 日韩欧美三级电影 | 美女黄网| 国产精品久久9 | 九九综合九九 | 野狼在线社区2017入口 | 国产黄色在线观看 | 国产一区二区三区四区三区四 | 九九九视频 | 亚洲人成在线观看 | 中文字幕一区二区三区精彩视频 | 久草视频网站 |