123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #include "turnDetection.h"
- #define TURNING_THRESHOLD 1.0
- #define ALPHA 0.9
- float previousPitch = 0.0;
- float previousRoll = 0.0;
- float previousYaw = 0.0;
- float previousAngularVelocity = 0.0;
- uint8_t turnFlag = 0;
- uint8_t gyroscopeDataAnomaly = 0;
- float getAngularVelocity(void)
- {
- int16_t gyroscopeData[3] = {0};
-
- atk_ms6050_get_gyroscope(&gyroscopeData[0], &gyroscopeData[1], &gyroscopeData[2]);
-
-
- float gyroMagnitude = sqrt(pow(gyroscopeData[0], 2) + pow(gyroscopeData[1], 2) + pow(gyroscopeData[2], 2));
- return gyroMagnitude;
- }
- float lowPassFilter(float previousValue, float rawValue) {
- return ALPHA * previousValue + (1 - ALPHA) * rawValue;
- }
- int isTurning(void) {
-
- float roll = 0.0, pitch = 0.0, yaw = 0.0;
-
- global_par *p_global_par = &s_global_par;
-
- while(atk_ms6050_dmp_get_data(&pitch,&roll,&yaw)!=0){}
-
- if((pitch == 0) && (roll == 0) && (yaw == 0)){
- p_global_par->gyroDataFaultFlag = 1;
- return 0;
- }else{
- p_global_par->gyroDataFaultFlag = 0;
- }
-
- float angularVelocity = getAngularVelocity();
-
- pitch = lowPassFilter(previousPitch, pitch);
- roll = lowPassFilter(previousRoll, roll);
- yaw = lowPassFilter(previousYaw, yaw);
- angularVelocity = lowPassFilter(previousAngularVelocity, angularVelocity);
-
- float pitchChangeRate = fabs(pitch - previousPitch);
- float rollChangeRate = fabs(roll - previousRoll);
- float yawChangeRate = fabs(yaw - previousYaw);
-
- if (pitchChangeRate > TURNING_THRESHOLD || rollChangeRate > TURNING_THRESHOLD || yawChangeRate > TURNING_THRESHOLD) {
- turnFlag = 1;
- } else {
- turnFlag = 0;
- }
-
- previousPitch = pitch;
- previousRoll = roll;
- previousYaw = yaw;
- previousAngularVelocity = angularVelocity;
- if(turnFlag == 1){
- return 1;
- }else{
- return 0;
- }
- }
|