MPU9250
Fork of MPU9250 by
Diff: MPU9250.h
- Revision:
- 12:a70c193d8195
- Parent:
- 11:084e8ba240c1
--- a/MPU9250.h Tue Jul 01 13:59:45 2014 +0000 +++ b/MPU9250.h Mon May 09 05:45:18 2016 +0000 @@ -18,7 +18,7 @@ unsigned int WriteReg( uint8_t WriteAddr, uint8_t WriteData ); unsigned int ReadReg( uint8_t WriteAddr, uint8_t WriteData ); void ReadRegs( uint8_t ReadAddr, uint8_t *ReadBuf, unsigned int Bytes ); - + void get_speedrate(); bool init(int sample_rate_div,int low_pass_filter); void read_temp(); void read_acc(); @@ -32,6 +32,9 @@ unsigned int whoami(); uint8_t AK8963_whoami(); void AK8963_read_Magnetometer(); + void AK8963_setoffset(int x,double offset); + double *AK8936_read_Orientation(double *getdata); + void read_all(); @@ -42,16 +45,111 @@ int calib_data[3]; float Magnetometer_ASA[3]; - float accelerometer_data[3]; + double accelerometer_data[3]; + double accelerometer_data_prev[3]; float Temperature; float gyroscope_data[3]; float Magnetometer[3]; - + float Magnetometer_offset[3]; + double speed[3]; + double meter[3]; + float angle_acc[3]; + short offset_gyro[3]; + short rate[3]; + + void set(float time=0.0001 , float time2=0.001){sampleTimeSpeed=time;sampleTimeMeter=time2;} + double freefallSpeedSet(); double freefallSpeedGet(); + double freefallMeterSet(); double freefallMeterGet(); + + void SpeedSet(); + void MeterSet(); + + void Filter(); + double VectolGet();double VectolSet(); + + void MPU_setup(); + void MPU_setnum(int Num=500,float time=0.0001,double rate=0.00390635);//set data member + + void get_angle_acc(); + void get_rate(); + void set_angle();//set always [time] + void newset_angle(double ANG_x,double ANG_y,double ANG_z); + void get_angle(double *x,double *y,double *z); + + void set_noise(); + void set_offset(); + void set_angleoffset(); + short ratespeed[3]; + short ratemeter[3]; + double Synthesis_speed[3],kalman_speed[3],comp_speed[3]; + double Synthesis_meter[3],kalman_meter[3],comp_meter[3]; + double angle[3],Synthesis_angle[3],kalman_angle[3],comp_angle[3]; private: PinName _CS_pin; PinName _SO_pin; PinName _SCK_pin; float _error; + Timer angleT; + Timer speedT; + Timer meterT; + + //ACC ADXL345 + int x_acc,y_acc,z_acc,sampleNum; + double x_offset,y_offset,z_offset; + float gx,gy,gz,xnoise,ynoise,znoise; + //GYALO L3GD20 + double Rate; + double sampleTime; + float noise[3]; + short offset[3];short prev_rate[3]; + + double t[3]; + short tempDATA_ACC[3],tempDATA_ANGLE[3]; + double offset_angle[3]; + + short prev_ratespeed[3],prev_speed[3]; + short prev_ratemeter[3],prev_meter[3]; + double real_acc[3]; + short acc[3]; + double filter_acc[3]; + + int sampleTimeSpeed,sampleTimeMeter; + + class kalman + { + public: + kalman(void); + double getAngle(double newAngle, double newRate, double dt); + + void setAngle(double newAngle); + void setQangle(double newQ_angle); + void setQgyroBias(double newQ_gyroBias); + void setRangle(double newR_angle); + + double getRate(void); + double getQangle(void); + double getQbias(void); + double getRangle(void); + + + private: + double P[2][2]; //error covariance matrix + double K[2]; //kalman gain + double y; //angle difference + double S; //estimation error + + double rate; //rate in deg/s + double angle; //kalman angle + double bias; //kalman gyro bias + + double Q_angle; //process noise variance for the angle of the accelerometer + double Q_gyroBias; //process noise variance for the gyroscope bias + double R_angle; //measurement noise variance + }; + kalman kalmaspeed[3]; + kalman kalmameter[3]; + //KALMAN + kalman kalma[3]; }; #endif