2016-03-10 3 views
2

Я использую этот код для определения позиции устройства. Roll & Значения основного тона выглядят хорошо (они равны 0, когда устройство находится на столе), но когда рыскание равно 0, компас указывает на запад. Что не так?CMAttitudeReferenceFrameXTrueNorthZVertical не указывает на север

 [self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:[NSOperationQueue currentQueue] 
                withHandler: ^(CMDeviceMotion *motion, NSError *error){ 
                 [self performSelectorOnMainThread:@selector(handleDeviceMotion:) withObject:motion waitUntilDone:YES]; 
                }]; 
    } 
} 

- (void)handleDeviceMotion:(CMDeviceMotion*)motion { 
    CMAttitude *attitude = motion.attitude; 
    double yaw = attitude.yaw * 180/M_PI; 
    double pitch = attitude.pitch * 180/M_PI; 
    double roll = attitude.roll * 180/M_PI; 
    self.xLabel.text = [NSString stringWithFormat:@"%7.4f", yaw]; 
    self.yLabel.text = [NSString stringWithFormat:@"%7.4f", pitch]; 
    self.zLabel.text = [NSString stringWithFormat:@"%7.4f", roll]; 
    [self sendDeviceAttitudeLogWithYaw:yaw pitch:pitch roll:roll]; 
} 

ответ

4

Когда рыскания является 0, телефон должен указывать на север, нет?

Что вы подразумеваете под "телефоном"? Вопрос в том, что часть телефона. Давайте читать документы:

CMAttitudeReferenceFrameXTrueNorthZVertical

Описывает систему отсчета, в которой ось Z является вертикальной и точки оси X в направлении истинного севера.

Ось X направлена ​​с правой стороны устройства. Поэтому вы должны ожидать, что рыскание будет 0, когда правая сторона устройства будет на север.

+0

Благодарим Вас за прекрасное описание! Теперь я понимаю. – am1kk

+0

Если мой ответ помог вам и был прав, пожалуйста, примите его (галочка). Благодаря! – matt

+0

Это великолепно! Я включил приложение компаса на своем iPad и всегда находил разрыв в 90 ° между севером и голосом телефона. –

Смежные вопросы