00001 
00013 #ifndef EKFfix_H
00014 #define EKFfix_H
00015 
00016 
00017 #include <estim/libKF.h>
00018 #include "fixed.h"
00019 #include "matrix.h"
00020 #include "reference.h"
00021 #include "parametry_motoru.h"
00022 
00023 using namespace bdm;
00024 
00025 double minQ(double Q);
00026 
00032 class EKFfixed : public BM, public BMcond {
00033 public:
00034 void init_ekf(double Tv);
00035 void ekf(double ux, double uy, double isxd, double isyd);
00036 
00037 
00038 void prediction(int *ux);
00039 void correction(void);
00040 void update_psi(void);
00041 
00042 
00043  int Q[16]; 
00044  int R[4]; 
00045 
00046  int x_est[4];
00047  int x_pred[4];
00048  int P_pred[16]; 
00049  int P_est[16]; 
00050  int Y_mes[2];
00051  int ukalm[2];
00052  int Kalm[8]; 
00053 
00054  int PSI[16]; 
00055 
00056  int temp15a[16];
00057 
00058  int cA, cB, cC, cG, cH;  
00059 
00060  long temp30a[4]; 
00061  enorm<fsqmat> E;
00062  mat Ry;
00063   
00064 public:
00066         EKFfixed ( RV rvx,RV rvc ):BM(rvx),BMcond(rvc),E(rvx),Ry(2,2){
00067         int i;
00068  for(i=0;i<16;i++){Q[i]=0;}
00069  for(i=0;i<4;i++){R[i]=0;}
00070 
00071  for(i=0;i<4;i++){x_est[i]=0;}
00072  for(i=0;i<4;i++){x_pred[i]=0;}
00073  for(i=0;i<16;i++){P_pred[i]=0;}
00074  for(i=0;i<16;i++){P_est[i]=0;}
00075  P_est[0]=0x7FFF;
00076  P_est[5]=0x7FFF;
00077  P_est[10]=0x7FFF;
00078  P_est[15]=0x7FFF;
00079  for(i=0;i<2;i++){Y_mes[i]=0;}
00080  for(i=0;i<2;i++){ukalm[i]=0;}
00081  for(i=0;i<8;i++){Kalm[i]=0;}
00082 
00083  for(i=0;i<16;i++){PSI[i]=0;}
00084 };
00086         void bayes ( const vec &dt );
00088         epdf& _epdf(){return E;};
00089         void condition ( const vec &Q0 ) {
00090                 
00091                 Q[0]=prevod(minQ(Q0(0)),15);       
00092                 Q[5]=prevod(minQ(Q0(1)),15);
00093                 Q[10]=prevod(minQ(Q0(2)),15);      
00094                 Q[15]=prevod(minQ(Q0(3)),15);      
00095 
00096         }
00097 };
00098 
00099 
00100 #endif // KF_H
00101 
00102