sensehatからの角度、移動量の変位抽出について

お世話になっております。
以下のようなプログラムで、sensehatから絶対角度と加速度を出せているんですが、ここから○○msごとの角度の変位と移動(XYZ方向)の変位を出すためには、どのようなコードを変けばよいのでしょうか?
調べてもなかなか見つからないので、ご教示いただきたく。

from sense_hat import SenseHat

sense = SenseHat()

while True:

    orientation_data = sense.get_orientation()

    pitch = orientation_data['pitch']

    yaw = orientation_data['yaw']

    roll = orientation_data['roll']

    acceleration = sense.get_accelerometer_raw()

    x = acceleration['x']

    y = acceleration['y']

    z = acceleration['z']

    #x=round(x, 0)

    #y=round(y, 0)

    #z=round(z, 0)

    print(f'{pitch:.4f} {yaw:.4f} {roll:.4f} {x:.4f} {y:.4f} {z:.4f}')

結果はこんな感じです。

> pi@raspberrypi:~/iotkit-1-sense-hat $ python3 orientation2.py
> 348.9326 1.6096 9.0408 0.2342 0.1819 0.8805
> 350.6903 0.8567 7.1668 0.2371 0.2078 0.9226
> 350.4919 0.8552 7.3848 0.2364 0.2083 0.9204
> 350.2964 0.8548 7.6048 0.2364 0.2088 0.9204
> 350.1080 0.8422 7.8201 0.2381 0.2088 0.9192

こんにちは。自分もあまり使ったことが無かったため少し触ってみました。

公式チュートリアルによると、IMUセンサーは計測間隔が長過ぎると精度の悪いデータになってしまうようです。そのため計測は常に行ない、〇〇ms経過するごとに差分を表示してみるのはいかがでしょうか(コード例はもう少し改善の余地があるかもしれません)。

from datetime import datetime
from sense_hat import SenseHat

sense = SenseHat()
prev_yaw = sense.get_orientation_degrees()['yaw']
prev_time = datetime.now()

while True:
    curr_yaw = sense.get_orientation_degrees()['yaw']
    curr_time = datetime.now()
    delta = curr_time - prev_time

    if delta.total_seconds() >= 1.:
        result = curr_yaw - prev_yaw
        print(f'Yaw: {result}', end='\r')

        prev_yaw = curr_yaw
        prev_time = curr_time

なるほど。whileの中で

prev_yaw = curr_yaw
prev_time = curr_time

とするんですね。ありがとうございます。
実装してみて、またご報告します。

「いいね!」 1