MATLAB/SimulinkでETロボコンに出場する:はじめに

今年もうちの会社からETロボコンに2チームが出場しまして。1つは新人だけで構成されたチーム「爆速」(名前のとおり爆速で走るのが目標だったけど、結果のほうはどうだったのかね) もう1つは中堅で構成したチーム「巨匠・石山岩尾」(名前の由来はメンバーの苗字を1文字ずつ繋げてみたら、結構、強そうだったとか) 東京地区大会に出場しましたが、チャンピオンシップ大会には進めませんでした。
で、この巨匠チーム。真の目的は、MATLAB/Simulinkで開発してETロボコンに出場して、勝てるぐらいのMATLAB/Smulinkスキルを身につけようぜ! というものでした。で、モデルシートには「大会が終わったら、モデル公開します」と書いてあるし。 が、さすがに中堅どころで業務が忙しくて、そこまで手が回らないので、代わりにここで公開することします。 一応、MATLAB/Simulink技術者を養成するというのが、いまのお仕事の1つなので。
で、開発するに当って、いくつかの要求というか目標がありまして、
1.ぜんぶMATLABSimulinkを使って開発する
2.シミュレーションを活用して、開発効率を上げる
3.モデルからコード生成してターゲット開発環境に載せる一連の作業手順を確立する
4.機能拡張を容易にするアーキテクチャにする
5.調整が簡単なアーキテクチャにする
まあ、とくに1-3番あたりはMATLAB/Simulinkで出来るんだよね?という重要事項。4-5番は、このツールを使わなくたって大事なこと。 ですかね。
なんせ、一人前のソフトを揃えるとシミュレーションできるまでが110万円(つまり1-2番ができる) さらにコード生成までできるセットは一人前が240万円もかかります。 スッゲー高いソフトですから、なかなか買えるもんではありません。が、太っ腹の会社。6セット分を買ってくれましたわ!
なので、モデルを公開したところで、MATLAB+Simulink+Stateflowを持っていないと、開いてみることができませんので、HTMLでエクスポートしたファイルをZIPで固めたのを用意しました。 このファイルを解凍して、IshiyamaGanbi2.html ファイルをブラウザで開けば、ブロックをクリックしながら階層構造を開いて、モデルを読むことができます。
「IshiyamaGanbi2.zip」をダウンロード
開くと、トップモデルはこんなふうに見えるはずです。四角いブロックをクリックすると開いて、さらに詳細が見えます。
Modelall
このモデル、ざっと説明すると、下に3個並んでいるのが、EV3に乗っかる部分で、EV3のセンサーとアクチュエータは左右にRealInDev、RealOutDevとして分離されてます。これは、真ん中のTargetModelの入出力をシミュレーターにつなぎ替えてシミュレーションするためです。 上のPlantModelがシミュレーションするための部分。この図の接続はシミュレーションするときの配線で、EV3に載せるコード生成をするときは、バツで示した結線を赤線の方につなぎ替えます。 右上のDashboardというのは、シミュレーションする際に、EV3の前面ボタンを操作したり、走行中のデータを観測したりするダッシュボードが入ってます。 左側にZ-1というDelayが入ってますが、これが一工夫でして、Simulinkってシミュレーションするとき、すべての信号の流れを1つの関数にするみたいで、ループになっていると、無限に関数が終わらない「代数ループ」という状態になるのを防ぐためのもの。
Sim
シミュレーションのプラントモデル、つまり真ん中のTargetModelがセンサーを読んで演算してアクチュエータに出力した結果、走行体に何らかの物理的変化が起こるわけですが、これをどうするか? 最初は簡単な平面のなんちゃってプラントモデルを作ってTargetModelの論理的な確認は出来ていましたが、スタートしてゴールして難所を越えてパーフェクト! という一連の確認をするには本格的な物理シュミレーションが必要なわけで。 そこで、東京地区の人達がUnityを使って実物そっくりのコースに走行体を走らせているのを見て、Unityなら真面目に本物そっくりの大きさ、重さ、トルク、とかでUnityモデルを作ってあげたら、立って走ることも出来るんじゃね? という予測からUnityを使うことにしました。 そのシミュレーションの様子がこれ。
真面目に作ると、ちゃんと立つのが出来るんですわ。Unityって凄い。 そんなわけで、巨匠チームが実機を使って調整を始めたのが、大会1週間前。おいおい、ほんとにそんなんで大丈夫なのかね。
とまあ、シミュレーションの威力を堪能できたわけですが、モデルやシミュレーションについての掘り下げた話は、おいおい追加しておこうと思います。 いやー、MATLABって凄いわ。