コードに問題はありません。iPhone が CoreMotions に何を使用しているか知りたいです(修理/修理したいため)。
これをここに掲載すべきかどうかはわかりません。
iPhone がモーションの更新を送信するために何を使用しているか知りたいです。そして、それらを処理するために何を使用しますか。
私の問題は、モーションの更新を送信していないため、iPhone に問題があることです。私が受け取っているものをテストするために、小さなプロジェクトを書きました。動作中のデバイスでは、次のような出力が得られました。
2013-11-15 09:39:44.415 GyroTest[12165:60b] QuaternionX -0.508156 QuaternionY -0.515390 QuaternionZ 0.487396 QuaternionW 0.488463
UserAccelX 0.002124 UserAccelY 0.007351 UserAccelZ 0.006973
RotationRateX -0.051634 RotationRateY 0.080035 RotationRateZ 0.025516
MagneticFieldX 0.000000 MagneticFieldY 0.000000 MagneticFieldZ 0.000000 MagneticFieldAccuracy -1 @ 386510.678629
2013-11-15 09:39:44.418 GyroTest[12165:60b] -1.395383
2013-11-15 09:39:44.419 GyroTest[12165:60b] -1.522387
2013-11-15 09:39:44.420 GyroTest[12165:60b] -2.972348
しかし、私のデバイス(障害のあるデバイス)では、次のようになります。
2013-11-15 09:39:18.191 GyroTest[12165:60b] (null)
2013-11-15 09:39:18.192 GyroTest[12165:60b] 0.000000
2013-11-15 09:39:18.193 GyroTest[12165:60b] 0.000000
2013-11-15 09:39:18.194 GyroTest[12165:60b] 0.000000
これが私のサンプルプロジェクトです:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.motionManager = [[CMMotionManager alloc] init];
self.referenceAttitude = nil;
[self enableGyro];
for (int i = 0 ; i < 100 ; ++i) {
[self getDeviceGLRotationMatrix];
}
}
-(void) enableGyro{
CMDeviceMotion *deviceMotion = self.motionManager.deviceMotion;
CMAttitude *attitude = deviceMotion.attitude;
self.referenceAttitude = attitude;
[self.motionManager startGyroUpdates];
[self.motionManager startAccelerometerUpdates];
[self.motionManager startDeviceMotionUpdates];
[self.motionManager startMagnetometerUpdates];
}
-(void) getDeviceGLRotationMatrix
{
CMDeviceMotion *deviceMotion = self.motionManager.deviceMotion;
CMAttitude *attitude = deviceMotion.attitude;
if (self.referenceAttitude != nil)
[attitude multiplyByInverseOfAttitude:self.referenceAttitude];
NSLog(@"------------------");
NSLog(@"%@",self.motionManager.deviceMotion);
NSLog(@"%f",attitude.yaw);
NSLog(@"%f",attitude.pitch);
NSLog(@"%f",attitude.roll);
sleep(1);
}