(global variables) sensor fusion

Dependents:   WIPV

SENSOR_FUSION.cpp

Committer:
adam_z
Date:
2016-04-28
Revision:
0:e493567c21ac

File content as of revision 0:e493567c21ac:

#include "SENSOR_FUSION.h"
#include "math.h"

int conv_init;

float axm =0;
float aym =0;
float azm =0;
float u1 = 0;
float u2= 0;
float u3= 0;
float mx= 0;
float my= 0;
float mz= 0;

float axm_f= 0;
float axm_f_old= 0;
float u3aym_f= 0;
float u3aym_f_old= 0;
float u2azm_f= 0;
float u2azm_f_old= 0;

float aym_f= 0;
float aym_f_old= 0;
float u3axm_f= 0;
float u3axm_f_old= 0;
float u1azm_f= 0;
float u1azm_f_old= 0;

float u2axm_f= 0;
float u2axm_f_old= 0;
float u1aym_f= 0;
float u1aym_f_old= 0;
float azm_f= 0;
float azm_f_old= 0;


float x1_hat = 0;
float x2_hat= 0;
float x3_hat= 0;
float cospitch= 0;
float pitch_angle= 0;
float roll_angle = 0;

float omega_phi= 0;

float lpf(float in, float out_old, float alpha, float TS) {
    float out;

    out = (1. - alpha * TS) * out_old + alpha * TS*in;
    return out;
}

void pitch_fusion(float a_xm,float a_ym,float a_zm,float u_3,float u_2,float alpha,float TS)
{
    axm_f = lpf(a_xm,axm_f_old,alpha,TS);
    axm_f_old = axm_f;
    u3aym_f = lpf(u_3*a_ym,u3aym_f_old,alpha, TS);
    u3aym_f_old = u3aym_f;
    u2azm_f = lpf(u_2*a_zm,u2azm_f_old,alpha, TS);
    u2azm_f_old = u2azm_f;    
    
    x1_hat = axm_f + u3aym_f/alpha - u2azm_f/alpha;
    cospitch = sqrt(1-(x1_hat*0.1020*x1_hat*0.1020));
    pitch_angle = asin(x1_hat*0.1020);
}

void roll_fusion(float a_xm,float a_ym,float a_zm,float u_3,float u_1,float alpha, float TS)
{
    aym_f = lpf(a_ym,aym_f_old,alpha, TS);
    aym_f_old = aym_f;
    u3axm_f = lpf(u_3*a_xm,u3axm_f_old,alpha, TS);
    u3axm_f_old = u3axm_f;
    u1azm_f = lpf(u_1*a_zm,u1azm_f_old,alpha, TS);
    u1azm_f_old = u1azm_f;    
    
    x2_hat = -u3axm_f/alpha + aym_f + u1azm_f/alpha;
 
}

void x3_hat_estimat(float a_xm,float a_ym,float a_zm,float u_2,float u_1,float alpha, float TS)
{
    u2axm_f = lpf(u_2*a_xm,u2axm_f_old,alpha, TS);
    u2axm_f_old = u2axm_f;
    u1aym_f = lpf(u_1*a_ym,u1aym_f_old,alpha, TS);
    u1aym_f_old = u1aym_f;
    azm_f = lpf(a_zm,azm_f_old,alpha, TS);
    azm_f_old = azm_f;    
    
    x3_hat = u2axm_f/alpha - u1aym_f/alpha + azm_f;
    
    roll_angle = asin(x3_hat*(-0.1012)/cospitch);
    omega_phi = u3;
    
}