quadcopter cufe
/
FollowWall
follow wall 1
SpaceSensor.h@0:b703833f6795, 2014-04-08 (annotated)
- Committer:
- khaledelmadawi
- Date:
- Tue Apr 08 13:23:06 2014 +0000
- Revision:
- 0:b703833f6795
follow wall 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
khaledelmadawi | 0:b703833f6795 | 1 | #ifndef MBED_SpaceSsensor_H |
khaledelmadawi | 0:b703833f6795 | 2 | #define MBED_SpaceSsensor_H |
khaledelmadawi | 0:b703833f6795 | 3 | //#endif |
khaledelmadawi | 0:b703833f6795 | 4 | #include "mbed.h" |
khaledelmadawi | 0:b703833f6795 | 5 | #include "iostream" |
khaledelmadawi | 0:b703833f6795 | 6 | #include "math.h" |
khaledelmadawi | 0:b703833f6795 | 7 | using namespace std; |
khaledelmadawi | 0:b703833f6795 | 8 | |
khaledelmadawi | 0:b703833f6795 | 9 | class SpaceSensor { |
khaledelmadawi | 0:b703833f6795 | 10 | public: |
khaledelmadawi | 0:b703833f6795 | 11 | SpaceSensor(PinName p_tx, PinName p_rx); |
khaledelmadawi | 0:b703833f6795 | 12 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 13 | /*4.3.1 Commands for Reading Filtered Sensor Data |
khaledelmadawi | 0:b703833f6795 | 14 | These commands return sensor data which has been filtered using a Kalman filter. None of these commands take any |
khaledelmadawi | 0:b703833f6795 | 15 | parameters, they only return data. |
khaledelmadawi | 0:b703833f6795 | 16 | */ |
khaledelmadawi | 0:b703833f6795 | 17 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 18 | void ReadfilteredtaredQuaternion(float *Quaternion); |
khaledelmadawi | 0:b703833f6795 | 19 | void ReadfilteredtaredEulerAngles(float *EulerAngles); |
khaledelmadawi | 0:b703833f6795 | 20 | void ReadfilteredtaredRotationMatrix(float *RotationMatrix); |
khaledelmadawi | 0:b703833f6795 | 21 | void ReadfilteredtaredAxisAngle(float *Axis,float *Angle); |
khaledelmadawi | 0:b703833f6795 | 22 | void ReadfilteredtaredTwoVector(float *Forward,float *Down); |
khaledelmadawi | 0:b703833f6795 | 23 | |
khaledelmadawi | 0:b703833f6795 | 24 | void Readfilteredgyrorates(float *Quaternion); |
khaledelmadawi | 0:b703833f6795 | 25 | |
khaledelmadawi | 0:b703833f6795 | 26 | void ReadfiltereduntaredQuaternion(float *Quaternion); |
khaledelmadawi | 0:b703833f6795 | 27 | void ReadfiltereduntaredEulerAngles(float *EulerAngles); |
khaledelmadawi | 0:b703833f6795 | 28 | void ReadfiltereduntaredRotationMatrix(float *RotationMatrix); |
khaledelmadawi | 0:b703833f6795 | 29 | void ReadfiltereduntaredAxisAngle(float *Axis,float *Angle); |
khaledelmadawi | 0:b703833f6795 | 30 | void ReadfiltereduntaredTwoVector(float *Forward,float *Down); |
khaledelmadawi | 0:b703833f6795 | 31 | |
khaledelmadawi | 0:b703833f6795 | 32 | void ReadfilteredtaredForwardandDownVectors(float *Forward,float *Down); |
khaledelmadawi | 0:b703833f6795 | 33 | void ReadfilteredNorthEarthVectors(float *North,float *Earth); |
khaledelmadawi | 0:b703833f6795 | 34 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 35 | /*4.3.2 Commands for Interfacing with Electronic Systems*/ |
khaledelmadawi | 0:b703833f6795 | 36 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 37 | void Setinterrupttype(int mode); |
khaledelmadawi | 0:b703833f6795 | 38 | void Readinterrupttype(int *interrupttype); |
khaledelmadawi | 0:b703833f6795 | 39 | void Readinterruptstatus(int *interruptstatus); |
khaledelmadawi | 0:b703833f6795 | 40 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 41 | /*4.3.3 Commands for Reading Normalized Sensor Data |
khaledelmadawi | 0:b703833f6795 | 42 | These commands return sensor data which has been converted from a raw form. In the case of the normalized |
khaledelmadawi | 0:b703833f6795 | 43 | accelerometer and compass, the data returned are unit vectors, and as such, have no magnitude data associated with |
khaledelmadawi | 0:b703833f6795 | 44 | them. For data that represents real world quantities, both the unnormalized accelerometer command and unnormalized |
khaledelmadawi | 0:b703833f6795 | 45 | compass command return data in units of g and gauss respectively. Normalized gyro data is returned in radians/sec. |
khaledelmadawi | 0:b703833f6795 | 46 | */ |
khaledelmadawi | 0:b703833f6795 | 47 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 48 | void Readall(float *gyro,float *accelerometer,float *compass); |
khaledelmadawi | 0:b703833f6795 | 49 | void Readgyros(float *gyro); |
khaledelmadawi | 0:b703833f6795 | 50 | void Readaccelerometer(float *accelerometer); |
khaledelmadawi | 0:b703833f6795 | 51 | void Readcompass(float *compass); |
khaledelmadawi | 0:b703833f6795 | 52 | void ReadtemperatureC(float *temp); |
khaledelmadawi | 0:b703833f6795 | 53 | void ReadtemperatureF(float *temp); |
khaledelmadawi | 0:b703833f6795 | 54 | void Readconfidencefactor(float *confidencefactor); |
khaledelmadawi | 0:b703833f6795 | 55 | void Readaccelerometerunnormalized(float *accelunnormalized); |
khaledelmadawi | 0:b703833f6795 | 56 | void Readcompassunnormalized(float *compassunnormalized); |
khaledelmadawi | 0:b703833f6795 | 57 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 58 | /*4.3.4 Commands for Reading Raw Sensor Data |
khaledelmadawi | 0:b703833f6795 | 59 | These commands return sensor data just as it was when it was read from each sensor. None of these commands take any |
khaledelmadawi | 0:b703833f6795 | 60 | parameters, they only return data. |
khaledelmadawi | 0:b703833f6795 | 61 | */ |
khaledelmadawi | 0:b703833f6795 | 62 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 63 | void Readallraw(float *gyro,float *accelerometer,float *compass); |
khaledelmadawi | 0:b703833f6795 | 64 | void Readgyroraw(float *gyro); |
khaledelmadawi | 0:b703833f6795 | 65 | void Readaccelerometerraw(float *accelerometer); |
khaledelmadawi | 0:b703833f6795 | 66 | void Readcompassraw(float *compass); |
khaledelmadawi | 0:b703833f6795 | 67 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 68 | /*4.3.5 Commands for Setting Filter Parameters |
khaledelmadawi | 0:b703833f6795 | 69 | These commands allow the configuration of parameters associated with the Kalman filter. Most of these commands |
khaledelmadawi | 0:b703833f6795 | 70 | take parameters, none return any data. |
khaledelmadawi | 0:b703833f6795 | 71 | */ |
khaledelmadawi | 0:b703833f6795 | 72 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 73 | void Tarewithcurrentorientation(); |
khaledelmadawi | 0:b703833f6795 | 74 | void Tarewithquaternion(float Quaternion[4]); |
khaledelmadawi | 0:b703833f6795 | 75 | void Tarewithrotationmatrix(float RotationMatrix[9]); |
khaledelmadawi | 0:b703833f6795 | 76 | void SetStaticRhoModeAccelerometer(float rho); |
khaledelmadawi | 0:b703833f6795 | 77 | void SetConfidenceRhoModeAccelerometer(float min,float max); |
khaledelmadawi | 0:b703833f6795 | 78 | void SetStaticRhoModeCompass(float rho); |
khaledelmadawi | 0:b703833f6795 | 79 | void SetConfidenceRhoModeCompass(float min, float max); |
khaledelmadawi | 0:b703833f6795 | 80 | void SetDesiredUpdateRate(int t); |
khaledelmadawi | 0:b703833f6795 | 81 | void SetMultiReferenceVectorsWithCurrentOrientation(); |
khaledelmadawi | 0:b703833f6795 | 82 | void SetReferenceVectorMode(int mode); |
khaledelmadawi | 0:b703833f6795 | 83 | void SetOversampleRate(int rate); |
khaledelmadawi | 0:b703833f6795 | 84 | void EnableDisablegyros(int mode); |
khaledelmadawi | 0:b703833f6795 | 85 | void EnableDisableAccelerometer(int mode); |
khaledelmadawi | 0:b703833f6795 | 86 | void EnableDisableCompass(int mode); |
khaledelmadawi | 0:b703833f6795 | 87 | void ResetMultiReferenceVectorsToZero(); |
khaledelmadawi | 0:b703833f6795 | 88 | void SetMultiReferenceResolution(int mode); |
khaledelmadawi | 0:b703833f6795 | 89 | void SetCompassMultiReferenceVector(int Index,float Vector[3]); |
khaledelmadawi | 0:b703833f6795 | 90 | void SetCompassMultiReferenceCheckVector(int Index,float Vector[3]); |
khaledelmadawi | 0:b703833f6795 | 91 | void SetAccelMultiReferenceVector(int Index,float Vector[3]); |
khaledelmadawi | 0:b703833f6795 | 92 | void SetAccelMultiReferenceCheckVector(int Index,float Vector[3]); |
khaledelmadawi | 0:b703833f6795 | 93 | void SetAxisDirections(int direction); |
khaledelmadawi | 0:b703833f6795 | 94 | void SetRunningAveragePercent(float Percent); |
khaledelmadawi | 0:b703833f6795 | 95 | void SetCompassReferenceVector(float Vector[3]); |
khaledelmadawi | 0:b703833f6795 | 96 | void SetAccelerometerReferenceVector(float Vector[3]); |
khaledelmadawi | 0:b703833f6795 | 97 | void ResetKalmanFilter(); |
khaledelmadawi | 0:b703833f6795 | 98 | void SetAccelerometerRange(int Accelrange); |
khaledelmadawi | 0:b703833f6795 | 99 | void SetMultiReferenceWeightPower(float WeightPower); |
khaledelmadawi | 0:b703833f6795 | 100 | void EnableDisableFilter(int Mode); |
khaledelmadawi | 0:b703833f6795 | 101 | void SetRunningAverageMode(int Mode); |
khaledelmadawi | 0:b703833f6795 | 102 | void SetGyroscopeRange(int mode); |
khaledelmadawi | 0:b703833f6795 | 103 | void SetCompassRange(int mode); |
khaledelmadawi | 0:b703833f6795 | 104 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 105 | /*4.3.6 Commands for Reading Filter Parameters |
khaledelmadawi | 0:b703833f6795 | 106 | These commands allow the reading of parameters associated with the Kalman filter. All these commands return data, |
khaledelmadawi | 0:b703833f6795 | 107 | and accept no parameters. |
khaledelmadawi | 0:b703833f6795 | 108 | */ |
khaledelmadawi | 0:b703833f6795 | 109 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 110 | void ReadTareOrientationQuaternion(float *Quaternion); |
khaledelmadawi | 0:b703833f6795 | 111 | void ReadTareOrientationRotationMatrix(float *RotationMatrix); |
khaledelmadawi | 0:b703833f6795 | 112 | void ReadRhoDataAccelerometer(int *Rhomode,float *minroh,float *maxroh); |
khaledelmadawi | 0:b703833f6795 | 113 | void ReadRhoDataCompass(int *Rhomode,float *minroh,float *maxroh); |
khaledelmadawi | 0:b703833f6795 | 114 | void ReadCurrentUpdateRate(int *rate); |
khaledelmadawi | 0:b703833f6795 | 115 | void ReadCompassReferenceVector(float *Vector); |
khaledelmadawi | 0:b703833f6795 | 116 | void ReadAccelerometerReferenceVector(float *Vector); |
khaledelmadawi | 0:b703833f6795 | 117 | void ReadReferenceVectorMode(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 118 | void ReadCompassMultiReferenceVector(int Index,float *Vector); |
khaledelmadawi | 0:b703833f6795 | 119 | void ReadCompassMultiReferenceCheckVector(int Index,float *Vector); |
khaledelmadawi | 0:b703833f6795 | 120 | void ReadAccelMultiReferenceVector(int Index,float *Vector); |
khaledelmadawi | 0:b703833f6795 | 121 | void ReadAccelMultiReferenceCheckVector(int Index,float *Vector); |
khaledelmadawi | 0:b703833f6795 | 122 | void ReadGyroEnabledState(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 123 | void ReadAccelerometerEnabledState(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 124 | void ReadCompassEnabledState(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 125 | void ReadAxisDirections(int *direction); |
khaledelmadawi | 0:b703833f6795 | 126 | void ReadOversampleRate(int *Rate); |
khaledelmadawi | 0:b703833f6795 | 127 | void ReadRunningAveragePercent(float *Percent); |
khaledelmadawi | 0:b703833f6795 | 128 | void ReadDesiredUpdateRate(float *rate); |
khaledelmadawi | 0:b703833f6795 | 129 | void ReadKalmanFilterCovarianceMatrix(float *CovarianceMatrix); |
khaledelmadawi | 0:b703833f6795 | 130 | void ReadAccelerometerRange(int *Accelrange); |
khaledelmadawi | 0:b703833f6795 | 131 | void ReadMultiReferenceWeightPower(float *WeightPower); |
khaledelmadawi | 0:b703833f6795 | 132 | void ReadMultiReferenceResolution(int *Resolution); |
khaledelmadawi | 0:b703833f6795 | 133 | void ReadNumberOfmultiReferenceCells(int *NumberOfCells); |
khaledelmadawi | 0:b703833f6795 | 134 | void ReadFilterEnableState(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 135 | void ReadRunningAverageMode(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 136 | void ReadGyroscopeRange(int *mode); |
khaledelmadawi | 0:b703833f6795 | 137 | void ReadCompassRange(int *mode); |
khaledelmadawi | 0:b703833f6795 | 138 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 139 | /*4.3.7 Commands for Calibration |
khaledelmadawi | 0:b703833f6795 | 140 | These commands allow the configuration and reading of calibration parameters and enabling of calibration modes. |
khaledelmadawi | 0:b703833f6795 | 141 | */ |
khaledelmadawi | 0:b703833f6795 | 142 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 143 | void SetCompassCalibrationParameters(float Bias[3],float Matrix[9]); |
khaledelmadawi | 0:b703833f6795 | 144 | void SetAccelerometerCalibrationParameters(float Bias[3],float Matrix[9]); |
khaledelmadawi | 0:b703833f6795 | 145 | void ReadCompassCalibrationParameters(float *Bias,float *Matrix); |
khaledelmadawi | 0:b703833f6795 | 146 | void ReadAccelerometerCalibrationParameters(float *Bias,float *Matrix); |
khaledelmadawi | 0:b703833f6795 | 147 | void ReadGyroCalibrationParameters(float *Bias, float *range); |
khaledelmadawi | 0:b703833f6795 | 148 | void BeginGyroAutocalibration(); |
khaledelmadawi | 0:b703833f6795 | 149 | void SetGyroCalibrationParameters(float Bias[3], float range[3]); |
khaledelmadawi | 0:b703833f6795 | 150 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 151 | /*4.3.8 General Commands |
khaledelmadawi | 0:b703833f6795 | 152 | These commands are for the configuration of the sensor as a whole as opposed to configuration of the filter or sensors. |
khaledelmadawi | 0:b703833f6795 | 153 | */ |
khaledelmadawi | 0:b703833f6795 | 154 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 155 | void ReadSoftwareVersion(char *version); |
khaledelmadawi | 0:b703833f6795 | 156 | void RestoreFactorySettings(); |
khaledelmadawi | 0:b703833f6795 | 157 | void CommitSettings(); |
khaledelmadawi | 0:b703833f6795 | 158 | void SoftwareReset(); |
khaledelmadawi | 0:b703833f6795 | 159 | void EnableWatchdogTimer(int timer); |
khaledelmadawi | 0:b703833f6795 | 160 | void DisableWatchdogTimer(); |
khaledelmadawi | 0:b703833f6795 | 161 | void EnterFirmwareUpdateMode(); |
khaledelmadawi | 0:b703833f6795 | 162 | void ReadHardwareVersion(char *version); |
khaledelmadawi | 0:b703833f6795 | 163 | void SetUARTBaudRate(int Baudrate); |
khaledelmadawi | 0:b703833f6795 | 164 | void GetUARTBaudRate(int *Baudrate); |
khaledelmadawi | 0:b703833f6795 | 165 | void SetUSBmode(int mode); |
khaledelmadawi | 0:b703833f6795 | 166 | void GetUSBmode(int *mode); |
khaledelmadawi | 0:b703833f6795 | 167 | void SetClockSpeed(int clock); |
khaledelmadawi | 0:b703833f6795 | 168 | void GetClockSpeed(int *clock); |
khaledelmadawi | 0:b703833f6795 | 169 | void GetSerialnumber(int *serialnum); |
khaledelmadawi | 0:b703833f6795 | 170 | void SetLEDColor(float color[3]); |
khaledelmadawi | 0:b703833f6795 | 171 | void GetLEDColor(float *color); |
khaledelmadawi | 0:b703833f6795 | 172 | void EnableDisableJoystick(int Mode); |
khaledelmadawi | 0:b703833f6795 | 173 | void EnableDisablemouse(int Mode); |
khaledelmadawi | 0:b703833f6795 | 174 | void ReadJoystickEnabledState(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 175 | void ReadMouseEnabledState(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 176 | void SetControlMode(float Controlclass,float controlindex,float handlerindex); |
khaledelmadawi | 0:b703833f6795 | 177 | void SetControlData(float Controlclass,float controlindex,float datapointindex,float datapoint ); |
khaledelmadawi | 0:b703833f6795 | 178 | void ReadControlMode(float *Handlerindex, float Controlclass,float controlindex); |
khaledelmadawi | 0:b703833f6795 | 179 | void ReadControlData(float *Datapoint,float ControlClass,float controlIndex,float dataPointIndex); |
khaledelmadawi | 0:b703833f6795 | 180 | void SetMouseAbsoluteRelative(int Mode); |
khaledelmadawi | 0:b703833f6795 | 181 | void ReadMouseAbsoluteRelative(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 182 | void SetjoystickAndMousePresentRemoved(int Mode); |
khaledelmadawi | 0:b703833f6795 | 183 | void ReadjoystickAndMousePresentRemoved(int *Mode); |
khaledelmadawi | 0:b703833f6795 | 184 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 185 | /* |
khaledelmadawi | 0:b703833f6795 | 186 | clases needed to interface with the sensor |
khaledelmadawi | 0:b703833f6795 | 187 | */ |
khaledelmadawi | 0:b703833f6795 | 188 | /**********************************************************************************************************************/ |
khaledelmadawi | 0:b703833f6795 | 189 | |
khaledelmadawi | 0:b703833f6795 | 190 | |
khaledelmadawi | 0:b703833f6795 | 191 | private: |
khaledelmadawi | 0:b703833f6795 | 192 | Serial _SpaceSensor; |
khaledelmadawi | 0:b703833f6795 | 193 | char *st; |
khaledelmadawi | 0:b703833f6795 | 194 | float *vecf; |
khaledelmadawi | 0:b703833f6795 | 195 | char var[10]; |
khaledelmadawi | 0:b703833f6795 | 196 | void begin(long baud); |
khaledelmadawi | 0:b703833f6795 | 197 | void read_string(float *vector,char *c); |
khaledelmadawi | 0:b703833f6795 | 198 | }; |
khaledelmadawi | 0:b703833f6795 | 199 | |
khaledelmadawi | 0:b703833f6795 | 200 | #endif |