LEGO MINDSTORMS を利用した回転型倒立振子の開発

ファイル配布

 本事例紹介を執筆時点(2014 年 11 月)での注意事項を以下に示します(今後,EV3 用の Simulink サポートパッケージの不具合は改善されると思います).
  1. Windows7 (64bit) にインストールされた R2014a, R2014b で動作確認済みです.
  2. Simulink Support Package for LEGO MINDSTORMS EV3 Hardware のインストール方法については,こちらを参照してください.なお,R2014a 以降のバージョンしか利用できません
  3. Simulink モデルの転送には LAN 環境が必要です.詳しくはこちらを参照してください.配布する Simulink モデル sample_PID.slx, ident_arm_EV3.slx, ident_pend_EV3.slx, sfbk_ip_EV3.slxの IP アドレスは,使用する環境のものに変更してください
  4. EV3 のファームウェアのバージョンが V.1.03E の場合,バージョンアップをした方がよいです(ネットワーク環境にもよりますが,いちいちネットワークのパスワードを入力する必要がなくなります).バージョンの確認方法はこちらの少し下にある「現在のファームウェアのバージョンを確認するには」を,更新の方法はこちらを参照してください.
  5. Simulink モデルのノーマルモードの実行方法はこちらを参照してください.ただし,R2014a, R2014b では日本語環境で EV3 のノーマルモードを利用できません(2014 年 11 月時点).ノーマルモードでファイルを転送すると同時にこれが実行されます.しかし,実行終了後,EV3 側の操作でファイルを選択し,実行するとエラー音が鳴り,二回目以降は実行できません.この問題に対処するには,Windows の「コントロールパネル」から「時計、言語、および地域」「地域と言語」と進み,形式を「日本語(日本)」から「英語(米国)」などに変更します.そして,MATLAB を再起動してから SImulink モデルをノーマルモードで実行してください.そうすれば,EV3 側の操作で転送されたファイルを実行できます.
  6. Simulink モデルのエクスターナルモードでの実行方法はこちらを参照してください.
 リンク先のいくつかは MathWorks 社のホームページですが,バージョンアップに伴い,リンク切れになる可能性があります.

 同じフォルダ(たとえば C:\hoge )に以下のファイルをすべて配置してください.ただし,フォルダ名は英数1バイト文字(日本語名不可)としてください.また,コマンドウィンドウで
>> cd C:\hoge 
などと入力し,このフォルダをカレントディレクトリにしてください.

 以下の配布ファイルをまとめた hoge.zip も用意しました.
モータ角度の PI-D 制御 sample_PID.slx  モータのケーブルの端子を A ポートに接続してください.
 コマンドウィンドウで
>> clear
>> h = 0.01;
>> kP = ***;
>> kI = ***;
>> kD = ***; 
と入力してから,Simulink モデルを実行してください.
アームのパラメータ同定 ident_arm_EV3.slx  アームのケーブルの端子を A ポートに,振子のケーブルの端子を C ポートに接続してください.
  コマンドウィンドウで
>> clear
>> h = 0.01;
と入力してから,Simulink モデルをエクスターナルモードにより実行してください.実行終了後,
>> save ident_arm_data t theta1 v
と入力し,mat ファイルにデータを保存してください.
ident_arm_data.mat  保存したデータの例です.
ident_arm.m  二次遅れ系の特性に着目してアームのパラメータ同定を行う M ファイルです.この M ファイルを実行すると,コマンドウィンドウに同定された値が
>> ident_arm
Tp = 1.95e-01
Amax = 2.62e-01
wn = 1.76e+01
zeta = 4.04e-01
a = 1.42e+01
b = 3.45e+00
のように表示され,同時に,実験結果とシミュレーション結果を比較したグラフが描画されます.
振子のパラメータ同定     ident_pend_EV3.slx  アームのケーブルの端子を A ポートに,振子のケーブルの端子を C ポートに接続してください.また,振子が真下で静止していることを確認してください.
 コマンドウィンドウで
>> clear
>> h = 0.01;
と入力してから,Simulink モデルをエクスターナルモードにより実行してください.
 実行を開始するとビープ音が鳴りますので,手で振子が水平になるまで持ち上げ,5 秒以内に静かに手を離してください.
 実行終了後,
>> save ident_pend_data t phi2
と入力し,mat ファイルにデータを保存してください.
ident_pend_data.mat  保存したデータの例です.
ident_pend.m  最小二乗法により振子のパラメータ同定を行う M ファイルです.この M ファイルを実行すると,コマンドウィンドウに同定された値が
>> ident_pend
J2 = 9.27e-06
c2 = 1.33e-05
のように表示され,同時に,実験結果とシミュレーション結果を比較したグラフが描画されます.
pend_MN_sim.slx  (6)式のフィルタ処理を行うための Simulink モデルです.M ファイル ident_pend.m のなかで利用されています.
pend_free_sim.slx  振子の非線形モデル(5)式の時間応答(自由振動)のシミュレーションを行うための Simulink モデルです.M ファイル ident_pend.m のなかで利用されています.
最適レギュレータによる安定化 rotary_ip_lq.m  上記のパラメータ同定により得られたパラメータを定義したうえで,状態方程式の A, B 行列を求めます.また,重み Q, R を適当に与えて,最適レギュレータによりコントローラ設計を行う M ファイルです.この M ファイルを実行すると,
>> rotary_ip_lq
A =
0 0 1.0000 0
0 0 0 1.0000
0 0 -14.2000 0
0 94.6538 9.7278 -0.4519
B =
0
0
3.4500
-2.3635
K =
7.0711 242.1298 10.2507 23.8934
ans = % A + B*K の固有値
-13.8549 + 4.2030i
-13.8549 - 4.2030i
-6.2995 + 0.0000i
-1.7486 + 0.0000i
のように結果が表示されます.同時に,サンプリング間隔 h やローパスフィルタの時定数 Tf1, Tf2 もこの M ファイルで定義されています.
sfbk_ip_EV3.slx  アームのケーブルの端子を A ポートに,振子のケーブルの端子を C ポートに接続してください.また,振子が真下で静止していることを確認してください.
 エクスターナルモードで実行を開始するとビープ音が鳴りますので,10 秒以内に振子を手で真上付近まで持ち上げ(時計回り,反時計回りのいずれにも対応しています),軽く支えてください.10 秒が経過した後,安定化制御が開始されるので,静かに手を離してください.軽くつついても倒れないと思います.60 秒が経過すると,実行は終了します.
 ノーマルモードで実行するときも手順は同じです.この場合,EV3 側でキャンセルボタンを押すまで実行は終了しません.