この質問はかなり古いものですが、現在の回答とコメントには多くの混乱が見られるため、誰かがこれを見つけた場合に備えて、いくつかのことを解決するつもりです.
ジャイロスコープ
まず第一に、ジャイロスコープは定義どおりに垂直方向の動き (並進運動) を測定しません。以下の図のように定義された各軸の周りの回転を測定します。したがって、デバイスを前後に傾けると、実際には x 軸を中心に回転するため、ジャイロスコープ センサーの x 値にゼロ以外の値が表示されます。

ジャイロスコープの x 値は垂直面を表します。
「垂直面」が何を意味するのかはわかりませんが、x 値は確かに面自体も面内のデバイスの向きも表していません。
ジャイロスコープ センサーの x 値は、x 軸周りのデバイスの現在の角速度を表します (例: 回転の変化)。
ただし、デバイスを前方に傾けると、x 値が変化します。この動きをすると、上下の動きを読み取る同じセンサーがこの値を読み取ります。
ここで何を指しているのかよくわかりません。「上下の動きを読み取るのと同じセンサー」はジャイロスコープだと思いますが、前述のように上下の動きは読み取れません。それは缶に書かれていることを正確に行います。
デバイス座標系
これは、元の質問よりもユーザー Ali の回答への回答ですが、どちらの場合にも関連性があります。
線形加速度センサー (またはその他のセンサー) の個々の出力は、上の画像に示すように、デバイスの座標系で表されます。これは、デバイスをわずかに回転させると、出力が以前に一致したワールド軸と平行ではなくなることを意味します。そのため、デバイスがアプリケーションの特定の方向にあることを強制するか、新しい方向を考慮する必要があります。
ROTATION_VECTOR
四元数演算またはメソッドと組み合わせたセンサーはgetRotationMatrixFromVector()
、測定値をデバイス座標からワールド座標に変換する 1 つの方法です。同じ目標を達成する方法は他にもありますが、一度達成すると、デバイスの持ち方は垂直方向の動きの測定には関係ありません。
いずれの場合も、探している軸は z 軸ではなく y 軸です。
(万が一、「デバイスの y 軸に沿って」を「垂直」として意味した場合は、すべての向きを無視して、線形加速度センサーを使用してください)
ノイズ
質問でノイズと更新レートに関するいくつかの問題について言及したので、ここで言及します。非常に頻繁に変化するものから適切で一貫したデータを取得する最も簡単で一般的な方法の 1 つは、ローパス フィルターを使用することです。どのタイプのフィルターが最適かはアプリケーションによって異なりますが、ほとんどの場合、指数移動平均フィルターが実行可能であることがわかりました。
仕上げの考え
方向に適切に注意すれば、変換された線形加速度出力は、ノイズをフィルタリングすることなく、垂直方向の動き (つまり、動きの変化) の適切な近似になることに注意してください。
また、速度のように垂直方向の「動き」を測定する場合は、加速度計の出力を統合する必要があります。位置を測定しようとするよりも速度の場合はそれほど深刻ではありませんが、さまざまな理由から、ほとんどの場合、これはあまりうまくいきません。