commit!

Committer:
narshu
Date:
Fri Jun 15 20:40:17 2012 +0000
Revision:
0:42026f893a2d

        

Who changed what in which revision?

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