7

coreMotion在我的应用程序中使用来检测 iOS 设备的运动。我知道如何从中获取不同传感器的数据coreMotion。我从以下位置获取滚动、俯仰和偏航数据deviceMotion

 float pitch =  (180/M_PI)*self.manager.deviceMotion.attitude.pitch];
 float roll = (180/M_PI)*self.manager.deviceMotion.attitude.roll];
 float yaw = (180/M_PI)*self.manager.deviceMotion.attitude.yaw];

如何使用这些数据来检测运动?我需要为此做哪些计算?

4

1 回答 1

10

姿态值需要设备运动更新开始为:

startDevicemotionUpdates

要在设备移动时监控姿态值,请使用要在标签中显示的姿态值:

[self.cmMotionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *devMotion, NSError *error) {

float pitch =  (180/M_PI)*self.manager.devMotion.attitude.pitch];
float roll = (180/M_PI)*self.manager.devMotion.attitude.roll];
float yaw = (180/M_PI)*self.manager.devMotion.attitude.yaw];

self.rollLabel.text = [NSString stringWithFormat:@"%f", roll];
self.pitchLabel.text = [NSString stringWithFormat:@"%f",pitch];
self.yawLabel.text = [NSString stringWithFormat:@"%f",yaw];
}

此外,最好不要使用滚动、俯仰和偏航(又名欧拉角)。使用四元数或旋转矩阵以获得更好的准确性。欧拉角倾向于处于一种称为万向节锁定的情况,这会导致数据不可靠。

请查看此链接以了解如何使用四元数,并将该值转换为滚动、俯仰和偏航值:SO 链接

于 2013-09-30T08:55:46.627 回答