48 #define cmd_VGplus (((((('V' << 8) | 'G') << 8) | '+') << 8) | ' ') // "VG+ " = enable angular velocity packet transmission 49 #define cmd_VGminus (((((('V' << 8) | 'G') << 8) | '-') << 8) | ' ') // "VG- " = disable angular velocity packet transmission 50 #define cmd_DBplus (((((('D' << 8) | 'B') << 8) | '+') << 8) | ' ') // "DB+ " = enable debug packet transmission 51 #define cmd_DBminus (((((('D' << 8) | 'B') << 8) | '-') << 8) | ' ') // "DB- " = disable debug packet transmission 52 #define cmd_Q3 (((((('Q' << 8) | '3') << 8) | ' ') << 8) | ' ') // "Q3 " = transmit 3-axis accelerometer quaternion in standard packet 53 #define cmd_Q3M (((((('Q' << 8) | '3') << 8) | 'M') << 8) | ' ') // "Q3M " = transmit 3-axis magnetic quaternion in standard packet 54 #define cmd_Q3G (((((('Q' << 8) | '3') << 8) | 'G') << 8) | ' ') // "Q3G " = transmit 3-axis gyro quaternion in standard packet 55 #define cmd_Q6MA (((((('Q' << 8) | '6') << 8) | 'M') << 8) | 'A') // "Q6MA" = transmit 6-axis mag/accel quaternion in standard packet 56 #define cmd_Q6AG (((((('Q' << 8) | '6') << 8) | 'A') << 8) | 'G') // "Q6AG" = transmit 6-axis accel/gyro quaternion in standard packet 57 #define cmd_Q9 (((((('Q' << 8) | '9') << 8) | ' ') << 8) | ' ') // "Q9 " = transmit 9-axis quaternion in standard packet (default) 58 #define cmd_RPCplus (((((('R' << 8) | 'P') << 8) | 'C') << 8) | '+') // "RPC+" = Roll/Pitch/Compass on 59 #define cmd_RPCminus (((((('R' << 8) | 'P') << 8) | 'C') << 8) | '-') // "RPC-" = Roll/Pitch/Compass off 60 #define cmd_ALTplus (((((('A' << 8) | 'L') << 8) | 'T') << 8) | '+') // "ALT+" = Altitude packet on 61 #define cmd_ALTminus (((((('A' << 8) | 'L') << 8) | 'T') << 8) | '-') // "ALT-" = Altitude packet off 62 #define cmd_RST (((((('R' << 8) | 'S') << 8) | 'T') << 8) | ' ') // "RST " = Soft reset 63 #define cmd_RINS (((((('R' << 8) | 'I') << 8) | 'N') << 8) | 'S') // "RINS" = Reset INS inertial navigation velocity and position 64 #define cmd_SVAC (((((('S' << 8) | 'V') << 8) | 'A') << 8) | 'C') // "SVAC" = save all calibrations to Kinetis flash 65 #define cmd_SVMC (((((('S' << 8) | 'V') << 8) | 'M') << 8) | 'C') // "SVMC" = save magnetic calibration to Kinetis flash 66 #define cmd_SVYC (((((('S' << 8) | 'V') << 8) | 'Y') << 8) | 'C') // "SVYC" = save gyroscope calibration to Kinetis flash 67 #define cmd_SVGC (((((('S' << 8) | 'V') << 8) | 'G') << 8) | 'C') // "SVGC" = save precision accelerometer calibration to Kinetis flash 68 #define cmd_ERAC (((((('E' << 8) | 'R') << 8) | 'A') << 8) | 'C') // "ERAC" = erase all calibrations from Kinetis flash 69 #define cmd_ERMC (((((('E' << 8) | 'R') << 8) | 'M') << 8) | 'C') // "ERMC" = erase magnetic calibration from Kinetis flash 70 #define cmd_ERYC (((((('E' << 8) | 'R') << 8) | 'Y') << 8) | 'C') // "ERYC" = erase gyro offset calibration from Kinetis flash 71 #define cmd_ERGC (((((('E' << 8) | 'R') << 8) | 'G') << 8) | 'C') // "ERGC" = erase precision accelerometer calibration from Kinetis flash 72 #define cmd_180X (((((('1' << 8) | '8') << 8) | '0') << 8) | 'X') // "180X" perturbation 73 #define cmd_180Y (((((('1' << 8) | '8') << 8) | '0') << 8) | 'Y') // "180Y" perturbation 74 #define cmd_180Z (((((('1' << 8) | '8') << 8) | '0') << 8) | 'Z') // "180Z" perturbation 75 #define cmd_M90X (((((('M' << 8) | '9') << 8) | '0') << 8) | 'X') // "M90X" perturbation 76 #define cmd_P90X (((((('P' << 8) | '9') << 8) | '0') << 8) | 'X') // "P90X" perturbation 77 #define cmd_M90Y (((((('M' << 8) | '9') << 8) | '0') << 8) | 'Y') // "M90Y" perturbation 78 #define cmd_P90Y (((((('P' << 8) | '9') << 8) | '0') << 8) | 'Y') // "P90Y" perturbation 79 #define cmd_M90Z (((((('M' << 8) | '9') << 8) | '0') << 8) | 'Z') // "M90Z" perturbation 80 #define cmd_P90Z (((((('P' << 8) | '9') << 8) | '0') << 8) | 'Z') // "P90Z" perturbation 81 #define cmd_PA00 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '0') // "PA00" average precision accelerometer location 0 82 #define cmd_PA01 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '1') // "PA01" average precision accelerometer location 1 83 #define cmd_PA02 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '2') // "PA02" average precision accelerometer location 2 84 #define cmd_PA03 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '3') // "PA03" average precision accelerometer location 3 85 #define cmd_PA04 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '4') // "PA04" average precision accelerometer location 4 86 #define cmd_PA05 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '5') // "PA05" average precision accelerometer location 5 87 #define cmd_PA06 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '6') // "PA06" average precision accelerometer location 6 88 #define cmd_PA07 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '7') // "PA07" average precision accelerometer location 7 89 #define cmd_PA08 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '8') // "PA08" average precision accelerometer location 8 90 #define cmd_PA09 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '9') // "PA09" average precision accelerometer location 9 91 #define cmd_PA10 (((((('P' << 8) | 'A') << 8) | '1') << 8) | '0') // "PA10" average precision accelerometer location 10 92 #define cmd_PA11 (((((('P' << 8) | 'A') << 8) | '1') << 8) | '1') // "PA11" average precision accelerometer location 11 100 for (i = 0; i < nbytes; i++) {
102 for (j = 0; j < 3; j++)
103 iCommandBuffer[j] = iCommandBuffer[j + 1];
104 iCommandBuffer[3] = sUART_InputBuffer[i];
107 isum = ((((((
int32)iCommandBuffer[0] << 8) | iCommandBuffer[1]) << 8) | iCommandBuffer[2]) << 8) | iCommandBuffer[3];
111 iCommandBuffer[3] =
'~';
116 iCommandBuffer[3] =
'~';
121 iCommandBuffer[3] =
'~';
126 iCommandBuffer[3] =
'~';
133 iCommandBuffer[3] =
'~';
140 iCommandBuffer[3] =
'~';
147 iCommandBuffer[3] =
'~';
154 iCommandBuffer[3] =
'~';
161 iCommandBuffer[3] =
'~';
165 #if F_9DOF_GBY_KALMAN 168 iCommandBuffer[3] =
'~';
173 iCommandBuffer[3] =
'~';
178 iCommandBuffer[3] =
'~';
183 iCommandBuffer[3] =
'~';
188 iCommandBuffer[3] =
'~';
203 iCommandBuffer[3] =
'~';
207 #if F_9DOF_GBY_KALMAN 208 for (i =
CHX; i <=
CHZ; i++) {
209 sfg->SV_9DOF_GBY_KALMAN.fVelGl[i] = 0.0F;
210 sfg->SV_9DOF_GBY_KALMAN.fDisGl[i] = 0.0F;
213 iCommandBuffer[3] =
'~';
220 iCommandBuffer[3] =
'~';
225 iCommandBuffer[3] =
'~';
230 iCommandBuffer[3] =
'~';
235 iCommandBuffer[3] =
'~';
242 iCommandBuffer[3] =
'~';
247 iCommandBuffer[3] =
'~';
252 iCommandBuffer[3] =
'~';
257 iCommandBuffer[3] =
'~';
262 iCommandBuffer[3] =
'~';
267 iCommandBuffer[3] =
'~';
272 iCommandBuffer[3] =
'~';
277 iCommandBuffer[3] =
'~';
282 iCommandBuffer[3] =
'~';
287 iCommandBuffer[3] =
'~';
292 iCommandBuffer[3] =
'~';
297 iCommandBuffer[3] =
'~';
302 iCommandBuffer[3] =
'~';
307 sfg->AccelBuffer.iStoreLocation = 0;
309 iCommandBuffer[3] =
'~';
313 sfg->AccelBuffer.iStoreLocation = 1;
315 iCommandBuffer[3] =
'~';
319 sfg->AccelBuffer.iStoreLocation = 2;
321 iCommandBuffer[3] =
'~';
325 sfg->AccelBuffer.iStoreLocation = 3;
327 iCommandBuffer[3] =
'~';
331 sfg->AccelBuffer.iStoreLocation = 4;
333 iCommandBuffer[3] =
'~';
337 sfg->AccelBuffer.iStoreLocation = 5;
339 iCommandBuffer[3] =
'~';
343 sfg->AccelBuffer.iStoreLocation = 6;
345 iCommandBuffer[3] =
'~';
349 sfg->AccelBuffer.iStoreLocation = 7;
351 iCommandBuffer[3] =
'~';
355 sfg->AccelBuffer.iStoreLocation = 8;
357 iCommandBuffer[3] =
'~';
361 sfg->AccelBuffer.iStoreLocation = 9;
363 iCommandBuffer[3] =
'~';
367 sfg->AccelBuffer.iStoreLocation = 10;
369 iCommandBuffer[3] =
'~';
373 sfg->AccelBuffer.iStoreLocation = 11;
375 iCommandBuffer[3] =
'~';
377 #endif // precision accelerometer calibration
Quaternion derived from full 9-axis sensor fusion.
void EraseGyroCalibrationFromNVM(void)
volatile quaternion_type QuaternionPacketType
quaternion type transmitted over UART
void fInitializeFusion(SensorFusionGlobals *sfg)
void SaveMagCalibrationToNVM(SensorFusionGlobals *sfg)
void fInitializeAccelCalibration(struct AccelCalibration *pthisAccelCal, struct AccelBuffer *pthisAccelBuffer, volatile int8 *AccelCalPacketOn)
Initialize the accelerometer calibration functions.
volatile uint8_t iPerturbation
test perturbation to be applied
Lower level sensor fusion interface.
struct MagBuffer MagBuffer
mag cal constellation points
void SaveAccelCalibrationToNVM(SensorFusionGlobals *sfg)
void EraseMagCalibrationFromNVM(void)
Quaternion derived from 3-axis mag only (auto compass algorithm)
#define ACCEL_CAL_AVERAGING_SECS
calibration constants
volatile uint8_t AltPacketOn
flag to enable altitude packet
Quaternion derived from 3-axis gyro only (rotation)
Quaternion derived from 3-axis accel + 3 axis mag (eCompass)
Quaternion derived from 3-axis accel + 3-axis gyro (gaming)
volatile uint8_t AngularVelocityPacketOn
flag to enable angular velocity packet
The top level fusion structure.
void SaveGyroCalibrationToNVM(SensorFusionGlobals *sfg)
void fInitializeMagCalibration(struct MagCalibration *pthisMagCal, struct MagBuffer *pthisMagBuffer)
The sensor_fusion.h file implements the top level programming interface.
volatile uint8_t RPCPacketOn
flag to enable roll, pitch, compass packet
#define CHZ
Used to access Z-channel entries in various data data structures.
#define CHX
Used to access X-channel entries in various data data structures.
Provides functions to store calibration to NVM.
struct MagCalibration MagCal
mag cal storage
Quaternion derived from 3-axis accel (tilt)
void EraseAccelCalibrationFromNVM(void)
#define FUSION_HZ
(int) actual rate of fusion algorithm execution and sensor FIFO reads
Defines control sub-system.
struct ControlSubsystem * pControlSubsystem
volatile int8_t AccelCalPacketOn
variable used to coordinate accelerometer calibration
void DecodeCommandBytes(SensorFusionGlobals *sfg, char iCommandBuffer[], uint8 sUART_InputBuffer[], uint16 nbytes)
volatile uint8_t DebugPacketOn
flag to enable debug packet