(3) 機構系モデルの調査
OpenModelicaの例題にある6軸ロボットアームの機構パラメータを読み取るため,ライブラリブラウザのfullRobotを選択し,モデル図を表示します.
そして,右側にあるMechanicsのところでマウスの右ボタンをクリックし,「クラスを開く」を選択します.
そうして開いた画面で,機構の剛体要素を示す青いアイテム上で右クリックし,「パラメータ」を選択します.
次に開いた画面には,剛体要素の性質を表す各パラメータが現れます.文字が小さくて読みにくいでしょうが,剛体要素の長さ,幅,高さ,質量,慣性モーメント,長さの方向,幅の方向が示されています.一方,剛体要素を結合する要素の情報はなくて,関節の回転方向のみが示されています.つまり,回転方向以外は剛結合しているというモデルです.
ほんのわずかな情報を入力するだけで複雑な6軸アームの機構モデルができるのは,OpenModelicaにマルチボディダイナミクスの技術が取り込まれていて,ユーザが意識せずに使えるようになっているからです.
マルチボディダイナミクスの技術は,重機や自動車のように微小変形を問題視しない場合に,モデル縮退技術として重宝される技術です.
しかし,微小変形を設計課題として扱う精密機械では使えない(使ってはいけない)技術です.
OpenModelicaの例題として示された6軸アームは,関節部で絶対に変形しないロボットアームのモデルだと言えます.
MBDでロボットアームを設計する場合,関節の剛性は重要な設計パラメータですから,ここが剛であると言う設定は困る訳です.
それでも,MBDモデルの検証用に利用することはできます.実際に使うMBDモデルは別の方法で作り,OpenModelicaで作った剛関節のモデルと比較します.
そうすることで,MBDモデルの誤りをチェックすることができます.MBDではVelification(妥当性検証)と呼ばれるものです.
(4) 制御系モデルの調査
前項では,OpenModelicaの例題にある6軸ロボットアームの機構系モデルを調べましたが,本項ではその制御系モデルを調査します.
もう一度,OpenModelicaのモデル全体に戻りましょう.下図左側にある6軸ロボットアーム機構系に結合している6つのブロックが各軸の制御系です.
例として印をつけたaxis1でマウスの左ボタンをクリックすると,下図右側にあるパラメータテーブルが現れます.
各パラメータの内容を見れば,減速機付モータの位置と速度を制御するブロックであることが分かります.
次に,axis1でマウスの右ボタンをクリックしてクラスを開くと,axis1の構成を示すブロック図が示されます.
コントローラとモータ,減速機,角度センサ,角速度センサ,各加速度センサから構成されていることが分かります.
これらの構成要素にマウスを置けば,その詳しい内容を見ることができます.
ただし,結線の始点と終点は曖昧で分かりにくいと思います.ここはModelicak系の弱点です.
該当するプログラムを読まないと始点と終点が分かりません.これではブロック図を示している意義も半減です.
昔,Simulinkが登場するちょっと前の時代では,MatlabのControlToolBoxにある幾つかのコマンド(確か,append,series,parallel,feedback)を使ってブロック線図と等価なプログラムを書いていました.私もその時代を知る一人ですが,ブロック線図でモデルを作成できるSimulinkができて,大いに助かったのを覚えています.
その経験からすると,現状のModelica系言語に対する不満は少なくありません.できれば,早いうちに何とかして欲しいものです.
ついつい,Modelicaへの愚痴が出てしまいましたが,気持ちを切り替えて,コントローラのクラスを開いてみましょう.
ようやく具体的な制御器の姿が現れてきました.右端のブロックにはPIとあるので,ここは比例器と積分器が合体した伝達関数であることは想像できます.
その手前の加算器何となく分かりますが,やはり結線の始点と終点が不明なためプログラムで始点と終点を確認します.
gain2には速度指令値が,gain1には角度指令値が,feedback1にはモーター速度入力されていて,PI制御器の出力は電流指令値だそうです.
どうして,この程度の情報をいちいちプログラムに戻って確かめる必要があるのか?せめて可読性くらいはSimulinkと同じレベルに高めて欲しいものです.(また,愚痴が出てしまいました)
次に,モータのクラスを開いて,その内容を見ましょう.
今度はブロック線図ではなくて,電気電子部品の結線図になっています.差動増幅回路,積分回路,増幅回路が連なっています.
私は電気屋ではないので明言は出来ませんが,各回路は簡単な伝達関数で表現できますから,回路図であろうとブロック線図であろうと,どちらで表現しても構わないように思えます.
むしろ,モータのような電気部品は制御器と同じように伝達関数で表した方が分かり易いように思います.
実際,電気制御系のモデルをSimulinkで表現することに不満を言っている電気屋さんを知らないですから,モーターはSimulinkに似せたブロック線図で表現した方が使い易いと思います.
OpenModelicaについては,色々と苦言を呈しましたが,1DCAEで唯一の無料ソフトであり,誰でも気楽に使える割には,とても優れた性能を持っています.
詳細なモデルを作ろうとすると,他の有料アプリには叶わないらしいですが,そもそも1DCAEで詳細なモデル作ろうとすること自体が本末転倒な気がします.
比較的簡単なモデルを作ってみては,その特徴を定性的に把握するような使い方をするとか,velification(妥当性検証)に利用するなど,賢く使えば良いと思います.