我有一个非常简单的应用程序,我试图通过核心运动使用陀螺仪。此时,出于测试目的,我只是获取翻滚、俯仰和偏航值并将其打印在屏幕上。根据下面的图片以及据我所知,翻滚、俯仰和偏航对应于红色、绿色和蓝色轴,对吗?
好的。当我将iPhone放在桌子上,靠在它的左侧(Home键在右边),与桌面平面成90度时,这些是我读到的翻滚、俯仰和偏航值:-90, 0, 0。然后我开始按顺时针方向绕着iPhone的垂直轴旋转,这在表面垂直轴上是正方向。在iPhone上,这意味着俯仰旋转,但随着旋转,俯仰保持不变,而偏航会改变!
如果iPhone在桌子上靠在它的左侧,那么绿色轴(俯仰)是垂直的。如果我沿着X轴逆时针旋转设备(正方向),我应该看到俯仰角度的增加,而不是偏航。
我唯一的解释是,当你旋转设备时,陀螺仪轴不会旋转。因此,如果我使用默认的态度参考,iPhone认为面朝上的静止位置是默认的,而蓝色轴(偏航)将始终是垂直的。这是正确的吗?
这是我正在使用的代码...
在主代码上
好的。当我将iPhone放在桌子上,靠在它的左侧(Home键在右边),与桌面平面成90度时,这些是我读到的翻滚、俯仰和偏航值:-90, 0, 0。然后我开始按顺时针方向绕着iPhone的垂直轴旋转,这在表面垂直轴上是正方向。在iPhone上,这意味着俯仰旋转,但随着旋转,俯仰保持不变,而偏航会改变!
如果iPhone在桌子上靠在它的左侧,那么绿色轴(俯仰)是垂直的。如果我沿着X轴逆时针旋转设备(正方向),我应该看到俯仰角度的增加,而不是偏航。
我唯一的解释是,当你旋转设备时,陀螺仪轴不会旋转。因此,如果我使用默认的态度参考,iPhone认为面朝上的静止位置是默认的,而蓝色轴(偏航)将始终是垂直的。这是正确的吗?
这是我正在使用的代码...
在主代码上
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0/60.0; //60 Hz
[motionManager startDeviceMotionUpdates];
timer = [[NSTimer scheduledTimerWithTimeInterval:(1.0/60.0)
target:self
selector:@selector( readIt )
userInfo:nil
repeats:YES]
retain];
剩余的代码
#define degrees(x) (180.0 * x / M_PI)
- (void) readIt {
// CMAttitude *referenceAttitude;
CMAttitude *attitude;
CMDeviceMotion *motion = motionManager.deviceMotion;
if (!motion) {
return;
}
attitude = motion.attitude;
NSLog(@"roll = %f... pitch = %f ... yaw = %f", degrees(attitude.roll), degrees(attitude.pitch), degrees(attitude.yaw));
}