2010-11-23 7 views
2

私は、Android SDKとMotorola DroidのAndroid SDK用Adobe AIRを使用してAndroid Accelerometerを使用しています。私が気づいたことは、加速度計はうまく動作するということですが、デバイスを水平位置で使用する必要がないように、いくつかの方法で補正が可能かどうか疑問に思っていました。言い換えると、私は視覚的な表示を制御するために加速度計を使用したいが、それを完全にフラットに保つ必要はない(電話で傾けなくても楽しい)ように初期化する(または何らかの方法で修正する)。デバイスをフラットにしないでAndroid Accelerometerを使用する

誰かが私の手で装置を快適に持ち歩く方法を知っていますか(例えば、45度)、加速度計を使って順方向/逆方向の読み取り値を提供していますか?これは可能ですか?これはどれですか?

+0

こんにちは、 私はこれは古いですが、万が一の事例を見つけましたか? – xtrimsky

答えて

1

単純な行列乗算が必要です。アプリを起動して反転させた後、現在のマトリックスを取り込み、その後のすべてのマトリックスにそれを乗算することで、回転を「キャリブレート」します。これは、開始位置へのデルタを与えます。

+0

これは素晴らしいですね!まさにあなたは何を言ったのですか?私は変換と行列の乗算を理解しています。しかし、あなたが "現在の行列を私がアプリケーションを起動する"と "すべての次の行列"を参照するときは、加速度計またはディスプレイを指していますか?例のリード?ありがとうEboMike! – Shawn

+0

基本的に、加速度計を照会すると、行列が得られます。 (最近のコードサンプルをすべてチェックすると、それらはすべて行列で終わるでしょう。それらはオイラー角を得るためにジュジュ魔法をやることになりますが、それほど遠くに行かないでください - それを逆転させる)。その後、加速度計に再度照会するたびに、保存した初期行列で乗算します。それはあなたに素晴らしいデルタ行列を与えます - そして、あなたは進んでオイラー角を得ることができます。 – EboMike

+0

私は加速度計からのx、y、z値を意味していると思いますか?おそらく、コード例が明確になるでしょうか?ありがとうEboMike! – Shawn

0

私は長い間、相対回転を扱ったアプリケーションを書いていました。私はコードが何をしたのか忘れてしまったのですが、私の見ているものから、それは次のように思えます:

1) - SensorManager.getRotationMatrix(R、I、gravity.clone()、geomagnetic)を使って初期回転行列を取得します。クローン()); (重力と地磁気はそれぞれのアクセラレーションと地磁気の行列ですなぜクローンを使うのですか何らかの理由が必要です) 2)今どこの段階でも、現在のローテーション行列を取得し、それをRと呼んでください。 3)初期行列を "initialInverse"と呼びます。 4)initialInverseを使ってRを掛けます(または、他の方法では、それを理解する必要があります)。 5)SensorManager.getOrientation(デルタ、値)を使用して最終的な方向を取得してください

私は申し訳ありませんが、私は上記のコードが何をしているか完全に忘れました。私はこのアプリを書いたときにどこかにEuler Transformという言葉を読んで覚えていると思います。残念ながら、私はおそらく市場でこのアプリをリリースする予定なので、完全なコードを与えることはできません。しかし、より多くの情報が必要な場合は、私に知らせてください - 私はコードを調べて、あなたに連絡します。

0

私は、加速度計機能が位置によって制限されていないのと同様の性質を持つプロジェクトで作業しています。それを扱う私のやり方は非常に簡単で、現在の読み取り値をデフォルトとして加速度計を初期化します。言い換えれば、ボタンを押すと、適切な位置に電話機を置いてからボタンを押すと、加速度計の現在の測定値(Gの測定値)が参考値(ゼロ値)になり、あなたはそれらの読みの上または下に行く...これは誰も助けることを願って...歓声

関連する問題