SKATEBOARD x TECKNOLOGY

スケボーアプリとデバイスを作るぜ。

意識と体のズレ 重心編

日々スケートをしていてトリックを成功させるには何が必要なのかを考えます。
思いつく中では、

  • オーリーメイクの要素
    • 重心
    • タイミング
    • 目線&頭の位置
    • 力加減
    • ボードでの足の位置(スタンス)
    • 前足の擦る位置(つま先より、小指より)
    • ボードの擦る位置(ノーズの左右中央どの辺り)
    • スピード
    • ボードに乗りに行く恐怖心の克服

などが考えられますがまだまだ必要な要素はあると思います。

このように飛ぶ位置まで到達するまでにこれらの要素を合わせるべく体を準備するわけですが、とても頭で考えてできる芸当ではないことが分かります。
高度な技術力を要し、それを反射的に行うわけですから体に染み込むまで何回も練習するわけです。


重心の意識

武井壮がスポーツが上手になる方法は自分の意識と体の実際の動きのズレを無くすことだと言ってました。
youtu.be

スケートにおいての上達の過程も正にこれだと思います。
オーリーだけで言えばテールを叩く強さの意識と実際の体のズレがあることでボードが思うように上がらなかったり、前足のノーズの擦りと持ち上げが意識しているよりもできていないことなどがあると思います。

そんなわけで今回試したのが、重心バランスの意識と体のズレを把握しようという試みです。


バランスwiiボードでの重心確認

バランスwiiボードを使って自分の重心がどれくらい移動しているのかを確認したいと思います。
wii fitに同梱されているバランスwiiボードは構造は4つのストレインゲージ式フォースセンサが内蔵されており、ボードの上に乗って体の重心を検知できる仕組みになっています。安価で手に入れやすいため、リハビリの現場でも使用されています。

macの場合OSCulatorというソフトを使います。
windowsの場合、FItTriWiimoteLibがありますがbluetoothのペアリング後にでもPCで上手くデータを検知できなかったです)


バランスwiiボードで重心チェック

OSCulatorをダウンロード後、起動すると以下のような画面が開きます。
f:id:oageagexx20:20170527191525p:plain

右端のギアマークを選択すると以下のような画面になります。
f:id:oageagexx20:20170527191723p:plain

ここでバランスwiiボードの裏側の電池近くのsyncボタンを押します。
f:id:oageagexx20:20170527192223j:plain


ボタンを押してバランスwiiボードが青くチカチカしている時にOSCulatorの「Pair a Wiimote」ボタンを押すと下記のようにペアリングが完了します。
f:id:oageagexx20:20170527191331p:plain


上の画面で0:bottom leftなどを選択して目のマークのボタンを押すとwiiボードのデータが画面表示されます。
僕はグーフィーなのでleftを選択しました。テール側の加重データをメインに取れます。前足側に体重をかけるとグラフが下がっていきます。

f:id:oageagexx20:20170527192950p:plain


このデータを見ることでマニュアルなどの左右バランスの重心感覚を調整できると思います。ノーズマニュアルならbottom rightを選べば前足の加重加減を知ることができます、スタンスレギュラーなら逆をすれば良いでしょう。

オーリーのための重心

僕の当初の課題でオーリー時ボードの曲がりというのがありました。
それはテールをヒットした後重心が背中側にあるため体が開いてしまい、空中でボードが45°くらい曲がってしまっていました。そこで意識をセンターにするために体の感覚を調整していきます。
virtual yを選択します。

f:id:oageagexx20:20170527210201p:plain

しゃがんでテールを叩くまでの動作をしてメモリが丁度真ん中あたりであれば重心はセンター(腹と背中で50/50)にあります。
メモリが高い位置だと前側に体重がありすぎで、メモリが低いと背中にあることがわかります。


データを使って重心の正しい位置を体に馴染ませる

重心の位置というのは主に腰の位置と同じだと思っています。頭の位置も大きく関わりますが、頭だけ前や後ろにあることはあまりないと思うので腰の位置がボードの真ん中にあることがスケートボードの基本でしょう。前重心を必要とするトリックもありますが、後ろ重心はみんな危ないよと言いますね。
上の例ではwiiボードの上で動作をしながら重心の位置を確認しましたが、スケートボードの上だと中々重心に意識をしづらいと思います。路面が悪ければガタガタして重心よりも足にいってしまいますし、前足の使い方が多くのトリックでのポイントになっています。ですが重心がずれていると僕のようにボードが曲がったり、グラインドの時に上手く乗れなかったりします。

重心のズレを無くして安定したメイクをしていきましょう。




スケートの動きで取れるデータ

スケートデバイスの製作で今取り組んでいるのは、モーションの動きを取るべき場所がどこかを調査することです。

スケートで使われる筋肉は主に体幹部分です。体の軸を中心にデッキを操作することで色々なトリックをメイクするのですが、軸となる部分にセンサーを取り付ければそれで十分なデータが取れるのかというのが悩みどころです。

 

最初は腰にセンサーを取り付ければ体の傾き、加速度を取ることで動きのデータを分析できると思っていました。

f:id:oageagexx20:20170520160725j:plain

 

クリップについているのはTWE LITE 2525Aです。ベルトを挟んで取り付けます。

raspberry piについているのがモーションセンサー受信機のMONOSTICKです。

 

3軸の方向とは

TWE LITEが立てた状態で読み取られているから x軸は左右で、y軸は上下、z軸は前後の動きになる

f:id:oageagexx20:20170520224328j:plain

 

 

モーションデータを取ってみる

ひとまずスケボーに乗ってプッシュしたりオーリーしたりして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)

 

gp = Gnuplot.Gnuplot()

 

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()

 

 

 結果は以下の通り。

 

f:id:oageagexx20:20170520220701p:plain

 

 

プッシュからのオーリー〜そのまま流しのデータです。

テールを弾いた瞬間の加速度の値が上がっています。進行方向とジャンプした際の力を計測できているみたいですね。流してる状態は特に体は動かしていないので水平な値が表示されています。

 

続いて 止まった状態で何回かショービットをしてみました。

f:id:oageagexx20:20170520221055p:plain

 

真ん中部分の値ですが、あまり3軸とも数値が上がっていませんね。

グラフから読み取れることはショービットはあまり力を加えて行わないトリックだということですかね。

 

f:id:oageagexx20:20170520221659p:plain

加速度センサーの仕様は1秒間に50回(サンプリング周波数:50Hz)のため細かくデータを取ってますね。

 

 

 

とりあえずテストして見た結果

まだまだデータにノイズが多く、色々な動きでどう計測できるかは検証が必要です。トリックをした計測部分だけを切り出せるよう フーリエ変換とかすればより正確に計測できるかも。フリップ系のトリックやギャップやランプなどのセクションでの動きや、上級者と初心者でデータで違いが表れるかなどを検証していきます。

 

 

go skate.

 

スケボーにtechを加えたら面白くなるんじゃない?!

「スケボーが上手くなる道具出してドラえも〜ん」という心の叫びからこの企画を始めました。

 

初めまして、組みコーンが飛べないheshSkaterのkbysです。

スケボー歴は丁度1年くらいかなっていう感じで、とにかくオーリーを高くしたい段階ですね。

 

nollieskateboardingとか見たり、自分の動きを動画で撮影して上達する方法を見つけようとしてるんだけど、中々頭で思ってることを実現するのってできないですよね。

 

「これくらいのスタンスで、このタイミングでこれくらいの強さでテールを弾いて前足でデッキを浮かして障害物を超える」っていう動作をいくらシミュレーションしても実際に成功するまでは何回も失敗の中で微調整しながら感覚を掴んでいくということが必要だと思います。

 

新しいトリックの練習はそれ自体が楽しいし、新たな発見をしながら上達を目指すのはスケートの醍醐味だと思ってるけど、デバイスを使って今の自分を客観的に見つめ直したり、分析することってできないかなーと思っていました。

そんな中で思い付いたのは、モーションセンサーを使った自分の動作の可視化でした。

iPhoneにはモーションセンサーがあって傾きを検知するジャイロ機能と端末にかかる加速度を測るcore motionが搭載されているので、これを使って実現したいと思っています。

 

スケートボード自体にセンサーを取り付けてアクティビティを取る企画

RideBlockSyrmo)はあるみたいです。(レールとかやって壊れないかな?)

 

自分の構想ではライダーの体にセンサーをつけて動きのログを取ろうと思ってます、

ウェアラブルな位置づけですね。

 

今はモーションデータをどう解析すれば実現したいトリックとの乖離を判断できるかという状態で、iPhoneを腰につけて動きのサンプルを取っていますが、別のデバイスとblootoothで連携する必要があるかなと思っています。

 

そんなわけで使えそうな技術の情報収集中ですが、実現に向けて頑張っています。

go skate.