陸上競技 × ものつくり センサーによる体幹の傾きの計測
1/11 土 @等々力
センサーで友達の走りの姿勢推定
同じ400mスプリンターの myジィくん は、体が前傾しすぎていると言われてきて、本人もそう思っている。
では、実際どのくらい前傾しているのか?
今日の合同練習で、彼の体にセンサーをつけて、体の傾斜の数値化を試みた。
使用したもの
センサーデバイス
TWELITE 2525-A * 1 (センサー本体)
TWELITE R * 1 (プログラム書き込み装置)
MONOSTIC * 1 (PCとの通信装置)
http://akizukidenshi.com/catalog/g/gM-12120/
http://akizukidenshi.com/catalog/g/gM-09453/
http://akizukidenshi.com/catalog/g/gM-08264/
全部合わせて1万円ちょい。
ちょっと高い。
地獄の準備編 (読み飛ばし推奨)
センサー周辺の回路は作らなくて済んだが、プログラムや事前準備が非常にきつかった。
ネットの情報が少なすぎたり、挙げ句の果てに嘘が書いてあったり、公式のWindows版プログラムが動かなかったり。
Macのやり方を0から載せておく。きっと誰かの役にたつ。
パッケージのインストール
$ pip install pyserial
$ pip install pyqtgraph
$ pip install pyqt5
$ pip install pyftdi
$ brew install libusb
//これをインストしなかったせいでハマった。昔入れた気がしてて...
ポートの確認
MONOSTICをMacに繋ぐ。
$ ls -1 /dev/cu.* // これでMONOSTICの接続ポートを確認する。あとで使うのでメモ
ファームウェア等のダウンロード
https://mono-wireless.com/download/SDK/MWSDK_201805/MWSDK_OSX_201805.tgz
FTDIドライバの停止
$ sudo kextunload -b com.apple.driver.AppleUSBFTDI
ファームウェアの書き込み
$ ./Tools/tweprog_py/tweterm.py -p ftdi://ftdi:232:MW3V3EU5/1 -F ./Wks_TWELITE/App_Tag/Parent/Build/App_Tag_Parent_RED_MONOSTICK_L1200_V2-1-3.bin -b 115200
ftdi://ftdi:232:MW3V3EU5/1 の部分は繋がっているポートの名前に書き換える。
バイナリデータ(App_Tag_Parent_RED_MONOSTICK_L1200_V2-1-3.bin )は、TWELITEがREDかBLUEかで異なるので注意
同様の手順でTWELITE 2525Aのファームウェア、MONOSTICのOTAを変更する。
TWELITE 2525Aのファームウェアの書き換え
TWELITE RとTWELITE 2525Aを公式説明動画をもとにつなぐ。
https://www.youtube.com/watch?v=hJ63sY_WY3I
ブレッドボードで接続したら接触不良になって、ハマったので手で押さえながら書き込むと良い。
あとは同じ。書き込むバイナリは
/Wks_TWELITE/App_Tag/EndDevice_Input/Build/App_Tag_EndDevice_Input_BLUE_LITE2525A_L1200_V2-1-3.bin
BLUEになってるけど気にしない。
MONOSTICのOTA更新
Wks_TWELITE/App_Tag/EndDevice_Input/Build/App_Tag_EndDevice_Input_RED_OTA_L1200_V2-1-3.bin
を同様に書き込む。
インタラクティブの設定は公式動画を参考に。
command + shift + "+"
で+を3回、センス良くリズミカルに押せばインタラクティブに入れる。
グラフの描画
https://mono-wireless.com/jp/products/TWE-Lite-2525A/howtouse-graph.html
ここからpyファイルを拾う。モジュールも一緒についてくるので、作業ディレクトリはGraph内で。
MONOSTICを先にMacにつないで、その近くで2525Aの電池を入れると接続される。
$ python Graph.py -t /dev/cu.usbserial-MW3V3EU5 -r 6 -l -a
このコマンドで電波強度と3軸加速度がリアルタイムで描画される。縦軸は6g (m/ss)にした。
-a のオプションでCSVに保存できる。
あとはRだのPythonだのExcelだので心ゆくまで分析すればいい。
取り付けベルトの作成
100円ショップの良さがなやつを買った。
切って縫って。
実際に使用した
↑ ベルトの真ん中についているのがセンサー
結果
通信距離が見通し1000mって書いてあったけど、人体に直接貼り付けている分、体内でだいぶ電波が減衰している模様。
一度センサーを捉えてしまえば、100mくらいなら追跡できるけど、センサーを捉えるためには、プログラムを実行した瞬間にセンサーがPCの30-40m以内にいなくてはいけないことがわかった。
中継器を挟めば解決しそうだ。
データの解析
ここで、データから体の傾きを導出してみる。
データの周期性に着目し、z方向加速度の1周期を取り出す。
走っていると、ジャンプの要素が加わって微小な変動がある。
その変動をならすことで、静止している状態に近似できるだろう。
変動をならす方法は、簡易的なものとして、同じ面積の長方形に近似する方法がある。
(データ数の方向にを積分すればいいんだが、データ幅が均等であるから平均値を求めることと等しくなる。)
平均するとz方向加速度は0.508g m/ss となった。
つまり、高さ0.508gの長方形と同じ面積。
次に、この0.508gが何を意味するのか考える。
体の傾きが、センサーの傾きにつながる。
センサーの付け方と軸に注目して、体の傾斜角θを用いると、z方向加速度a_zは
a_z = g * sinθ
となる。よって sinθ=0.508 となるθはθ=30.5° となる。
つまり彼は、31°の傾きで走っていたことになる。
(センサーはジャージの中に移した)
センサーを首に近い位置につけたため、猫背の彼の場合、実際よりも傾いた値が取れている。体幹部は31°も傾いていない。
というか31°も傾いていると大変なことになる。
センサー位置も工夫すべきかもしれない。
あとがき
今回は、初めての取り組みとしてセンサーデバイスを装着して簡易的な姿勢推定を行った。
体の傾斜だけでなく、データの振動具合を見ることで、「パワーポジション」や「体幹のブレ」がわかるかもしれない。
また、このセンサーは複数を同時使用することができる。
そのため、両腕と両脚につけたりして、「腕振りと脚の挟み込みのズレ」なども数値化できる。
電池含めて6.5g。一度バッテリーを入れれば半年はもつというこのセンサー。工夫次第で、今まで動画だけではできなかった運動分析ができるだろう。