Committer:
narshu
Date:
Thu Apr 26 20:11:48 2012 +0000
Revision:
2:8aa491f77a0b
Parent:
1:4964fa534202

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
narshu 0:e238496b8073 1 #ifndef KALMAN_H
narshu 0:e238496b8073 2 #define KALMAN_H
narshu 0:e238496b8073 3
narshu 0:e238496b8073 4 #include "globals.h"
narshu 0:e238496b8073 5
narshu 0:e238496b8073 6
narshu 0:e238496b8073 7 #include "rtos.h"
narshu 0:e238496b8073 8 //#include "Matrix.h"
narshu 0:e238496b8073 9 #include "motors.h"
narshu 0:e238496b8073 10 #include "RFSRF05.h"
narshu 0:e238496b8073 11 #include "IR.h"
narshu 2:8aa491f77a0b 12 #include "ui.h"
narshu 0:e238496b8073 13
narshu 0:e238496b8073 14 #include <tvmet/Matrix.h>
narshu 0:e238496b8073 15 #include <tvmet/Vector.h>
narshu 0:e238496b8073 16 using namespace tvmet;
narshu 0:e238496b8073 17
narshu 0:e238496b8073 18
narshu 0:e238496b8073 19 class Kalman {
narshu 0:e238496b8073 20 public:
narshu 0:e238496b8073 21 enum measurement_t {SONAR1 = 0, SONAR2, SONAR3, IR1, IR2, IR3};
narshu 0:e238496b8073 22 static const measurement_t maxmeasure = IR3;
narshu 1:4964fa534202 23
narshu 1:4964fa534202 24 Kalman(Motors &motorsin,
narshu 2:8aa491f77a0b 25 UI &uiin,
narshu 1:4964fa534202 26 PinName Sonar_Trig,
narshu 1:4964fa534202 27 PinName Sonar_Echo0,
narshu 1:4964fa534202 28 PinName Sonar_Echo1,
narshu 1:4964fa534202 29 PinName Sonar_Echo2,
narshu 1:4964fa534202 30 PinName Sonar_Echo3,
narshu 1:4964fa534202 31 PinName Sonar_Echo4,
narshu 1:4964fa534202 32 PinName Sonar_Echo5,
narshu 1:4964fa534202 33 PinName Sonar_SDI,
narshu 1:4964fa534202 34 PinName Sonar_SDO,
narshu 1:4964fa534202 35 PinName Sonar_SCK,
narshu 1:4964fa534202 36 PinName Sonar_NCS,
narshu 2:8aa491f77a0b 37 PinName Sonar_NIRQ,
narshu 2:8aa491f77a0b 38 PinName IR_Tx,
narshu 2:8aa491f77a0b 39 PinName IR_Rx);
narshu 1:4964fa534202 40
narshu 0:e238496b8073 41 void predict();
narshu 0:e238496b8073 42 void runupdate(measurement_t type, float value, float variance);
narshu 1:4964fa534202 43
narshu 0:e238496b8073 44 //State variables
narshu 0:e238496b8073 45 Vector<float, 3> X;
narshu 0:e238496b8073 46 Matrix<float, 3, 3> P;
narshu 0:e238496b8073 47 Mutex statelock;
narshu 1:4964fa534202 48
narshu 0:e238496b8073 49 float SonarMeasures[3];
narshu 0:e238496b8073 50 float IRMeasures[3];
narshu 0:e238496b8073 51 float SonarMeasure_Offset[3];
narshu 1:4964fa534202 52
narshu 0:e238496b8073 53 bool Kalman_init;
narshu 1:4964fa534202 54
narshu 0:e238496b8073 55 //The IR is public so it's possible to print the offset in the print function
narshu 0:e238496b8073 56 IR ir;
narshu 1:4964fa534202 57
narshu 0:e238496b8073 58 //Initialises the kalman filter
narshu 0:e238496b8073 59 void KalmanInit();
narshu 1:4964fa534202 60
narshu 0:e238496b8073 61 private:
narshu 1:4964fa534202 62
narshu 0:e238496b8073 63 //Sensor interfaces
narshu 0:e238496b8073 64 RFSRF05 sonararray;
narshu 0:e238496b8073 65 Motors& motors;
narshu 2:8aa491f77a0b 66 UI& ui;
narshu 1:4964fa534202 67
narshu 0:e238496b8073 68 Thread predictthread;
narshu 0:e238496b8073 69 void predictloop();
narshu 1:4964fa534202 70 static void predictloopwrapper(void const *argument) {
narshu 1:4964fa534202 71 ((Kalman*)argument)->predictloop();
narshu 1:4964fa534202 72 }
narshu 0:e238496b8073 73 RtosTimer predictticker;
narshu 1:4964fa534202 74
narshu 0:e238496b8073 75 // Thread sonarthread;
narshu 0:e238496b8073 76 // void sonarloop();
narshu 0:e238496b8073 77 // static void sonarloopwrapper(void const *argument){ ((Kalman*)argument)->sonarloop(); }
narshu 0:e238496b8073 78 // RtosTimer sonarticker;
narshu 1:4964fa534202 79
narshu 1:4964fa534202 80 struct measurmentdata {
narshu 0:e238496b8073 81 measurement_t mtype;
narshu 0:e238496b8073 82 float value;
narshu 0:e238496b8073 83 float variance;
narshu 0:e238496b8073 84 } ;
narshu 1:4964fa534202 85
narshu 0:e238496b8073 86 Mail <measurmentdata, 16> measureMQ;
narshu 1:4964fa534202 87
narshu 0:e238496b8073 88 Thread updatethread;
narshu 0:e238496b8073 89 void updateloop();
narshu 1:4964fa534202 90 static void updateloopwrapper(void const *argument) {
narshu 1:4964fa534202 91 ((Kalman*)argument)->updateloop();
narshu 1:4964fa534202 92 }
narshu 1:4964fa534202 93
narshu 1:4964fa534202 94
narshu 0:e238496b8073 95 };
narshu 0:e238496b8073 96
narshu 0:e238496b8073 97 #endif //KALMAN_H