문제
iOS 앱에 핵심 모션 관리자가 있습니다.
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0 / 60.0;
if ([motionManager isDeviceMotionAvailable]) {
[motionManager startDeviceMotionUpdates];
}
.
및 업데이트 방법 (Cocos3d를 사용하고 있지만 중요하지 않습니다.)이 있습니다.
-(void) updateBeforeTransform:(CC3NodeUpdatingVisitor *)visitor
{
if (motionManager.deviceMotionActive)
{
CMDeviceMotion *deviceMotion = motionManager.deviceMotion;
CMAttitude *attitude = deviceMotion.attitude;
NSLog(@"%f, %f, %f", attitude.yaw, attitude.pitch, attitude.roll);
}
}
.
나는 테이블에 장치를 넣고, 요, 피치 및 롤 가치를보기 시작하고, 요가 끊임없이 변화하고있다!몇 분 안에 약 10도 동안 변화하고 있으며, 내 앱에서 절대적으로 intelutely입니다.그 변화의 이유는 무엇이며 어떻게 피할 수 있습니까?나는 그것이 지구 회전 때문에 그것이 일어난 것이라고 생각하기 시작했지만, 속도가 너무 많습니다 :)
미리 감사드립니다!
해결책
어둠 속에서 촬영을 시도하겠습니다. iOS 5 자력계 데이터는 코어 모션 센서 융합 알고리즘의 일부입니다. 게임과 같은 많은 응용 프로그램의 경우 에너지 소비가 증가하고 사용자 가이 8을 움직이게하는 것에 대해 사용자 가이 8을 수행 할 수있는 나침반을 보정해야 할 필요가 있습니다.
CMMOTIONMANAGER의 startdevicemotionupdatesusingreferenceframe startdevicemotionupdates . cmattitudeReferenceFrameXMagnethNorthzvertical 및 표류 효과가 감소하는지 확인하십시오.
다른 팁
겪고있는 것은 드리프트라는 것이고 당신은 그것에 대해 많이 할 수는 없습니다.
기본적으로 자이로 스코프는 회전 속도를 측정하는 데 매우 우수하지만 순간적인 방향을 측정 할 수는 없습니다. 따라서, 디바이스의 전류 방향을 계산하기 위해 센서 알고리즘은 감지율을 위치로 통합해야합니다. 그러나 위치가 계산되면서 작은 오류가 시간이 지남에 따라 쌓아 올리고 계산 된 방향이 장치가 대부분 여전히 남아 있더라도 드리프트 할 수 있습니다.
장치가 자력계와 같은 순간 방향을 측정 할 수있는 센서가있는 경우 센서 융합 알고리즘은 센서 입력을 비교 / 결합하여 드리프트를 수정할 수 있으므로 Apple의 참조 프레임 옵션 : cmattudeReferenceFramexarBitraryCorrectectionSfical.
그러나 Apple의 구현은 완벽하지 않습니다. 그래서 CmattItUdeReferenceFramexarBitryCorrectedzvertical이 활성화되어있을 때 대규모 점프를 앞뒤로 올바르게 올바르게 올바르게 올바르게 올바르게 표시 할 수 있습니다. 더 나은 알고리즘은 적어도 시간이 지남에 따라 오류 수정을 부드럽게 부드럽게합니다.