web-dev-qa-db-ja.com

Androidで加速度計またはジャイロスコープを使用する場合

ほとんどのユーザーデバイスにジャイロスコープが搭載されていると仮定しても大丈夫ですか?言い換えれば、アプリでジャイロスコープを使用することで、かなりの数の人々を除外しますか?

私は子供向けの絵本アプリを作っています。ユーザーがヨー軸を中心にデバイスを傾けてロッキングチェアを前後に動かせるようにしたいと思っています。それはアプリの小さな部分であり、非常に正確である必要はありません。他のセンサーよりも使用するセンサーがありますか?

34
user2892857

ユーザーカバレッジ:

ほとんどのデバイスにはジャイロスコープと加速度計の両方がありますが、ほとんどeveryデバイスには加速度計があります。特に、古いデバイスと安価なデバイスにはジャイロスコープがありません。子供向けアプリであるため、両親は小さな子供たちにすばらしい700ドルのタブレットを使用させたくないので、おそらくもっと安いタブレットを使用することを忘れないでください。安価なデバイスにはジャイロスコープがない傾向があります。加速度計の場合は+1。

ユーザーエクスペリエンス

加速度計は、3次元座標系で加速度を測定します。ほとんどの場合(ユーザーが実際に飛び回ったり、デバイスを投げたりしない場合)、加速度の最大の部分は重力です。重力だけでも、傾きやわずかな動きを非常に簡単に判断できます。さらに、奇妙な動きを排除する重力ソフトウェアセンサーと、重力を排除する線形加速があります。ジャイロスコープは回転を検出します。これは、加速度計よりも感度が高く、より正確で、イベントをより速く生成しますが、このユースケースにとってはやり過ぎのようです。 3Dレーシングゲームやフライトシミュレータを作成したい場合は、ジャイロスコープにとっては勝利になりますが、子供向けアプリにとっては多すぎます。

バッテリー使用量

ここにはコンテストはありません。ジャイロスコープは3〜30倍のバッテリーを使用します(デバイスによってはさらに多くなる場合があります)が、加速度計はバッテリーに非常に優しいです。さらに、ほとんどのユーザーにとって、加速度計は既にアクティブになっているため(画面を自動的に回転させるため)、ここではセンサーのバッテリー使用量はありません。加速度計の場合は+1

プログラミング

センサーはAndroidアプリで実装するのが非常に簡単で簡単です。ジャイロスコープは回転速度を検出するため、デバイスが静止している場合(および+ -0.01rad/s)ので、わずかなifブロックだけで、ごくわずかな動きを排除できます(たとえば、ジャイロスコープの値が0.2 rad/s未満の場合)。デバイスの方向と実際にどの軸が動きの方向を決定するためにより注意を払う必要があるかです。それは難しくありませんが、それはあなたの仕事のラインにいくつかの余分なコード行といくつかの余分なデバッグを追加します。ジャイロスコープの場合は1。

結論

シンプルな子供向けアプリの場合、加速度計が最適です。私はもうそれについて考えません。精度についてはあまり気にしないので、実際にはジャイロスコープによって得られるポイントを排除します。

61
foibs

これらのセンサーは考慮すべきものだと思います(「Reto Meier、Professional Android 4 Application Development」という本から引用しています):

  • Sensor.TYPE_ACCELEROMETER — 3軸に沿った現在の加速度をm/s2(メートル毎秒、毎秒)で返す3軸加速度計。

  • Sensor.TYPE_GYROSCOPE— 3軸に沿ったデバイスの回転速度をラジアン/秒で返す3軸ジャイロスコープ。時間の経過に伴う回転速度を統合して、デバイスの現在の向きを判断できます。ただし、これを他のセンサー(通常は加速度計)と組み合わせて使用​​して、スムーズで補正された方向を提供することをお勧めします。

  • Sensor.TYPE_ROTATION_VECTOR —デバイスの向きを軸の周りの角度の組み合わせとして返します。通常、センサーマネージャーからgetRotationMatrixFromVectorメソッドへの入力として使用され、返された回転ベクトルを回転行列に変換します。回転ベクトルセンサーは通常、加速度センサーやジャイロスコープなどの複数のセンサーから得られた結果を組み合わせて修正できる仮想センサーとして実装され、より滑らかな回転行列を提供します。

引用の終わり... getDefaultSensorメソッドを使用して、特定のタイプのデフォルトのSensor実装を見つけることができます。例:

Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

Nullが返される場合、デバイスにはセンサーがないため、使用しないでください。大部分のデバイスにはこれらのセンサー(おそらく加速度計)が搭載されていると思います。これらは画面の回転を検出するために使用されるセンサーだからです。

3
NigelK

時間が経つにつれて、「典型的な」Androidデバイスで使用可能なセンサーの数とタイプはかなり劇的に変化しました。しかし、デバイスの向きを測定するいくつかの手段は古い機能の1つです。正しいアプローチは、新しいセンサーを実行時にテストし、古いセンサーにフォールバックする一方で、情報が単純に利用できない場合を優雅に処理することであると思われます。

Sensor Overiew 開発者ドキュメントには、Android AP​​Iレベルによって特定のセンサータイプが最初に利用可能になった時期を示す表があります。ただし、これはそのAPIレベルがそのデータ型について話す能力を反映しているだけであることに注意してください。特定のデバイスに必要なハードウェアがない場合があります。

加速度計とジャイロスコープは最も古いセンサーの1つであり、ほとんどの携帯電話に搭載されているようです。

現在(2013年12月) 開発者ダッシュボード は、PlayストアにアクセスするAndroidデバイスの約1.6%を除くすべてがバージョン2.3以降(API 10以降)であることを示しています。そのデータは、ストアを使用するバージョン2.2以降のデバイスのみに基づいており、2.2より古いデバイスは、2013年8月にGoogleサーバーにチェックインするすべてのデバイスの約1%にすぎませんでした。デバイスの他の機能をカバーしているように見えます。どんなセンサーが野生で利用可能かを具体的にカバーするダッシュボードを見つけることができませんでした。

1
RBerteig

ほとんどの携帯電話には傾斜機能があると思います。私は2歳の安っぽい携帯電話を持っていて、新品のときは45ドルで、Android 2.1、傾き、視点が変わります。
3歳のタブレットもありますが、あまりにも傾いています。
傾斜がそこにあると仮定すると、かなり安全だと思います。

1
baash05

ほとんどすべての(またはすべての)電話に加速度計があります。しかし、それらのすべてにジャイロスコープがあるわけではありません。誰かがジャイロスコープ付きの電話の完全でないリストをここで作成しました: Which Androidそこにある電話はジャイロスコープを持っていますか?

加速度計だけを使用して機能させることができれば、その特定のより多くのデバイスがアプリをサポートしますが、この違いがどれほど大きいかは本当にわかりません

1