8

CoreMotion을 사용하여 ccompass 표제를 얻었으며 나침반 표제와 관련된 몇 가지 문제점을 발견했습니다.CoreMotion에서 잘못된 나침반 표제 값

처음에 CoreMotion을 초기화했습니다. CMMotionManager 객체 인 locationManager가 있습니다.이 객체는 CMMotionManager의 인스턴스입니다.

위치 데이터는 1/30.0 초마다 업데이트됩니다.

디버깅 목적으로 나는 모든 업데이트 간격마다 업데이트되는 현재 나침반 표제를 보여주는 UILabel을 가지고 있습니다. 응용 프로그램을 시작하는 동안 나침반 교정을 위해 항상 마법 8을 수행해야합니다.

나침반을 보정 한 후 북쪽과 남쪽의 표제는 거의 2-5 초 동안 정확합니다.

바로 몇 초 후 나침반이 거칠어지고 각도가 뛰어 오릅니다. 주로 시작 위치에서 양방향으로 약 10-20도 부동입니다. 이상한 결과를 낳기를 열망했습니다. 30-60 초가 지나면 지금도 남쪽과 북쪽이 바뀌거나 동쪽과 서쪽이 서로 보입니다.

WWDC 2011에서이 문제를 보완하기 위해 각 센서를 다른 센서로 어떻게 계산하는지 세션이 논의되었습니다. CoreMotion의 설정에서 내가 놓친 부분이 있는데 정확한 표제 결과와 관련하여 큰 문제가 있습니까?

저는 건물 내외부에 3 개의 장치 (2 개의 iPhone 4 및 iPhone 4)가있는 나침반을 테스트했습니다. 나는 들판, 작은 도시와 큰 도시에 있었다. 그것은 항상 발생합니다. Apple의 샘플 나침반 앱은 테스트에서 90 %의 정확도로 거의 정확합니다. 불행히도 애플에 의해 오픈 소스가 아닙니다.

읽어 주셔서 감사합니다.

답변

3

CoreMotion을 사용하면 에서까지 CoreLocation을 통해 원하는 정보를 얻을 수 있습니다.

은 기본적으로 휴대 전화는 다음과 같이 비활성화, locationManagerShouldDisplayHeadingCalibration:를 오버라이드 (override), 교정 그림 8 할 것입니다 : 당신이 startUpdateHeading를 호출하는 경우

- (BOOL)locationManagerShouldDisplayHeadingCalibration: (CLLocationManager *)manager { 
    return NO; 
} 

그것은 질문의 코드에서 분명하지 않다. 그렇지 않다면, 그렇게 : 당신이, 당신이 그렇게 할 것을 권 해드립니다 제목 필터를 설정하지 않는 경우

if([CLLocationManager locationServicesEnabled] && [CLLocationManager headingAvailable]) { 
    [myLocationManager startUpdatingLocation]; 
    [myLocationManager startUpdatingHeading]; 
} 

당신은 미친 결과를 얻을 수 있습니다. 그 후에 didUpdateHeading이 호출되면 위치 관리자 위임자의 제목이 변경됩니다.

핸드셋이 가로 모드 인 경우 표제가 세로 프레임에 항상 있기 때문에 표제를 적절한 각도 (+/- 90)로 조정해야합니다.

+0

답장을 보내 주셔서 감사합니다. 저는 다른 프로젝트를 위해 월요일에 마감 시간을 받았고 지금 당장은 그것을 시험 할 수 없습니다. 나는 너의 제안을 점검 할 것이다. 그것은 꽤 좋아 보인다. 나는 며칠 후에 너에게 더 많이 알려줄 것이다. 고맙습니다! – DasFuxx

+0

지연되어서 죄송합니다. iam이 지금 테스트 =) – DasFuxx

+0

CoreLocation을 통해 CoreMotion을 사용한다는 것은 무엇을 의미합니까?비슷한 문제가 있고 CoreLocation에서 나오는 솔기가 대부분 정확하지만 CoreMotion에서 참으로 북쪽으로 참조 프레임을 설정하면 장치 동작 데이터가 점프 및/또는 표류하는 것처럼 보입니다. – pzo