2016-07-07 5 views
1

현재 모션 데이터를 사용하는 iOS 프로젝트를 진행 중입니다. 피치 및 롤 값으로 좋은 결과를 얻지 만, 요 값은 끊임없이 표류합니다. 나는 Kalman 필터를 적용했으며 결과는 동일하게 유지됩니다. 누구든지 해결 방법을 알고 있습니까? 여기 좌표보다 안정한 시스템의 "요잉"값의 구현을 필요로 정밀하게이 작업을 달성하기 위해 약간의 소스 코드 (목표 C)요 (각도) 값이 안정적이지 않아 몇도 벗어났습니다. 누구든지 그것을 해결하는 방법을 알고 있습니까?

[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical 
      toQueue:[NSOperationQueue currentQueue] 
      withHandler:^(CMDeviceMotion *motion, NSError *error) 
     { 
      //NSString *yaw = [NSString 
       //stringWithFormat:@" %.3f", motion.attitude.yaw]; 

      NSString *pitch = [NSString 
       stringWithFormat:@" %.3f", motion.attitude.pitch]; 

      NSString *roll = [NSString 
       stringWithFormat:@" %.3f", motion.attitude.roll]; 

      //Converting NSSring type variable in to a double 
      //double a_yaw = [yaw doubleValue]; 
      double a_pitch = [pitch doubleValue]; 
      double a_roll = [roll doubleValue]; 

      CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion; 
      double yaw = 180/M_PI * (asin(2*quat.x*quat.y + 2*quat.w*quat.z)); 

      // Kalman filtering 
      static float q = 0.1; // process noise 
      static float r = 0.1; // sensor noise 
      static float p = 0.1; // estimated error 
      static float k = 0.5; // kalman filter gain 

      float x = motionLastYaw; 
      p = p + q; 
      k = p/(p + r); 
      x = x + k*(yaw - x); 
      p = (1 - k)*p; 
      motionLastYaw = x; 

      //Converting angles to degrees 
      //yaw = yaw * 180/M_PI; 
      a_pitch = a_pitch * 180/M_PI; 
      a_roll = a_roll * 180/M_PI; 

답변

0

이다. 나는 센서 9-DOF (자이로 스코프, 가속도계 및 자력계)를 가지고 있으며,이 모든 데이터 만 결합하면 올바른 출력을 얻을 수 있습니다 ...