【PyFMI】最小構成のMBD事例 第2章 その128【リアルタイム描画㉒】

【PyFMI】最小構成のMBD事例 第2章 その128【リアルタイム描画㉒】 事例
【PyFMI】最小構成のMBD事例 第2章 その128【リアルタイム描画㉒】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回はコードの修正を実施。
各関数(メソッド)で横断的に使用されてるものはメンバ変数へ移動。

各変数のスコープがハッキリしたことろで、
今回から実験続きを実施する。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

修正コードでとりあえず動作

太郎くん
太郎くん

コードの修正もできたし、とりあえず動作させてみるよー。

tkinter、FMU、クラス、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]
太郎くん
太郎くん

うん。
コード修正はしたけど、問題無く動作しているようだ。

やはり少しカクついてる?

太郎くん
太郎くん

と言ってもやっぱり少し波形がカクついてように見えるんだよなー。
Scaleのバーをマウスで動かしてるせいもあるかもしれないけど、
うまく原因の切り分けはできないものかなー。

フクさん
フクさん

そのためにsin波入力の機能を入れ込んでいる。

太郎くん
太郎くん

そっか。
sin波がキレイにでれば、マウス操作のせいで、
そうでなければ、処理の負荷に原因がある。
ってことにあるのか。

太郎くん
太郎くん

というわけでsin waveのチェックをON!

tkinter、FMU、クラス、sin波入力、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]
太郎くん
太郎くん

やっぱりカクついてる!
これはやっぱり処理負荷のせいなのか?!

フクさん
フクさん

そこで、Enable Cpu Loadのチェックを入れて、
FMU処理の周期をプロットするモードにしてみよう。

FMU処理の周期で負荷の確認

太郎くん
太郎くん

よし!
sin波入力のままEnable Cpu Loadのチェックを入れてみる。

tkinter、FMU、クラス、sin波入力、CPU負荷表示、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]
太郎くん
太郎くん

この点線が負荷・・・とすると、
なんか負荷が高い時と低い時が交互にあって、
負荷が高い時にカクついてる・・・?

フクさん
フクさん

波形を一時停止して、
下部の方にある虫眼鏡のボタンで波形を拡大してみよう。

太郎くん
太郎くん

たしかmatplotlibのメニューを配置してたね。
こういう時に使うものだったのか。

負荷を拡大して確認

tkinter、FMU、クラス、sin波入力、CPU負荷表示、リアルタイム描画、Enable Scale bar、Enable Cpu Load、pause、sin wave、Sawtooth wave、target Speed、target[rad/s]、voltage[V]、speed[rad/s]、loadTorqueStep.tau[N m]、current[A]、cpu_load[ms]
太郎くん
太郎くん

これは完全に処理できていない期間があるってことだな。

フクさん
フクさん

そうだね。
点線が処理負荷ことFMUの処理可能な周期を示してて
逆に言うとFMU処理以外の別の処理で持ってかれている時間と言える。
単位はmsで、
負荷が低い時は10ms周期くらいで駆動しているが、
負荷が高い時は80ms~100msくらいは別の処理に持っていかれてるようだね。

太郎くん
太郎くん

まじかー。
これだとイマイチかなー。

フクさん
フクさん

まぁ80ms~100msをどうとらえるかだなー。
多少反応精度が悪いHILSでも良いってことであれば、
使い道はありそうってところかな。

太郎くん
太郎くん

でも大体制御とかって10ms以下で動いてたりしない?

フクさん
フクさん

そうだねー。
でも、それっぽい応答性が机上で評価できればOKってことであれば有用とは言える。

太郎くん
太郎くん

まぁこのレベルの環境である程度の不具合を洗い出して、
もっと高性能なHILSで詳細確認みたいな役割分担ってのは可能ってことか。

まとめ

フクさん
フクさん

まとめだよ。

  • 修正コードでとりあえず動作させてみた。
    • 問題無く動作した。
  • 負荷確認実施。
    • カクついているが人間の操作のせいの可能性もある。
  • sin波の自動入力で確認。
    • やはりカクついている。
      • よって、操作の問題ではない。
  • CPU負荷を見て、さらにmatpotlibの波形拡大で詳細確認。
    • FMU処理以外の処理負荷大きそう。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました