6

誰かがすでにiphoneコンパスの機首方位傾斜補正をプログラムしましたか?

私はいくつかのアプローチを持っていますが、いくつかの助けやより良い解決策はクールでしょう!

最初に、GvとHvの外積から計算されたベクトルEvを定義します。Gvは、加速度計の値から作成された重力ベクトルであり、Hvは、磁力計の値から作成された方位ベクトルです。EvはGvとHvに垂直に立っているので、horizo​​natlEastに向かっています。

2番目のiは、外積BvとGvから計算されたベクトルRvを定義します。Bvは私の見た目のベクトルであり、[0,0、-1]として定義されています。RvはGvとBvに垂直で、常に右側に表示されます。

3番目に、これら2つのベクトル、EvとRvの間の角度が、私の修正された見出しになるはずです。角度を計算するには、内積とその内積を作成します。

phi = arcos(Ev * Rv / | Ev | * | Rv |)

理論的には機能するはずですが、ベクトルを正規化する必要があるかもしれません。

誰かがこれに対する解決策を持っていますか?

ありがとう、m01d

4

3 に答える 3

3

うん。あなたは間違いなく正規化する必要があります。これは、デバイスの向きを抽出するために使用するコードからのものです。重力は加速度計の x、y、z として取得され、方位関数の x、y、z からコンパスが取得されます。

重力.正規化(); コンパス.正規化(); compassEast=gravity.cross(コンパス);
compassEast.normalize();
compassNorth=compassEast.cross(重力); compassNorth.normalize();

完全なコードが必要な場合はお知らせください。また、iPhone 4s のジャイロスコープの動作をまだ見たことがない人にとっては、驚くべきことです。上記の入力を重力とコンパスに置き換えて、ジャイロからの同等のものに置き換えたところ、結果は安定して滑らかで素晴らしいものになりました:) Appleに行きましょう。

于 2010-09-18T00:52:55.947 に答える
2

ソースコードは受け取っていませんが、独自の例をセットアップしました。ここでプロジェクトとコードを見ることができます: http://www.sundh.com/blog/2011/09/stabalize-compass-of-iphone-with-gyroscope/

于 2011-09-19T15:28:19.083 に答える
0

はい、上記のようにしました。しかし、結果はあまり正確ではありません。よりスムーズな加速度計の値では、そのように機能するはずです。このため、対応する軸の加速度モーターの値をコンパスの値に加算/減算することで傾斜補正を行うことにしました。

上記のソリューションのコードは次のとおりですが、最終的な実用的なソリューションではありません。

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
if (newHeading != nil) {
float Ax = accelerationValueX;
float Ay = accelerationValueY;
float Az = accelerationValueZ;
float filterFactor = 0.2;
Mx = [newHeading x] * filterFactor + (Mx * (1.0 - filterFactor));
My = [newHeading y] * filterFactor + (My * (1.0 - filterFactor));
Mz = [newHeading z] * filterFactor + (Mz * (1.0 - filterFactor));

float counter = (  -pow(Ax, 2)*Mz + Ax*Az*Mx - pow(Ay, 2)*Mz + Ay*Az*My );
float denominator = ( sqrt( pow((My*Az-Mz*Ay), 2) + pow((Mz*Ax-Mx*Az), 2) + pow((Mx*Ay-My*Ax), 2) ) * sqrt(pow(Ay, 2)+pow(-Ax, 2)) );
headingCorrected = (acos(counter/denominator)* (180.0 / M_PI)) * filterFactor + (headingCorrected * (1.0 - filterFactor));
}
...
}
于 2010-05-19T11:35:40.567 に答える