2

CADisplayLink コールバックで取得した「姿勢」値をログに記録してCMMotionManager deviceMotionいます (デバイスの回転に基づいてアニメーションを実行する必要があります)。

値は、数ミリ秒ごとに非常に大きな程度 (最大 30%) で「痙攣」しているように見えます。これはかなり揺れるようで、私が何か間違ったことをしているのか、それともデバイスに問題があるのか​​ 疑問に思います.

以下のログを見つけてください。印刷された「角度」は、度に変換された「姿勢」の「ロール」コンポーネントです。


2013-04-10 00:07:12.683 MyApp[450:707] Angle: -92.91
2013-04-10 00:07:12.712 MyApp[450:707] Angle: -70.52
2013-04-10 00:07:12.714 MyApp[450:707] Angle: -92.25
2013-04-10 00:07:12.745 MyApp[450:707] Angle: -70.03
2013-04-10 00:07:12.747 MyApp[450:707] Angle: -91.74
2013-04-10 00:07:12.779 MyApp[450:707] Angle: -69.67
2013-04-10 00:07:12.784 MyApp[450:707] Angle: -91.23
2013-04-10 00:07:12.812 MyApp[450:707] Angle: -69.43
2013-04-10 00:07:12.815 MyApp[450:707] Angle: -91.19
2013-04-10 00:07:12.846 MyApp[450:707] Angle: -69.53
2013-04-10 00:07:12.849 MyApp[450:707] Angle: -91.33
2013-04-10 00:07:12.879 MyApp[450:707] Angle: -69.74
2013-04-10 00:07:12.881 MyApp[450:707] Angle: -91.57
2013-04-10 00:07:12.912 MyApp[450:707] Angle: -70.01
2013-04-10 00:07:12.915 MyApp[450:707] Angle: -91.85
2013-04-10 00:07:12.945 MyApp[450:707] Angle: -70.13
2013-04-10 00:07:12.949 MyApp[450:707] Angle: -91.99
2013-04-10 00:07:12.979 MyApp[450:707] Angle: -70.03
2013-04-10 00:07:12.983 MyApp[450:707] Angle: -91.93
2013-04-10 00:07:13.012 MyApp[450:707] Angle: -69.76
2013-04-10 00:07:13.016 MyApp[450:707] Angle: -91.71
2013-04-10 00:07:13.046 MyApp[450:707] Angle: -69.34
2013-04-10 00:07:13.051 MyApp[450:707] Angle: -91.19
2013-04-10 00:07:13.079 MyApp[450:707] Angle: -68.89
2013-04-10 00:07:13.082 MyApp[450:707] Angle: -90.94
2013-04-10 00:07:13.112 MyApp[450:707] Angle: -68.52
2013-04-10 00:07:13.114 MyApp[450:707] Angle: -90.66
2013-04-10 00:07:13.151 MyApp[450:707] Angle: -67.85
2013-04-10 00:07:13.156 MyApp[450:707] Angle: -89.47
2013-04-10 00:07:13.179 MyApp[450:707] Angle: -65.66
2013-04-10 00:07:13.181 MyApp[450:707] Angle: -88.10
2013-04-10 00:07:13.212 MyApp[450:707] Angle: -63.81
2013-04-10 00:07:13.216 MyApp[450:707] Angle: -86.33
2013-04-10 00:07:13.245 MyApp[450:707] Angle: -61.07
2013-04-10 00:07:13.248 MyApp[450:707] Angle: -83.63
2013-04-10 00:07:13.279 MyApp[450:707] Angle: -58.95
2013-04-10 00:07:13.282 MyApp[450:707] Angle: -81.46
2013-04-10 00:07:13.312 MyApp[450:707] Angle: -56.71
2013-04-10 00:07:13.314 MyApp[450:707] Angle: -79.06
2013-04-10 00:07:13.346 MyApp[450:707] Angle: -53.29
2013-04-10 00:07:13.350 MyApp[450:707] Angle: -75.23
2013-04-10 00:07:13.380 MyApp[450:707] Angle: -51.63
2013-04-10 00:07:13.383 MyApp[450:707] Angle: -73.37
2013-04-10 00:07:13.414 MyApp[450:707] Angle: -50.35
2013-04-10 00:07:13.418 MyApp[450:707] Angle: -72.11
2013-04-10 00:07:13.446 MyApp[450:707] Angle: -50.08
2013-04-10 00:07:13.450 MyApp[450:707] Angle: -72.01
2013-04-10 00:07:13.479 MyApp[450:707] Angle: -50.50
2013-04-10 00:07:13.488 MyApp[450:707] Angle: -73.51
2013-04-10 00:07:13.512 MyApp[450:707] Angle: -51.25
2013-04-10 00:07:13.514 MyApp[450:707] Angle: -74.14
2013-04-10 00:07:13.545 MyApp[450:707] Angle: -49.98
2013-04-10 00:07:13.547 MyApp[450:707] Angle: -72.96
2013-04-10 00:07:13.579 MyApp[450:707] Angle: -46.99
2013-04-10 00:07:13.582 MyApp[450:707] Angle: -68.58
2013-04-10 00:07:13.612 MyApp[450:707] Angle: -43.01
2013-04-10 00:07:13.616 MyApp[450:707] Angle: -65.32
2013-04-10 00:07:13.645 MyApp[450:707] Angle: -40.92
2013-04-10 00:07:13.647 MyApp[450:707] Angle: -62.80
2013-04-10 00:07:13.680 MyApp[450:707] Angle: -39.70
2013-04-10 00:07:13.683 MyApp[450:707] Angle: -61.30
2013-04-10 00:07:13.712 MyApp[450:707] Angle: -40.74
2013-04-10 00:07:13.714 MyApp[450:707] Angle: -63.06
2013-04-10 00:07:13.745 MyApp[450:707] Angle: -42.29
2013-04-10 00:07:13.747 MyApp[450:707] Angle: -65.68
2013-04-10 00:07:13.779 MyApp[450:707] Angle: -43.18
2013-04-10 00:07:13.780 MyApp[450:707] Angle: -67.58
2013-04-10 00:07:13.812 MyApp[450:707] Angle: -42.13
2013-04-10 00:07:13.815 MyApp[450:707] Angle: -66.35
2013-04-10 00:07:13.845 MyApp[450:707] Angle: -40.95
2013-04-10 00:07:13.848 MyApp[450:707] Angle: -64.67
2013-04-10 00:07:13.879 MyApp[450:707] Angle: -39.73
2013-04-10 00:07:13.881 MyApp[450:707] Angle: -62.90
2013-04-10 00:07:13.913 MyApp[450:707] Angle: -40.06
2013-04-10 00:07:13.916 MyApp[450:707] Angle: -63.12
2013-04-10 00:07:13.947 MyApp[450:707] Angle: -40.78
2013-04-10 00:07:13.949 MyApp[450:707] Angle: -63.39
2013-04-10 00:07:13.979 MyApp[450:707] Angle: -41.51
2013-04-10 00:07:13.981 MyApp[450:707] Angle: -62.78
2013-04-10 00:07:14.012 MyApp[450:707] Angle: -42.06
2013-04-10 00:07:14.014 MyApp[450:707] Angle: -61.77
2013-04-10 00:07:14.045 MyApp[450:707] Angle: -43.89
2013-04-10 00:07:14.047 MyApp[450:707] Angle: -61.02
2013-04-10 00:07:14.079 MyApp[450:707] Angle: -45.41
2013-04-10 00:07:14.080 MyApp[450:707] Angle: -61.20
2013-04-10 00:07:14.112 MyApp[450:707] Angle: -46.93
2013-04-10 00:07:14.114 MyApp[450:707] Angle: -61.53
2013-04-10 00:07:14.146 MyApp[450:707] Angle: -49.21
2013-04-10 00:07:14.147 MyApp[450:707] Angle: -62.76
2013-04-10 00:07:14.179 MyApp[450:707] Angle: -51.34
2013-04-10 00:07:14.182 MyApp[450:707] Angle: -64.51
2013-04-10 00:07:14.212 MyApp[450:707] Angle: -53.39
2013-04-10 00:07:14.214 MyApp[450:707] Angle: -66.41
2013-04-10 00:07:14.245 MyApp[450:707] Angle: -56.29
2013-04-10 00:07:14.248 MyApp[450:707] Angle: -69.30
2013-04-10 00:07:14.279 MyApp[450:707] Angle: -57.85
2013-04-10 00:07:14.280 MyApp[450:707] Angle: -70.88
2013-04-10 00:07:14.312 MyApp[450:707] Angle: -60.23

測定された角度は、数ミリ秒ごとにほぼ 20 度ずつ「ちらつき」ます。これまで CoreMotion について読んだ内容に基づいて、エラーが予想されていましたが、この範囲ではありませんでした。

何か間違ったことをしている可能性があります-正しいことを測定していませんか?



編集: 以下のコード - 書式設定について申し訳ありません。「code」と「blockquote」の両方が正しく機能していないようです。


//モーションの更新を開始する前に、ユーザーに少しくつろがせます。
//現時点では、これは単純なアイドル タイマーの形式であり、
//アプリを起動してから最初の 9 秒後に起動されます (正当な理由)


- (void)didFireIdleTimer:(id)theTimer {

[mReferenceAttitude release];
mReferenceAttitude = [[[sSharedMotionManager deviceMotion] 姿勢] 保持];

[セルフストップアイドルタイマー];
}

//sSharedMotionManager は CMMotionManager のインスタンスです

//次に、「現在の」deviceMotion
が //毎回取得され、現在の「姿勢」
と参照「姿勢」の差が //取得される表示リンク コールバックを設定しています計算されます。あるのはこの違いです
//度数に変換されて 出力され

ます //これは表示リンクのコールバックで、遅延名が付けられています。:)
- (void)didRefreshScreen:(id)sender {

CMAttitude *thisAttitude = [[sSharedMotionManager deviceMotion] 姿勢];
[thisAttitudemultiplyByInverseOfAttitude:mReferenceAttitude];

NSLog(@"Angle: %0.2f", thisAttitude.roll * 180 / 3.14159);

//残りのコード
//....
}
4

3 に答える 3

1

数時間のテストにより、インスタンスdeviceMotionUpdateIntervalに設定されていないために問題が発生したことが確認されました。CMMotionManager(または他の有効な値)に設定すると、1.0/60.0この「ちらつき」が修正され、値がスムーズに変化します。

于 2013-04-12T07:09:40.417 に答える
0

5月のアプリでちらつきを避けるための私のコードは次のとおりです。

float xAxis,yAxis, zAxis;
xAxis = self.manager.accelerometerData.acceleration.x;
yAxis = self.manager.accelerometerData.acceleration.y;
zAxis = self.manager.accelerometerData.acceleration.z;

// returns if the phone is lying on the table:
if (zAxis < -0.8 || zAxis > 0.8) return;

CGFloat angle =  atan2f(xAxis, yAxis ); // The angle!!!

float noise = 0.011; // Flicker noise (the noise you want to filter)

// max and min are global variables
if (angle > max){
    max = angle;
    min = max - noise;
}
if (angle < min){
    min = angle;
    max = min + noise;
}

// Average: (no flickering):
angle = min + (max - min) / 2.0;
于 2014-05-23T02:57:34.603 に答える
0

値を見ると、毎秒の一連の測定が問題ないように見えます。つまり、1、3、5、7、... および 2、4、6、8、... は安定したシーケンスを構築していることを意味します。ほとんどの場合、これは 2 つのインスタンスが実行されているか、参照姿勢が切り替えられていることを示しています。

于 2013-04-10T08:42:23.917 に答える