Implemented first Hangar-Service
Dependencies: CalibrateMagneto QuaternionMath
Fork of SML2 by
SensorFusion.h
- Committer:
- uadhikari
- Date:
- 2015-05-20
- Revision:
- 41:731e3cfac19b
- Parent:
- 35:fb6e4601adf3
- Child:
- 42:160a37bdaa64
File content as of revision 41:731e3cfac19b:
#ifndef _H_SENSORFUSION_H #define _H_SENSORFUSION_H #include "I2CPeripheral.h" #include "Magnetometer.h" #include "Accelerometer.h" #include "Gyroscope.h" #include "Quaternion.h" class SensorFusion : public Sensor::Delegate { public: class Delegate { public: virtual void sensorTick(float dt, Vector3 fused, Vector3 accel, Vector3 magneto, Vector3 gyro, Quaternion q) {} }; SensorFusion(I2C &i2c); SensorFusion(const SensorFusion& s); virtual ~SensorFusion(); void setDelegate(Delegate &d); void getMagnetometerCalibration(Vector3 &min, Vector3 &max); virtual bool start(); virtual void stop(); virtual void sensorUpdate(Vector3 gyro_degrees); // gyro's callback protected: Delegate defaultDelegate; // to avoid check for existence every time Delegate* delegate; Accelerometer accel; Gyroscope gyro; Magnetometer magneto; Quaternion q; float const deltat, beta; Vector3 fused; void startAccelerometer(); void startGyrometer(); bool startMagnetometer(); void stopAccelerometer(); void stopGyrometer(); void stopMagnetometer(); }; class NineAxesSensor : public SensorFusion { public: NineAxesSensor(I2C &i2c); NineAxesSensor(const NineAxesSensor& c); virtual ~NineAxesSensor(); virtual bool start(); virtual void stop(); virtual void sensorUpdate(Vector3 gyro_degrees); private: void updateFilter(float ax, float ay, float az, float gx, float gy, float gz, float mx, float my, float mz); }; class SixAxesSensor : public SensorFusion { public: SixAxesSensor(I2C &i2c); SixAxesSensor(const SixAxesSensor& c); virtual ~SixAxesSensor(); virtual bool start(); virtual void stop(); virtual void sensorUpdate(Vector3 gyro_degrees); private: void updateFilter(float ax, float ay, float az, float gx, float gy, float gz); }; #endif