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;