質問: ang_acc_y; } Thread.sleep(deltat); //deltatミリ秒遅延する } }catch(InterruptedException e){} } } ```
回答: 質問と関係ありませんが、気になったことを。 コードを見ると各軸ごとに角速度を積分しています(そしてZ軸を無視しています)が、 実はこれ、意味のある値は得られません。 センサーは端末に固定されています。 従ってセンサーの値を積分するということは、端末の軸を基準にして回した値を求めることになります。 一方、目的が、「水平を保つ」なので、欲しい値は研究室系に対して、どれだけ回転しているかです。 (もっと言えば、端末のZ軸が、研究室系のZ軸に対して何度(スカラー)傾いているかが欲しい) さて、各軸を独立して積分した結果からは、姿勢が一意に決まりません。 積分結果が非0でも水平という状態が普通にありえます。 例えば、 X+90 -> Y+90 -> X-90 -> Z-90 (X+90はセンサーX軸回りで90度回転の意) という回転操作は、各軸の合計が(0,90,-90)ですが、 操作後の端末は操作前の状態に戻ります。 端末を実際に持って回して確かめてください。 したがって、各軸ごとに独立して積分しても、水平を保つのに役に立ちません。 じゃあどうするのかといえば回転行列やクォータニオンを使います。 オススメはクォータニオンです。