スケートの動きで取れるデータ
スケートデバイスの製作で今取り組んでいるのは、モーションの動きを取るべき場所がどこかを調査することです。
スケートで使われる筋肉は主に体幹部分です。体の軸を中心にデッキを操作することで色々なトリックをメイクするのですが、軸となる部分にセンサーを取り付ければそれで十分なデータが取れるのかというのが悩みどころです。
最初は腰にセンサーを取り付ければ体の傾き、加速度を取ることで動きのデータを分析できると思っていました。
クリップについているのはTWE LITE 2525Aです。ベルトを挟んで取り付けます。
raspberry piについているのがモーションセンサー受信機のMONOSTICKです。
3軸の方向とは
TWE LITEが立てた状態で読み取られているから x軸は左右で、y軸は上下、z軸は前後の動きになる
モーションデータを取ってみる
ひとまずスケボーに乗ってプッシュしたりオーリーしたりしてx、y、zの3軸の動きのデータをgnuplotに表示させて見ました。以下のコードです(TWE LITE2525の無線タグアプリを使ってみるのscriptをそのまま使ってます)
graph.py
#!/usr/bin/env python
#encoding=utf-8
import serial
import threading
import sys
import time
import Gnuplot
argv = sys.argv
argc = len(argv)
def mThread(ser):
# UARTの出力を読み込んで様々な処理を行う(実質メイン関数)
gp( "set grid" )
x = [0]*1024
y = [0]*1024
z = [0]*1024
ntime = [0]*1024
stime = time.time()
while True:
# UARTを読み込んでリスト化(配列に代入)
line = ser.readline()
field = line.strip()
sline = field.split(';')
length = len(sline)
# 加速度データが来たらグラフに出力
if length == 16 and sline[11] == "X":
print field
x[0] = float(sline[12])/100.0
y[0] = float(sline[13])/100.0
z[0] = float(sline[14])/100.0
# 現時刻の計算
ntime[0] = time.time()-stime
# グラフのパラメータ設定
xd = Gnuplot.Data( ntime, x, with_="lines", title="X Axis")
yd = Gnuplot.Data( ntime, y, with_="lines", title="Y Axis")
zd = Gnuplot.Data( ntime, z, with_="lines", title="Z Axis")
# プロット
gp.plot(xd,yd,zd, xrange="[%f:%f]" % ( ntime[128], ntime[0] ))
# 配列の更新
i=1022
while i >= 0:
x[i+1] = x[i]
y[i+1] = y[i]
z[i+1] = z[i]
ntime[i+1] = ntime[i]
i -= 1
if __name__ == "__main__":
# 引数がある場合、引数で指定したデバイスを用いる
if argc != 2:
ser = serial.Serial( "/dev/tty.usbserial-MWF60VP", 115200, timeout=1 );
else :
ser = serial.Serial( argv[1], 115200, timeout=1 )
# グラフを描画する関数を別スレッドで実行
t = threading.Thread( target=mThread, args=( ser, ) )
t.setDaemon(True)
t.start()
# q を入力すると終了
while True:
key = raw_input()
if key == "q":
break
ser.close()
gp.close()
結果は以下の通り。
プッシュからのオーリー〜そのまま流しのデータです。
テールを弾いた瞬間の加速度の値が上がっています。進行方向とジャンプした際の力を計測できているみたいですね。流してる状態は特に体は動かしていないので水平な値が表示されています。
続いて 止まった状態で何回かショービットをしてみました。
真ん中部分の値ですが、あまり3軸とも数値が上がっていませんね。
グラフから読み取れることはショービットはあまり力を加えて行わないトリックだということですかね。
加速度センサーの仕様は1秒間に50回(サンプリング周波数:50Hz)のため細かくデータを取ってますね。
とりあえずテストして見た結果
まだまだデータにノイズが多く、色々な動きでどう計測できるかは検証が必要です。トリックをした計測部分だけを切り出せるよう フーリエ変換とかすればより正確に計測できるかも。フリップ系のトリックやギャップやランプなどのセクションでの動きや、上級者と初心者でデータで違いが表れるかなどを検証していきます。
go skate.