搜索
bottom↓
回复: 8

msp430做四轴,用四元数数据融合,转化欧拉角,输出不对

[复制链接]

出0入0汤圆

发表于 2014-8-12 23:59:12 | 显示全部楼层 |阅读模式
角度比实际要密,,从0变到45度时(滚转角和俯仰角),会突然跳变为负,,求大神指点!!谢谢!

/**************************************************************************************       

                               数 据 融 合
***************************************************************************************/
// 变量定义

#define Kp 2.0f                        // 比例增益支配率收敛到加速度计/磁强计
#define Ki 0.005f                // 积分增益支配率的陀螺仪偏见的衔接
#define halfT 0.01f                // 采样周期的一半

float q0 = 1.0, q1 = 0.0, q2 = 0.0, q3 = 0.0;          // 四元数的元素,代表估计方向
float exInt = 0, eyInt = 0, ezInt = 0;        // 按比例缩小积分误差
float gx=0,gy=0,gz=0,ax=0,ay=0,az=0;          //全局变量  


void IMU_Updata(float gx, float gy, float gz, float ax, float ay, float az)
{

        float norm;
        float vx, vy, vz;
        float q0i, q1i, q2i, q3i;
        float ex, ey, ez;  
        //增加互补滤波
/*                float q0q0 = q0*q0;
                float q0q1 = q0*q1;
                float q0q2 = q0*q2;
                float q0q3 = q0*q3;
                float q1q1 = q1*q1;
                float q1q2 = q1*q2;
                float q1q3 = q1*q3;
                float q2q2 = q2*q2;
                float q2q3 = q2*q3;
                float q3q3 = q3*q3;
*/
         // normalise the measurements
        norm = sqrt(ax*ax + ay*ay + az*az);      
        ax = ax / norm;
        ay = ay / norm;
        az = az / norm;
        
   
        
        // 估计方向的重力
        vx = 2*(q1*q3 - q0*q2);
        vy = 2*(q0*q1 + q2*q3);
        vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
        
        // 错误的领域和方向传感器测量参考方向之间的交叉乘积的总和
        ex = (az*vy - ay*vz);
        ey = (ax*vz - az*vx );
        ez = (ay*vx - ax*vy);
        
        // 积分误差比例积分增益
        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;
        

        
        
        // 整合四元数率和正常化
        q0i = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
        q1i = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
        q2i = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
        q3i = q3 + (q0*gz + q1*gy - q2*gx)*halfT;  
        
         q0 += q0i;
         q1 += q1i;
         q2 += q2i;
         q3 += q3i;
        
        // 正常化四元
        norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
        q0 = q0 / norm;
        q1 = q1 / norm;
        q2 = q2 / norm;
        q3 = q3 / norm;
      
//       Q_angle.z = atan2(2 * q1 * q2 + 2 * q0 * q3, -2 * q2*q2 - 2 * q3* q3 + 1)* 57.3; // yaw
         Q_angle.x = atan2(2* q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.32784; // roll
         Q_angle.y = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.32784 ; // pitch
         Q_angle.z = Gyro_data.z  ;
   }

出0入0汤圆

发表于 2014-8-13 01:30:24 | 显示全部楼层
电子设计大赛么

出0入0汤圆

 楼主| 发表于 2014-8-13 08:56:47 | 显示全部楼层

是的,,,现在这个问题耗了好长时间,还没解决。

出0入0汤圆

发表于 2014-8-13 15:15:23 | 显示全部楼层
通大11--Ahk1993 发表于 2014-8-13 08:56
是的,,,现在这个问题耗了好长时间,还没解决。

加油  预祝成功

出0入0汤圆

发表于 2014-8-13 17:28:34 | 显示全部楼层
IMU_Updata我用AVR8位机试过,跑得很好的,
1,先改你的HALFT,HALF是指跑 IMU_Updata这个代码的时间的一半,430的计算速度远不止100HZ,先改成500HZ吧;(总之你速率一定要拉上去,不然不准的)
2,还有就是你前面的GYRO和ACCEL没有标定校准好,或者GYRO单位化有问题!

出0入0汤圆

 楼主| 发表于 2014-8-13 18:35:57 | 显示全部楼层

谢谢!!!

出0入0汤圆

发表于 2014-8-28 17:14:52 | 显示全部楼层
BLACKBLUE007 发表于 2014-8-13 17:28
IMU_Updata我用AVR8位机试过,跑得很好的,
1,先改你的HALFT,HALF是指跑 IMU_Updata这个代码的时间的一半,43 ...

楼主。。请问这个Halt就是指IMU_Udate这个姿态解算函数的时间吗。。能不能详细讲解一下。。。谢谢了

出0入0汤圆

发表于 2014-9-23 11:39:51 | 显示全部楼层
时光 发表于 2014-8-28 17:14
楼主。。请问这个Halt就是指IMU_Udate这个姿态解算函数的时间吗。。能不能详细讲解一下。。。谢谢了 ...

HAIFT是指姿态解算时间的一半,若速度为500Hz,那么HAIFT就就取值0.001f

出0入0汤圆

发表于 2014-9-23 18:45:49 | 显示全部楼层
上一届的不是要求主控必须由瑞萨的mcu做么
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 19:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表