我在我的应用中使用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];
如何使用这些数据来检测动作?我需要为此做些什么计算?
答案 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