Implemented first Hangar-Service

Dependencies:   CalibrateMagneto QuaternionMath

Fork of SML2 by TobyRich GmbH

Committer:
pvaibhav
Date:
Wed May 27 13:01:43 2015 +0000
Revision:
46:fd5a62296b12
Parent:
43:6251c0169f4f
Code reformatted

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pvaibhav 15:4488660e1a3b 1 #ifndef _H_SENSORFUSION_H
pvaibhav 15:4488660e1a3b 2 #define _H_SENSORFUSION_H
pvaibhav 15:4488660e1a3b 3
pvaibhav 15:4488660e1a3b 4 #include "I2CPeripheral.h"
pvaibhav 15:4488660e1a3b 5 #include "Magnetometer.h"
pvaibhav 15:4488660e1a3b 6 #include "Accelerometer.h"
pvaibhav 15:4488660e1a3b 7 #include "Gyroscope.h"
pvaibhav 15:4488660e1a3b 8 #include "Quaternion.h"
pvaibhav 40:8e852115fe55 9 #include "Filter.h"
pvaibhav 15:4488660e1a3b 10
pvaibhav 40:8e852115fe55 11 class SensorFusion
pvaibhav 15:4488660e1a3b 12 {
pvaibhav 15:4488660e1a3b 13 public:
pvaibhav 20:503cbe360419 14 class Delegate
pvaibhav 20:503cbe360419 15 {
pvaibhav 21:5a0c9406e119 16 public:
pvaibhav 34:01dec68de3ed 17 virtual void sensorTick(float dt, Vector3 fused, Vector3 accel, Vector3 magneto, Vector3 gyro, Quaternion q) {}
pvaibhav 20:503cbe360419 18 };
pvaibhav 40:8e852115fe55 19
pvaibhav 46:fd5a62296b12 20 void setDelegate(Delegate &d) {
pvaibhav 46:fd5a62296b12 21 delegate = &d;
pvaibhav 46:fd5a62296b12 22 }
pvaibhav 46:fd5a62296b12 23
pvaibhav 46:fd5a62296b12 24 virtual bool start() {
pvaibhav 46:fd5a62296b12 25 return false;
pvaibhav 46:fd5a62296b12 26 }
pvaibhav 40:8e852115fe55 27 virtual void stop() {}
pvaibhav 15:4488660e1a3b 28
pvaibhav 40:8e852115fe55 29 protected:
pvaibhav 40:8e852115fe55 30 // protected ctor so that base class cannot be instantiated directly
pvaibhav 40:8e852115fe55 31 SensorFusion() : delegate(&defaultDelegate), q(1, 0, 0, 0) {}
pvaibhav 40:8e852115fe55 32 Delegate defaultDelegate; // to avoid check for existence every time
pvaibhav 40:8e852115fe55 33 Delegate* delegate;
pvaibhav 40:8e852115fe55 34 Quaternion q;
pvaibhav 40:8e852115fe55 35 };
pvaibhav 15:4488660e1a3b 36
pvaibhav 40:8e852115fe55 37 class SensorFusion6 : public SensorFusion, public Sensor::Delegate
pvaibhav 40:8e852115fe55 38 {
pvaibhav 40:8e852115fe55 39 public:
pvaibhav 40:8e852115fe55 40 SensorFusion6(I2C &i2c);
pvaibhav 40:8e852115fe55 41 virtual void sensorUpdate(Vector3 gyro_degrees);
pvaibhav 40:8e852115fe55 42 virtual bool start();
pvaibhav 40:8e852115fe55 43 virtual void stop();
pvaibhav 46:fd5a62296b12 44
pvaibhav 40:8e852115fe55 45 protected:
pvaibhav 40:8e852115fe55 46 Accelerometer accel;
pvaibhav 40:8e852115fe55 47 Gyroscope gyro;
pvaibhav 40:8e852115fe55 48 float const deltat, beta;
pvaibhav 46:fd5a62296b12 49
pvaibhav 40:8e852115fe55 50 LowPassFilter lowpassX;
pvaibhav 40:8e852115fe55 51 LowPassFilter lowpassY;
pvaibhav 40:8e852115fe55 52 LowPassFilter lowpassZ;
pvaibhav 46:fd5a62296b12 53
pvaibhav 35:fb6e4601adf3 54 void updateFilter(float ax, float ay, float az, float gx, float gy, float gz);
pvaibhav 15:4488660e1a3b 55 };
pvaibhav 15:4488660e1a3b 56
pvaibhav 43:6251c0169f4f 57 class SensorFusion9 : public SensorFusion6
pvaibhav 43:6251c0169f4f 58 {
pvaibhav 43:6251c0169f4f 59 public:
pvaibhav 43:6251c0169f4f 60 SensorFusion9(I2C &i2c);
pvaibhav 43:6251c0169f4f 61 virtual void sensorUpdate(Vector3 gyro_degrees);
pvaibhav 43:6251c0169f4f 62 virtual bool start();
pvaibhav 43:6251c0169f4f 63 virtual void stop();
pvaibhav 46:fd5a62296b12 64
pvaibhav 43:6251c0169f4f 65 protected:
pvaibhav 43:6251c0169f4f 66 Magnetometer magneto;
pvaibhav 43:6251c0169f4f 67 void updateFilter(float ax, float ay, float az, float gx, float gy, float gz, float mx, float my, float mz);
pvaibhav 43:6251c0169f4f 68 };
pvaibhav 43:6251c0169f4f 69
pvaibhav 15:4488660e1a3b 70 #endif