VB.NETリアルタイムグラフプログラム開発も実用段階になってきました。
SCP(SmartCalibrationProbe)でリアルタイム直線回帰実験をしてみました。
●リアルタイム直線回帰
SCPで入力をいれて、被測定物のひずみ値が出力されます。
その相関をSCPを押しながら観察して、押し方によってどのように
相関係数が乱れるのかを観察して、校正の負荷方法の検討します。
▼今までのロードセルの校正は、錘を順次載せながらデータをログして
錘負荷測定が終わってから、EXCELで計算する作業がありました。
そのやり方だと実験が良かったどうかは、10分かけて判定されます。
■リアルタイム直線回帰だと
荷重しながら、相関係数と傾きの変化をみれると、今の荷重方法の
どこが、違うと相関に影響があるのか即判るので、今まで気づかなかった
校正荷重方法の微妙な4M変動が見えてきます。
●リアルタイム直線回帰の実験
SCP用に自作した3分力センサをSCPで押して、相関を観察しました。
①X-Y散布図で比例関係をみる
3個のXYグラフが表示されてます。
左がFx-SCP、中がFy-SCP,右がFz-SCP
鉛直下向きがーFxに設置されてます。左右がFyで水平奥向きがFz方向。
赤プロットが指で押したデータをそのままプロットしたものですが、
バラバラと塊状になってしまいます。これでは相関係数がまともに求められませんので、荷重しながらボタンを押している時間だけ平均値をとって
平均値をプロットするpushModeという測定モードを作りました。
青点が指で押しながら静止させてpushModeでプロットしたものです。下のTEXT Boxに相関係数と傾きが青点を追加するごとに計算されてでてきます。
このpushModeを実現するために、SCPのハンドルのボタンを取り付けました。右手で押しながら左手でボタン押して測定結果をプロットします。
ボタン信号は、SCPのM5StickCのGPIOポートにはいって、送信データと一緒にESP-NOWでPCへ送信されてVBプログラムがボタン押しを認識したら平均計算を開始してボタン解除までずっと平均値をだします。
■プロットした平均値をリアルタイム直線回帰計算
最小二乗法で、プロットしたデータを逐次計算して表示させます。
LSMは簡単な関数にしてあります。LSMの動作デバッグテスト用プログラムをGISTにアップしてありますので試してみてください。
https://gist.github.com/dj1711572002/12657d9a754b758690dc3a8af298997c
●計算原理備忘録
こちらのリンクを参考にさせていただきました。分かり易くて感謝です
https://sci-pursuit.com/math/statistics/least-square-method.html
リアルタイムにするために、データが入ると毎回この関数を読んで
最小二乗法の計算パラメータに追加していきます。
上記リンクの解説から平均値、偏差、分散、共分散を毎データ毎に計算して保持しておきます。
最小二乗法による回帰係数の求め方 |
●いろいろいじってみて様子をみてみました。
①錘を載せて回帰したデータと指で押した場合の違い
なかなか錘載せでも0.999にはなかなかまりません。平均を長めにとると向上してきます。指だと0.997程度がいいとこです。指の押し方向をずらすと0.995まで落ちます。荷重位置を遠くしてモーメントをかけると違ってくるのでFxのクロストークが若干あるということです。
②指でいろいろな方向へ押した場合
Fx-SCP傾きは大きくは変わりませんが、相関は0.995~0.9937と低レベルです。やはり指適当に押すといろいろな分力がはいるので、精度がおちるのは当たり前といえば当たり前ですが、リアルタイムに負荷方法の良し悪しが見える機能としては便利だと思います。
●以後
いろいろいじりながら、多分力センサのリアルタイム校正をどうやってやればいいか、検討を進めていきます。