Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る
このページは Cloud Translation API によって翻訳されました。
Switch to English

センサーの種類

このセクションでは、センサー軸、ベースセンサー、および複合センサー(アクティビティ、姿勢、未校正、相互作用)について説明します。

センサー軸

多くのセンサーからのセンサーイベント値は、デバイスに対して静的な特定のフレームで表現されます。

モバイルデバイスの軸

センサーAPIは、画面の自然な向きにのみ相対的です(デバイスの画面の向きが変わっても、軸は交換されません)。

モバイルデバイス用センサーAPIの座標系

図1.センサーAPIで使用される(モバイルデバイスを基準とした)座標系

自動車軸

Android Automotiveの実装では、軸は車体フレームに対して定義されます。

自動車用センサーAPIの座標系

図2.センサーAPIが使用する座標系(自動車デバイスを基準)

  • Xは車両の右側に向かって増加します
  • Yはボディフレームの鼻に向かって増加します
  • 本体フレームの屋根に向かってZが増加します

座標系の原点は、車両の後車軸の中心にあります。軸の正の方向から見ると、正の回転は反時計回りです。したがって、車両が左折している場合、z軸ジャイロスコープの回転率は正の値になると予想されます。

ベースセンサー

基本センサータイプは、それらが表す物理センサーに基づいて名前が付けられます。これらのセンサーは、単一の物理センサーからのデータを中継します(他のセンサーからデータを生成する複合センサーとは対照的です)。ベースセンサータイプの例は次のとおりです。

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

ただし、ベースセンサーは同等ではなく、基礎となる物理センサーと混同しないでください。補正(バイアス補正や温度補正など)が適用されるため、ベースセンサーからのデータは物理センサーの生の出力ではありません

たとえば、次の使用例では、ベースセンサーの特性は、基礎となる物理センサーの特性と異なる場合があります。

  • バイアス範囲が1度/秒の定格のジャイロスコープチップ。
    • 工場でのキャリブレーション、温度補正、バイアス補正が適用された後、Androidセンサーの実際のバイアスは減少し、バイアスが0.01度/秒未満になることが保証されるポイントになる場合があります。
    • この状況では、基礎となるセンサーのデータシートに1度/秒と記載されていても、Androidセンサーには0.01度/秒未満のバイアスがあると言えます。
  • 消費電力が100 uWの気圧計。
    • 生成されたデータはチップからSoCに転送する必要があるため、気圧計Androidセンサーからデータを収集するための実際の電力コストは、たとえば1000 uWなど、はるかに高くなる可能性があります。
    • この状況では、気圧計のチップリードで測定された消費電力は100uWですが、Androidセンサーの消費電力は1000 uWです。
  • キャリブレーション時に100uWを消費するが、キャリブレーション時により多く消費する磁力計。
    • その校正ルーチンでは、ジャイロスコープをアクティブにし、5000 uWを消費し、いくつかのアルゴリズムを実行する必要があり、さらに900 uWのコストがかかります。
    • この状況では、(磁力計)Androidセンサーの最大消費電力は6000 uWです。
    • この場合、平均消費電力がより有用な指標であり、HALを通じてセンサーの静的特性で報告されるものです。

加速度計

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) は非ウェイクアップセンサーを返します

加速度センサーは、3つのセンサー軸に沿ったデバイスの加速度を報告します。測定された加速度には、物理​​的な加速度(速度の変化)と重力の両方が含まれます。測定値は、sensors_event_t.accelerationのx、y、およびzフィールドで報告されます。

すべての値はSI単位(m / s ^ 2)であり、デバイスの加速度から3つのセンサー軸に沿った重力を差し引いて測定します。

次に例を示します。

  • (x、y、z)のノルムは、自由落下時には0に近いはずです。
  • デバイスがテーブルの上に平らに置かれ、左側が右側に押されると、x加速度値は正になります。
  • デバイスがテーブル上に横になっている場合、zに沿った加速度値は+9.81 aloです。これは、デバイスの加速度(0 m / s ^ 2)から重力(-9.81 m / s ^ 2)を引いた値に相当します。
  • デバイスがテーブルの上に横になって空に向かって押された場合、加速度の値は+9.81より大きくなります。これは、デバイスの加速度(+ A m / s ^ 2)から重力(-9.81 m)を引いたものに相当します。 / s ^ 2)。

読み取り値は、以下を使用して調整されます。

  • 温度補償
  • オンラインバイアス校正
  • オンラインスケール校正

バイアスとスケールのキャリブレーションは、ストリーミング中に値が急上昇しないように、センサーが非アクティブになっているときにのみ更新する必要があります。

加速度計は、センサーの読み取り値がsensors_event_t.acceleration.status介して予測される精度も報告します。このフィールドの可能な値の詳細については、 SensorManagerSENSOR_STATUS_*定数を参照してください。

周囲温度

レポートモード: 変更中

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) はウェイクアップしないセンサーを返します

このセンサーは、摂氏での周囲(室内)温度を提供します。

磁場センサー

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) はウェイクアップしないセンサーを返します

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

磁場センサー(磁力計とも呼ばれます)は、3つのセンサー軸に沿って測定された周囲の磁場を報告します。

測定値は、 sensors_event_t.magneticのx、y、およびzフィールドで報告され、すべての値はマイクロテスラ(uT)です。

磁力計は、 sensors_event_t.magnetic.status読み取り値がsensors_event_t.magnetic.status介してどの程度正確であると予想するかを報告します。このフィールドの可能な値の詳細については、 SensorManagerSENSOR_STATUS_*定数を参照してください。

読み取り値は、以下を使用して調整されます。

  • 温度補償
  • 工場(またはオンライン)のソフトアイアン校正
  • オンラインハードアイアンキャリブレーション

ジャイロスコープ

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) はウェイクアップしないセンサーを返します

ジャイロスコープセンサーは、3つのセンサー軸を中心としたデバイスの回転速度を報告します。

回転は反時計回りに正です(右手の法則)。つまり、原点に配置されたデバイスのx、y、またはz軸の正の位置から見ている観測者は、デバイスが反時計回りに回転しているように見える場合、正の回転を報告します。これは正の回転の標準的な数学的定義であり、ロールの航空宇宙の定義と一致しないことに注意してください。

測定値は、 sensors_event_t.gyroのx、y、およびzフィールドで報告され、すべての値はラジアン/秒(rad / s)です。

読み取り値は、以下を使用して調整されます。

  • 温度補償
  • 工場(またはオンライン)のスケール補正
  • オンラインバイアスキャリブレーション(ドリフトを取り除くため)

ジャイロスコープはまた、 sensors_event_t.gyro.statusによる読み取りがどれほど正確であるかを予測します。このフィールドの可能な値の詳細については、 SensorManagerSENSOR_STATUS_*定数を参照してください。

磁力計と加速度計に基づいてジャイロスコープをエミュレートすることはできません。これにより、ジャイロスコープがローカルの整合性と応答性を低下させる原因となるためです。通常のジャイロスコープチップに基づいている必要があります。

心拍数

レポートモード: 変更中

getDefaultSensor(SENSOR_TYPE_HEART_RATE) はウェイクアップしないセンサーを返します

心拍数センサーは、デバイスに触れている人の現在の心拍数を報告します。

現在の心拍数/分(BPM)は、 sensors_event_t.heart_rate.bpmで報告され、センサーのステータスは、 sensors_event_t.heart_rate.statusで報告されsensors_event_t.heart_rate.status 。このフィールドの可能な値の詳細については、 SensorManagerSENSOR_STATUS_*定数を参照してください。特に、最初のアクティブ化では、デバイスが本体上にないことがわかっている場合を除き、最初のイベントのステータスフィールドをSENSOR_STATUS_UNRELIABLEに設定する必要があります。このセンサーは変更されているため、最後のイベント以降にheart_rate.bpmまたはheart_rate.statusが変更された場合にのみ、イベントが生成されます。イベントはすべてのsampling_periodより速く生成されません。

sensor_t.requiredPermissionは常にSENSOR_PERMISSION_BODY_SENSORSです。

レポートモード: 変更中

getDefaultSensor(SENSOR_TYPE_LIGHT) はウェイクアップしないセンサーを返します

光センサーは、現在の照度をSIルクス単位で報告します。

測定値は、 sensors_event_t.lightで報告されsensors_event_t.light

近接

レポートモード: 変更中

通常はウェイクアップセンサーとして定義されます

getDefaultSensor(SENSOR_TYPE_PROXIMITY) はウェイクアップセンサーを返します

近接センサーは、センサーから最も近い可視面までの距離を報告します。

Android 4.4までは、近接センサーは常にウェイクアップセンサーであり、近接の変化を検出するとSoCをウェイクアップしました。 Android 4.4以降は、このセンサーのウェイクアップバージョンを最初に実装することをお勧めします。これは、通話中に画面をオンまたはオフにするために使用されるものです。

測定値は、 sensors_event_t.distanceでセンチメートル単位で報告されsensors_event_t.distance 。一部の近接センサーは、バイナリの「近い」または「遠い」測定のみをサポートすることに注意してください。この場合、センサーは、「far」状態でのsensor_t.maxRange値と、「near」状態でのsensor_t.maxRange未満の値を報告します。

圧力

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_PRESSURE) はウェイクアップしないセンサーを返します

圧力センサー(気圧計とも呼ばれます)は、ヘクトパスカル(hPa)で大気圧を報告します。

読み取り値は、

  • 温度補償
  • 工場バイアス校正
  • 工場規模の校正

気圧計は標高の変化を推定するためによく使用されます。絶対標高を推定するには、海面気圧(天候によって変化する)を基準として使用する必要があります。

相対湿度

レポートモード: 変更中

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) はウェイクアップしないセンサーを返します

相対湿度センサーは、周囲の相対湿度を測定し、値をパーセントで返します。

複合センサーのタイプ

複合センサーは、1つまたは複数の物理センサーからのデータを処理または融合してデータを生成します。 (ベースセンサーではないセンサーは、複合センサーと呼ばれます。)複合センサーの例には次のものがあります。

  • 歩数検出器重要な動き 。通常、加速度計に基づいていますが、電力消費と精度が許容範囲内であれば、他のセンサーにも基づくことができます。
  • 加速度計とジャイロスコープに基づくゲーム回転ベクトル
  • キャリブレーションされていないジャイロスコープ 。これはジャイロスコープのベースセンサーに似ていますが、バイアスキャリブレーションは測定で修正されるのではなく、個別に報告されます。

基本センサーと同様に、複合センサーの特性は、最終的なデータの特性に由来します。たとえば、ゲームの回転ベクトルの消費電力は、おそらく加速度計チップ、ジャイロスコープチップ、データを処理するチップ、およびデータを転送するバスの消費電力の合計に等しいでしょう。別の例として、ゲームの回転ベクトルのドリフトは、物理センサーの特性だけでなく、キャリブレーションアルゴリズムの品質にも依存します。

次の表に、使用可能な複合センサータイプを示します。各複合センサーは、1つまたは複数の物理センサーからのデータに依存しています。ユーザーエクスペリエンスが低下するため、他の基本的な物理センサーを選択して結果を概算することは避けてください。

センサータイプカテゴリー基礎となる物理センサーレポートモード

ゲーム回転ベクトル

姿勢

加速度計、ジャイロスコープ、磁力計を使用してはならない

継続的

地磁気回転ベクトル 低電力センサー

姿勢

加速度計、磁力計、ジャイロスコープを使用してはならない

継続的

一目でジェスチャー 低電力センサー

インタラクション

未定義

ワンショット

重力

姿勢

加速度計、ジャイロスコープ

継続的

ジャイロスコープ未校正

未校正

ジャイロスコープ

継続的

線形加速度

アクティビティ

加速度計、ジャイロスコープ(存在する場合)、または磁力計(ジャイロが存在しない場合)

継続的

校正されていない磁場

未校正

磁力計

継続的

向き (非推奨)

姿勢

加速度計、磁力計、ジャイロスコープ(存在する場合)

継続的

ジェスチャーを拾う 低電力センサー

インタラクション

未定義

ワンショット

回転ベクトル

姿勢

加速度計、磁力計、ジャイロスコープ

継続的

重要な動き 低電力センサー

アクティビティ

加速度計(または非常に低い電力であれば別の加速度計)

ワンショット

歩数計 低電力センサー

アクティビティ

加速度計

変更中

ステップ検出器 低電力センサー

アクティビティ

加速度計

特殊な

傾き検出器 低電力センサー

アクティビティ

加速度計

特殊な

目を覚ます 低電力センサー

インタラクション

未定義

ワンショット

低電力センサー =低電力センサー

活動複合センサー

線形加速度

基礎となる物理センサー:加速度計と(存在する場合)ジャイロスコープ(またはジャイロスコープが存在しない場合は磁力計)

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) はウェイクアップしないセンサーを返します

線形加速度センサーは、センサーフレーム内のデバイスの線形加速度を報告します。重力は含まれません。

出力は概念的に、 加速度計の出力から重力センサーの出力を差し引いたものです。これは、 sensors_event_t.acceleration x、y、およびzフィールドのm / s ^ 2で報告されます。

デバイスが動かない場合、すべての軸の読み取り値は0に近いはずです。

デバイスがジャイロスコープを備えている場合、線形加速度センサーはジャイロスコープと加速度計を入力として使用する必要があります。

デバイスにジャイロスコープがない場合、線形加速度センサーは加速度計と磁力計を入力として使用する必要があります。

重要な動き

基礎となる物理センサー:加速度計(または低電力であれば別のセンサー)

レポーティングモード: ワンショット

低電力

このセンサーのウェイクアップバージョンのみを実装します。

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) はウェイクアップセンサーを返します

ユーザーの位置の変更につながる可能性がある運動:大きな動き検出器のトリガーは大きな動きを検出するとき。

そのような重要な動きの例は次のとおりです。

  • ウォーキングやサイクリング
  • 移動中の車、コーチ、電車に座っている

重要な動きを引き起こさない状況の例:

  • 電話をポケットに入れて、人が動かない
  • 電話がテーブルの上にあり、近くの交通量や洗濯機が原因でテーブルが少し揺れている

高レベルでは、位置検出の消費電力を削減するために重要な動き検出器が使用されます。ローカライゼーションアルゴリズムは、デバイスが静的であることを検出すると、低電力モードに切り替えることができます。このモードでは、ユーザーが場所を変更しているときにデバイスをウェイクアップするために、大きな動きに依存しています。

このセンサーは低電力でなければなりません。これは、少量の偽陰性を引き起こす可能性のある電力消費とトレードオフになります。これにはいくつかの理由があります。

  • このセンサーの目標は、電力を節約することです。
  • ユーザーが動いていない(誤検知)ときにイベントをトリガーすることは、電力の面でコストがかかるため、回避する必要があります。
  • ユーザーが動いているときにイベントをトリガーしない(偽陰性)ことは、繰り返し実行されない限り許容されます。ユーザーが10秒間歩いている場合、その10秒以内にイベントをトリガーしないことは許容されません。

各センサーイベントは、 sensors_event_t.data[0] 1を報告します。

ステップ検出器

基礎となる物理センサー:加速度計(+低電力である限り他のものも)

レポーティングモード: スペシャル (実行したステップごとに1つのイベント)

低電力

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) はウェイクアップしないセンサーを返します

ステップ検出器は、ユーザーがステップを実行するたびにイベントを生成します。

イベントsensors_event_t.timestampのタイムスタンプは、足が地面にsensors_event_t.timestampたときに対応し、加速度に大きな変動をsensors_event_t.timestampます。

歩数カウンターと比較して、歩数検出器のレイテンシは低くなければなりません(2秒未満)。歩数検出器と歩数カウンターはどちらも、ユーザーが階段を歩いたり、走ったり、歩いたりするときを検出します。ユーザーが自転車に乗っているとき、運転しているとき、または他の車両に乗っているときは、トリガーされません。

このセンサーは低電力でなければなりません。つまり、ハードウェアでステップ検出を実行できない場合、このセンサーを定義する必要はありません。特に、ステップ検出器がアクティブで、加速度計がアクティブでない場合、ステップのみが割り込みをトリガーする必要があります(すべての加速度計の読み取りではありません)。

sampling_period_nsは、ステップ検出器に影響を与えません。

各センサーイベントは、 sensors_event_t.data[0] 1を報告します。

歩数計

基礎となる物理センサー:加速度計(+低電力である限り、おそらく他のセンサー)

レポートモード: 変更中

低電力

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) はウェイクアップしないセンサーを返します

ステップカウンターは、アクティブ化されている最後の再起動以降にユーザーが実行したステップの数を報告します。

測定値は、 uint64_tsensors_event_t.step_counterとして報告され、システムの再起動時にのみゼロにリセットされます。

イベントのタイムスタンプは、そのイベントの最後のステップが実行された時間に設定されます。

ステップの時間の意味については、 ステップ検出器センサータイプを参照してください。

ステップ検出器と比較して、ステップカウンターのレイテンシは長くなる可能性があります(最大10秒)。この遅延のおかげで、このセンサーは高い精度を持っています。 1日の測定後の歩数は、実際の歩数の10%以内でなければなりません。歩数検出器と歩数カウンターはどちらも、ユーザーが階段を歩いたり、走ったり、歩いたりするときを検出します。ユーザーが自転車に乗っているとき、運転しているとき、または他の車両に乗っているときは、トリガーされません。

ハードウェアは、内部ステップ数がオーバーフローしないようにする必要があります。ハードウェアの内部カウンタの最小サイズは16ビットです。オーバーフローが差し迫っている場合(せいぜい〜2 ^ 16ステップごと)、SoCをウェイクアップして、ドライバーがカウンターのメンテナンスを行えるようにすることができます。

相互作用で述べたように、このセンサーが動作している間は、他のセンサー、特に使用されている可能性のある加速度計を妨害してはなりません。

特定のデバイスがこれらの動作モードをサポートできない場合、このセンサータイプはHALによって報告されてはなりません。つまり、HALでこのセンサーを「エミュレート」することはできません。

このセンサーは低電力でなければなりません。つまり、ハードウェアでステップ検出を実行できない場合、このセンサーを定義する必要はありません。特に、ステップカウンターがアクティブで、加速度計がアクティブでない場合、(加速度計データではなく)ステップのみが割り込みをトリガーする必要があります。

傾き検出器

基礎となる物理センサー:加速度計(+低電力である限り、おそらく他のセンサー)

レポートモード: 特殊

低電力

このセンサーのウェイクアップバージョンのみを実装します。

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) はウェイクアップセンサーを返します

傾斜検出器は、傾斜イベントが検出されるたびにイベントを生成します。

傾斜イベントは、アクティブ化以降に少なくとも35度だけ変化する2秒のウィンドウ平均重力の方向またはセンサーによって生成された最後のイベントによって定義されます。これがアルゴリズムです:

  • reference_estimated_gravity =アクティブ化後の最初の1秒間の加速度計測定の平均、または最後の傾斜イベントが生成されたときの推定重力。
  • current_estimated_gravity =過去2秒間の加​​速度計測定の平均。
  • angle(reference_estimated_gravity, current_estimated_gravity) > 35 degreesときにトリガーしangle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

電話の向きを変更せずに大きな加速度が発生しても、傾きイベントはトリガーされません。たとえば、平均加速度の角度が35度を超えて変化する可能性がある場合でも、自動車の運転中の急な旋回や強い加速は、傾斜イベントをトリガーするべきではありません。通常、このセンサーは、加速度計のみを使用して実装されます。消費電力が大幅に増加しない場合は、他のセンサーも使用できます。これは、SoCがサスペンドモードになることを可能にする低電力センサーです。 HALでこのセンサーをエミュレートしないでください。各センサーイベントは、 sensors_event_t.data[0] 1を報告します。

姿勢複合センサー

回転ベクトル

基礎となる物理センサー:加速度計、磁力計、ジャイロスコープ

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) はウェイクアップしないセンサーを返します

回転ベクトルセンサーは、東北上座標フレームに対するデバイスの向きを報告します。通常は、加速度計、ジャイロスコープ、磁力計の読み取り値を統合して取得されます。 East-North-Up座標系は、次の場合の直接正規直交基底として定義されます。

  • Xは東を指し、地面に接しています。
  • Yは北を指し、地面に接しています。
  • Zは空を指し、地面に対して垂直です。

電話の向きは、東北上座標を電話の座標に合わせるために必要な回転によって表されます。つまり、ワールドフレーム(X、Y、Z)に回転を適用すると、それらが電話座標(x、y、z)に揃えられます。

回転は、参照(East-North-Up整列)デバイスの向きから現在のデバイスの向きに移動するために、軸rot_axis周りに角度thetaだけ電話を回転させているとrot_axisことができます。回転は、単位四元数の4つの単位のないx、y、z、wコンポーネントとしてエンコードされます。

  • sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
  • sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
  • sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
  • sensors_event_t.data[3] = cos(theta/2)

どこ:

  • rot_axisのx、y、zフィールドは、回転軸を表す単位長さベクトルの東北上座標です。
  • thetaは回転角度です

四元数は単位四元数です。基準1なければなりません。これを確認しないと、クライアントの動作が不安定になります。

さらに、このセンサーは推定の船首精度を報告します。

sensors_event_t.data[4] = estimated_accuracy (ラジアン)

ヘディングエラーは、95%の時間でestimated_accuracy精度よりも小さくなければなりません。このセンサーは、主な方向変更入力としてジャイロスコープを使用する必要があります。

このセンサーは、ジャイロスコープのドリフトを補うために加速度計と磁力計の入力も使用します。加速度計と磁力計だけを使用して実装することはできません。

ゲーム回転ベクトル

基礎となる物理センサー:加速度計とジャイロスコープ(磁力計なし)

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) はウェイクアップしないセンサーを返します

ゲームの回転ベクトルセンサーは回転ベクトルセンサーに似ていますが、地磁気を使用しません。したがって、Y軸は北を指すのではなく、他の参照を指します。そのリファレンスは、ジャイロスコープがZ軸の周りをドリフトするのと同じ桁でドリフトすることができます。

sensors_event_t.data[0-3]設定方法の詳細については、 回転ベクトルセンサーを参照してください。このセンサーは推定ヘディング精度を報告しませんsensors_event_t.data[4]は予約されており、 0に設定する必要があり0

理想的なケースでは、スマートフォンを回転させて同じ実世界の向きに戻すと、同じゲーム回転ベクトルが報告されます。

このセンサーは、ジャイロスコープと加速度計に基づいている必要があります。ジャイロスコープバイアスの推定を介して、間接的に加えて、磁力計を入力として使用することはできません。

重力

基礎となる物理センサー:加速度計と(存在する場合)ジャイロスコープ(またはジャイロスコープが存在しない場合は磁力計)

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_GRAVITY) はウェイクアップしないセンサーを返します

重力センサーは、デバイスの座標で重力の方向と大きさを報告します。

重力ベクトルコンポーネントは、 sensors_event_t.acceleration x、y、zフィールドのm / s ^ 2で報告されます。

デバイスが静止しているとき、重力センサーの出力は加速度計の出力と同じでなければなりません。地球上では、マグニチュードは約9.8 m / s ^ 2です。

デバイスがジャイロスコープを備えている場合、重力センサーはジャイロスコープと加速度計を入力として使用する必要があります。

デバイスにジャイロスコープがない場合、重力センサーは加速度計と磁力計を入力として使用する必要があります。

地磁気回転ベクトル

基礎となる物理センサー:加速度計と磁力計(ジャイロスコープなし)

レポートモード: 継続的

低電力

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) はウェイクアップしないセンサーを返します

地磁気回転ベクトルは回転ベクトルセンサーに似ていますが、磁力計を使用し、ジャイロスコープは使用しません。

このセンサーは、磁力計に基づいている必要があります。ジャイロスコープを使用して実装することはできず、ジャイロスコープ入力をこのセンサーで使用することはできません。

sensors_event_t.data[0-4]設定方法の詳細については、 回転ベクトルセンサーを参照してください。

回転ベクトルセンサーの場合と同様に、ヘディングエラーは95%のsensors_event_t.data[4]推定精度( sensors_event_t.data[4] )未満である必要があります。

このセンサーは低電力である必要があるため、ハードウェアに実装する必要があります。

向き(非推奨)

基礎となる物理センサー:加速度計、磁力計、(存在する場合)ジャイロスコープ

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_ORIENTATION) はウェイクアップしないセンサーを返します

注:これは、Android SDKで廃止された古いセンサータイプです。より明確に定義された回転ベクトルセンサーに置き換えられました。可能な場合は常に、方位センサーの上で回転ベクトルセンサーを使用してください。

方位センサーがデバイスの姿勢を報告します。計測値は、 sensors_event_t.orientationのx、y、およびzフィールドに度単位で報告されます。

  • sensors_event_t.orientation.x :方位角、Z軸を中心とした北磁力方向とY軸の間の角度( 0<=azimuth<360 )。 0 =北、90 =東、180 =南、270 =西。
  • sensors_event_t.orientation.y :ピッチ、X軸を中心とした回転( -180<=pitch<=180 )、Z軸がY軸に向かって移動するときの正の値。
  • sensors_event_t.orientation.z :ロール、Y軸を中心とした回転( -90<=roll<=90 )、X軸がZ軸に向かって移動するときの正の値。

歴史的な理由から、ロール角は時計回りに正であることに注意してください。 (数学的に言えば、反時計回りの方向に正でなければなりません):

デバイスに対する方向の描写

図3.デバイスに対する向き

この定義は、X軸が平面の長辺(尾から鼻)に沿っている航空で使用されるヨー、ピッチ、ロールとは異なります。

方位センサーは、センサーの読み取り値がsensors_event_t.orientation.status介してどの程度正確であると予測するかも報告します。このフィールドの可能な値の詳細については、 SensorManagerSENSOR_STATUS_*定数を参照してください。

未校正センサー

キャリブレーションされていないセンサーはより多くの生の結果を提供し、いくらかのバイアスを含む可能性がありますが、キャリブレーションを通じて適用された補正からの「ジャンプ」も少なくなります。一部のアプリは、これらの未調整の結果をよりスムーズで信頼性の高いものとして優先する場合があります。たとえば、アプリが独自のセンサーフュージョンを実行しようとしている場合、キャリブレーションを導入すると実際に結果が歪む可能性があります。

キャリブレーションされていない加速度計

基礎となる物理センサー:加速度計

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) はウェイクアップしないセンサーを返します

キャリブレーションされていない加速度センサーは、バイアス補正なしで3つのセンサー軸に沿ったデバイスの加速度を報告します(工場出荷時のバイアスと温度補正は、キャリブレーションされていない測定に適用されます)。すべての値はSI単位(m / s ^ 2)であり、 sensors_event_t.uncalibrated_accelerometerのフィールドで報告されます。

  • x_uncalib :X軸に沿った加速度(バイアス補正なし)
  • y_uncalib :Y軸に沿った加速度(バイアス補正なし)
  • z_uncalib :Z軸に沿った加速度(バイアス補正なし)
  • x_bias :X軸に沿った推定バイアス
  • y_bias :Y軸に沿った推定バイアス
  • z_bias :Z軸に沿った推定バイアス

ジャイロスコープ未校正

基礎となる物理センサー:ジャイロスコープ

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) はウェイクアップしないセンサーを返します

キャリブレーションされていないジャイロスコープは、バイアス推定値とともに、バイアス補正を適用せずにセンサー軸の周りの回転率を報告します。すべての値はラジアン/秒であり、 sensors_event_t.uncalibrated_gyroのフィールドで報告されます。

  • x_uncalib :X軸周りの角速度(ドリフト補正なし)
  • y_uncalib :Y軸周りの角速度(ドリフト補正なし)
  • z_uncalib :Z軸周りの角速度(ドリフト補正なし)
  • x_bias :X軸周りの推定ドリフト
  • y_bias :Y軸周りの推定ドリフト
  • z_bias :Z軸周りの推定ドリフト

概念的には、未校正の測定値は、校正済みの測定値とバイアス推定値の合計です: _uncalibrated = _calibrated + _bias

x_biasy_biasz_bias値は、バイアスの推定値が変化するとすぐにジャンプすることが期待されており、残りの時間は安定しているはずです。

使用する座標系の詳細については、 ジャイロスコープセンサーの定義を参照してください。

測定には、工場校正と温度補償を適用する必要があります。また、ジャイロスコープのドリフト推定を実装して、妥当な推定がx_biasy_bias 、およびz_biasで報告されるようにする必要があります。実装がドリフトを推定できない場合は、このセンサーを実装しないでください。

このセンサーが存在する場合、対応するジャイロスコープセンサーも存在する必要があり、両方のセンサーが同じsensor_t.namesensor_t.vendor値を共有する必要があります。

校正されていない磁場

基礎となる物理センサー:磁力計

レポートモード: 継続的

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) は非ウェイクアップセンサーを返します

キャリブレーションされていない磁場センサーは、周囲の磁場とハードアイロンのキャリブレーション推定値を報告します。すべての値はマイクロテスラ(uT)であり、 sensors_event_t.uncalibrated_magneticのフィールドで報告されます。

  • x_uncalib :X軸に沿った磁場(ハードアイアン補償なし)
  • y_uncalib :Y軸に沿った磁場(ハードアイアン補償なし)
  • z_uncalib :Z軸に沿った磁場(ハードアイアン補償なし)
  • x_bias :X軸に沿った推定ハードアイアンバイアス
  • y_bias :Y軸に沿って推定されたハードアイアンバイアス
  • z_bias :Z軸に沿った推定ハードアイアンバイアス

概念的には、未校正の測定値は、校正済みの測定値とバイアス推定値の合計です: _uncalibrated = _calibrated + _bias

キャリブレーションされていない磁力計により、より高いレベルのアルゴリズムで不良ハードアイアン推定を処理できます。 x_biasy_bias 、およびz_bias値は、ハードアイアンの推定値が変化するとすぐにジャンプすることが期待されており、残りの時間は安定しているはずです。

軟鉄の校正と温度補償を測定に適用する必要があります。また、ハードアイアン推定を実装して、合理的な推定をx_biasy_bias 、およびz_biasで報告できるようにする必要があります。実装がバイアスを推定できない場合は、このセンサーを実装しないでください。

このセンサーが存在する場合、対応する磁場センサーが存在し、両方のセンサーが同じsensor_t.namesensor_t.vendor値を共有する必要があります。

相互作用複合センサー

一部のセンサーは、主にユーザーとの対話を検出するために使用されます。 We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.

Wake up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) returns a wake-up sensor

A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7.

Each sensor event reports 1 in sensors_event_t.data[0] .

Pick up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) returns a wake-up sensor

A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).

Each sensor event reports 1 in sensors_event_t.data[0] .

Glance gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) returns a wake-up sensor

A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1 in sensors_event_t.data[0] .