IMUをX方向、Y方向、Z方向へ往復で振って機械学習させたプログラム実行してみると、結構間違うので
検証をはじめてます。
●Pythonライブラリのseabornは、グラフ作成が3行でできてしまう優れものです。この散布図、Excelで書いていたら半日かかると思いますが、seabornなら30分以内にできます。
注意:seabornは、matplotlib上で動作するライブラリーなので、matplotlibのインストールと
matplotlib as pltというオブジェクトを宣言しておく必要があります。seabornで作成したプロットデータオブジェクトsnsを描画動作の指示するには、 plt.show() でグラフ表示がされるので、pltオブジェクトを使います。
基本コード:
import matplotlib as plt
import seaborn as sns
import pandas as pd
df=pd.read(“test.csv’) #test.csvを読み込んでpandasオブジェクトでDataFrame df作成
sns.pairplot(df)#seabornでpairプロットデータ作成してsnsオブジェクト作成
plt.show()#snsオブジェクトを表示するのは、matplolibのオブジェクトを使う
●やり方
①マイコンからシリアル受信したデータをCSVファイルに保存します。
②保存したファイルをpandasで読み込んで、データの列ヘッダをつけて、DataFrameを作成します。
③DataFrameをseabornのpairplotで、全組み合わせの散布図とヒストグラムを作成
④DataFrameをgnum別のヒストグラムを作成して、振り方によるデータの差がでるか目視
pycharmで作成してます。
A)シリアル受信して、散布図を書くプログラム py_seaborn_IMU
https://gist.github.com/dj1711572002/ce3b42b50ef9cc92c5b1f330110f6bb4
B)AでログしたIMUデータをヒストグラムにするプログラム pyPandStudy
https://gist.github.com/dj1711572002/c85b60bfaf3118d1f45e04527a863580
●IMU値の散布図
加速度出力acX,acY,acZとジャイロ出力gyX,gyY,gyZで、
振り方gnum=1(X方向)gnum=2(Y方向)、gnum=3(Z方向)
たった3行で下記グラフ書けてしまいます。seabornのpairplotは、楽です。
df = pd.read_csv("imu.csv", sep=",", header=None, names=['gnum', 'acX', 'acY', 'acZ']) sns.pairplot(df, hue='gnum') plt.show()
●ヒストグラムのプロット
散布図の中にあるヒストグラムは、xyz別なので、振り方別のヒストグラムをプロットしてみました。
元のDataFrameからgnum別に切取ってヒストグラムに与えます。
これもグラフ1個2行で完成しました。
切取は、
df[df[‘gnum’]==1]でgnum1(X方向)
df[df[‘gnum’]==2]でgnum2(Y方向)
df[df[‘gnum’]==3]でgnum3(Z方向)
ヒストグラム3個は dxは縦軸で同じ軸に3つのグラフを書きます。
dx = sns.histplot(data = df[df['gnum']==1],x='acX',kde=True) dx = sns.histplot(data = df[df['gnum']==1],x='acY',kde=True) dx = sns.histplot(data = df[df['gnum']==1],x='acZ',kde=True)
①ジャイロのヒストグラム3方向振り方の比較用
②Accのヒストグラム 3方向振り方比較用
●考察
3個のグラフの特徴から、違いを判断するのですが、人間の頭だと2個なら処理 3個の比較となると
すぐにはできませんが、機械学習の結果でも、判断を誤っているので、ソースが加速度ではダメなんんじゃないかと思います。
振っている人間の認識では、明らかに3軸が違っているのですが、加速度とかジャイロでなくて
GPSでの位置として振った座標がでてくれば、一番良いので、加速度を積分した値を与えたほうが
いい結果がでるかもしれないので、やってみます。
●以後
リアルタイムに、ヒストグラムがでてくれば実験がはかどるので、VisualStudio C#でできないか調べてみます。