【備忘録】PlatformIOを使った時にボードのバージョンを変える
よくESP32を使っているのですが、たまにボードのバージョンとライブラリがマッチしなくてエラーを吐かれることが多々ありました。 そこで、最近ようやくボードのバージョンを変更して書き込める方法を知ったのでシェアしておきます。 PlatformIOでプロジェクトを作るとplatformio.iniっていうファイルが作られるのでそこを少しいじるだけでいけます。
; platform = espressif32 ;You can change the version of ESP32 platform =espressif32@1.5.0 board = esp32dev framework = arduino monitor_speed = 115200
こんな感じでplatfrom = espressifの後に@バージョンという形で指定すればいけます。 ちなみにmonitor_speedを定義しておくと、シリアルモニターの通信速度を指定できます。
Pythonで3Dグラフの軸ラベル位置を変える
3Dグラフを描画した際に軸ラベルのフォントサイズを変更するとどうしても軸の値と被ってしまい,位置の調整でかなり時間を使ってしまったので備忘録がてら手法を記します.
3Dプロット
3Dプロットにはmatplotlibのpyplotとmpl_toolkitsのmplot3dを使います.
グラフの例としては力センサから得た値をベクトルとして3次元空間上に表現するとします.
(値は何でも良いです)
import matplotlib.cm as cm #カラーマップ import matplotlib.pyplot as pyplot import mpl_toolkits.mplot3d %matplotlib inline X = np.linspace(5,10,10) Y = np.linspace(0,20,10) Z = np.linspace(-20,20,10) figure = pyplot.figure(figsize=(10,10), facecolor='w') ax = figure.gca(projection='3d') xlabel = ax.set_xlabel("X-axis [N]") ylabel = ax.set_ylabel("Z-axis [N]") zlabel = ax.set_zlabel("Y-axis [N]") ax.set_xlim(-20,20) ax.set_ylim(-20,20) ax.set_zlim(-20,20) for i in range(len(X)): ax.plot([0,X[i]], [0,Y[i]], [0,Z[i]], "-^", color=cm.winter(200-(i+1)*20), ms=7, mew=0.5, lw=3) #3D空間上で原点が見にくいので,原点描画用 ax.plot([-21,21], [0,0], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [-21,21], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [0,0], [-21,21], "-", color="gray", lw=1, linestyle = 'dotted') #3Dグラフの視点の変更 ax.view_init(30, 30)
出力すると,
のようになります.
でもこのままだと,軸ラベルが非常に見にくいですよね.
軸の値と軸ラベルの大きさを調整してみます.
軸の値はax.tick_paramsを追加し,
ax.tick_params(labelsize = 13)
軸ラベルにfontsizeを追加することでフォントサイズがそれぞれ変わります.
xlabel = ax.set_xlabel("X-axis [N]", fontsize = 18) ylabel = ax.set_ylabel("Z-axis [N]", fontsize = 18) zlabel = ax.set_zlabel("Y-axis [N]", fontsize = 18)
変更後の全体は
import matplotlib.cm as cm #カラーマップ import matplotlib.pyplot as pyplot import mpl_toolkits.mplot3d %matplotlib inline X = np.linspace(5,10,10) Y = np.linspace(0,20,10) Z = np.linspace(-20,20,10) figure = pyplot.figure(figsize=(10,10), facecolor='w') ax = figure.gca(projection='3d') xlabel = ax.set_xlabel("X-axis [N]", fontsize = 18) ##fontsize追加 ylabel = ax.set_ylabel("Z-axis [N]", fontsize = 18) ##fontsize追加 zlabel = ax.set_zlabel("Y-axis [N]", fontsize = 18) ##fontsize追加 ax.set_xlim(-20,20) ax.set_ylim(-20,20) ax.set_zlim(-20,20) for i in range(len(X)): ax.tick_params(labelsize = 13)##tick_params追加 ax.plot([0,X[i]], [0,Y[i]], [0,Z[i]], "-^", color=cm.winter(200-(i+1)*20), ms=7, mew=0.5, lw=3) #3D空間上で原点が見にくいので,原点描画用 ax.plot([-21,21], [0,0], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [-21,21], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [0,0], [-21,21], "-", color="gray", lw=1, linestyle = 'dotted') #3Dグラフの視点の変更 ax.view_init(30, 30) plt.savefig("output2.jpg")
出力すると,
のようになり,軸ラベルが数値と被ってしまいます.
これではかなり不細工なので,軸ラベルの位置を調整したいと思います.
調整するには,
from matplotlib import rcParams rcParams['axes.labelpad'] = 16
を追加するだけでいけます.
rcParams['axes.labelpad'] はX,Y,Z全ての軸ラベルをまとめて調整することが可能です.
出力すると,
となり,軸ラベル全体でばっちりマージンがとれています.
rcParamsではmatplotlibのパラメータを調整することができます(下記サイトが参考になると思います).
qiita.com
M5StackでMPU9250が動かない
最近M5Stackをよく使うようになりました.
www.switch-science.com
ESP32搭載のLCD付きマイコンでサイズもちょうどよく,Grayを買えばIMU付きで素晴らしい代物です.
特にBLEやWiFiが使えることでデータのやり取りもでき,使い勝手もいいです.
今回,後輩がIMUを使ったアシスト制御みたいなのをやるらしくまずはM5Stackを使ってみることにしました.
Arduino IDEで動かす場合,ボードマネージャからESP32 Dev moduleダウンロードすることで書き込みができるようになったようなので,そちらでやってみました.
しかし,M5StackのライブラリについているMPU9250のサンプルであるMPU9250BasicAHRSを書き込むとM5Stackが永遠と再起動してしまう...
シリアルモニタを見ると
Guru Meditation Error: Core 1 panic'ed (IntegerDivideByZero). Exception was unhandled.
とのこと.
全くわからずGoogle先生で調べてみると,I2C通信の問題らしい...
あまりここらへんは詳しくないため途方に暮れてダメ元でGit GUIを使ったESP32ボードのダウンロードを行ったところ,なんと書き込みが成功しました...!!
github.com
今のところは↑のやり方でやった方が良さそうです.
Scipyのoptimize.fmin関数を使った階段法における心理物理曲線
最近,初めて階段法を使った心理物理実験をやりました.
実験の後半は僕も被験者も意識が朦朧としてました...笑
ただ,プロトコルしっかり練って,それに対応したプログラム組めば実験者側はかなり楽になると思います.
被験者側はしっかり休憩挟む以外,楽する方法は無さそうですね笑
心理物理実験の後はその結果に対してカーブフィッティングを行うことで,PSE(主観的等価点),75%閾値などを算出して基準に対する比較刺激のバイアスがあるかどうかを調べていきます.
カーブフィッティングの方法については下記の梶本先生のページが一番わかりやすいと思います.
恒常法のS字カーブフィッティングについて
せっかくMatlabで書いて頂いているのですが,それを参考にして今回はPythonで書いてみました.
Pythonメモ書き(unique,linspaceメソッド)
- uniqueメソッド
np.unique(array):arrayの中身を重複なしで返す.
例えばarray=[1,1,1,2,3,3]だったら[1,2,3]が返ってくる.
np.unique(array, return_counts=True)とすると,各要素の数も返ってくる.
上の例だと,(array([1,2,3], array([3,1,2]))が返ってくる.
- linspaceメソッド
np.linspace(0,1,50):0~1を50分割したものをストアしたarrayを返す.