如何使用deviceMotion姿态值(滚动,俯仰和偏航)来检测运动

时间:2013-05-17 06:30:17

标签: ios core-motion

我在我的应用中使用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];

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

1 个答案:

答案 0 :(得分:8)

态度值需要将设备运动更新启动为:

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 link