卒 業 論 文
LEGO
を用いた倒立振子の制御系設計に関する研究
石川工業高等専門学校 電気工学科 学籍番号 011242米田 典正
主任指導教員河合 康典
助手 2006年 2 月c
2006
Yoneda norimasa All rights reserved
要 旨 本研究では, LEGO を用いた倒立振子の作成を行い, その安定性を評価する. そこで, Matlabの中の Simlink と言うソフトをもちいて, シミュレーションをおこない, システムの 安定性を示す. はじめに, LEGO を用いて倒立振子を作成する. 今回は, 光センサと角度センサの 2 種類 のセンサを用いて, 異なる原理で振子の傾きを感知する 2 種類のものを作成しました. 次に, それぞれの動作のしくみ, LEGO MINDSTORMS の部品, LOBOLAB を用いて作成した制 御用プログラムについての説明をおこなう. そして, それらの安定性や, 反省点について示 します. 次に, Matlab を用いて, 作成した倒立振子の安定性を評価するためのシミュレーションを おこないます. そのために, まず, 作成した倒立振子の重量や, 振子の長さなどの値を用いて システムをモデリングし, ループゲイン, コントローラなどの値を求めます. そして, 振子の 安定性, 可観測性, 可制御性について検証した後, 最適なフィードバックゲインを, 線形 2 次 レギュレータをもちいて求めます. 最後に, これまでに求めた値をもちいてシミュレーショ ンをおこないます.
i
目 次
第1 章 はじめに 2 1.1 研究の背景 . . . . 2 1.2 目的 . . . . 2 1.3 構成 . . . . 2 第2 章 LEGO を用いた倒立振子の製作 4 2.1 LEGOによる倒立振子の製作 . . . . 4 2.2 LEGOの部品の説明 . . . . 4 2.3 光センサを用いた倒立振子の製作 . . . . 5 2.3.1 光センサを用いた倒立振子の結果 . . . . 8 2.4 角度センサを用いた倒立振子の製作 . . . . 8 2.4.1 角度センサを用いた倒立振子の結果 . . . . 10 第3 章 Matlab によるシミュレーション 11 3.1 システムのモデリング . . . . 11 3.2 システムの安定性 . . . . 13 3.3 可制御性と可観測性 . . . . 14 3.3.1 可制御性 . . . . 14 3.3.2 可観測性 . . . . 15 3.4 線形 2 次レギュレータ . . . . 16 3.5 シミュレーション結果 . . . . 18 第4 章 おわりに 24 4.1 本研究のまとめ . . . . 24 参考文献 25ii 図 目 次
図 目 次
2.1 光センサ . . . . 4 2.2 角度センサ . . . . 4 2.3 タッチセンサ . . . . 5 2.4 温度センサ . . . . 5 2.5 モータ . . . . 5 2.6 RCX . . . . 5 2.7 光センサを用いた倒立振子の全体図 . . . . 6 2.8 センサ部の拡大図 . . . . 6 2.9 光センサを用いた場合 . . . . 6 2.10 角度センサを用いた倒立振子の全体図 . . . . 8 2.11 センサ部の拡大図 . . . . 8 2.12 角度センサを用いた倒立振子の制御プログラム . . . . 9 3.1 倒立振子のモデル . . . . 11 3.2 制御対象のブロック線図 . . . . 16 3.3 Simulinkを用いたブロック線図 . . . . 18 3.4 R=1, Q*1 の場合の input . . . . 19 3.5 R=1, Q*1 の場合の input . . . . 19 3.6 R=1, Q*0.1 の場合の input . . . . 20 3.7 R=1, Q*0.1 の場合の state . . . . 20 3.8 R=1, Q*0.01の場合の input . . . . 21 3.9 R=1, Q*0.01の場合の state . . . . 21 3.10 R=1, Q*10 の場合の input . . . . 21 3.11 R=1, Q*10 の場合の state . . . . 21 3.12 R=1, Q*100 の場合の input . . . . 21 3.13 R=1, Q*100 の場合の state . . . . 21 3.14 R=0.1, Q*1の場合の input . . . . 221 3.15 R=0.1, Q*1 の場合の state . . . . 22 3.16 R=0.01, Q*1の場合の input . . . . 22 3.17 R=0.01, Q*1 の場合の state . . . . 22 3.18 R=10, Q*1の場合の input . . . . 22 3.19 R=10, Q*1 の場合の state . . . . 22 3.20 R=100, Q*1の場合の input . . . . 23 3.21 R=100, Q*1 の場合の state . . . . 23
2 第 1 章 はじめに
第
1
章
はじめに
1.1
研究の背景
近年,ロボット工学の急速な進歩により 2 足歩行ロボットや犬型ロボットの登場が相次い だ.ロボットは人間にとってより身近なものになってくると予想される.また, 体の重心が 脚の支持平面内をはずれる期間のある二足歩行を動的二足歩行といい, 機械的に実現するこ とが困難な問題の一つである. このような問題に対して, 二足歩行ロボットのダイナミクス を, 脚の伸縮する倒立振子によって近似することができる. よって, 倒立振子についての研 究がより重要となる.1.2
目的
振子は, 棒 (または紐) の先に取り付けた重りが一定振幅で揺れ続けるものであり, これを 逆さまにして, 手のひらでほうきを立てるようなことをするのが倒立振子である. 本研究では, 振子が倒れそうになったときに人の手を使わずに, 自動でバランスを取って 倒れないようにするための装置を製作することで, 二足歩行ロボットの研究につなげる. そ の装置を LEGO を用いて倒立振子の製作し, その安定性を Matlab によるシミュレーション を用いて評価する.1.3
構成
本論文では, 2 章で LEGO MINDSTORMS と ROBOLAB の説明と, それらを用いて倒立 振子の製作と実験をおこなう. 3 章では, 製作した倒立振子のパラメータをつかい, Matlab を用いてシステムをモデリングする. つぎに, 安定性, 可制御性, 可観測性について述べる.
1.3. 構成 3 最後に, 適切なフィートバックゲインを求めて, それを用いてシミュレーションをおこない, システムの安定性を検証する.
4 第 2 章 LEGO を用いた倒立振子の製作
第
2
章
LEGO
を用いた倒立振子の製作
2.1 LEGO
による倒立振子の製作
LEGO MINDSTROMS チームチャレンジ基本セット< USB 方式>と, LOBOLAB 2.5.4
を用いて倒立振子を製作した. LEGO MINDSTROMS チームチャレンジ基本セットとは, RCX(マイコン) や光センサ, タッチセンサのほかに, モータ等が入っている, ロボットを作 るための LEGO のセットである. LOBOLAB とは, LEGO MINDSTROMS で製作した, ロ ボットを動作させるプログラムを作るための専用ソフトウェアである. これらを用いて, そ れぞれに異なる種類のセンサを用いて 2 種類の倒立振子を, 文献 [1, 2] を参考に製作する.
2.2 LEGO
の部品の説明
図 2.1: 光センサ 図 2.1 に示した光センサは, 反射光を利用して, 明るさを 0 から 100 までの数値で測定できる. 赤色ダイオードの横にフォトダイオードが付 いている. これを用いて, ライントレーサなど を作ることができる. 図 2.2: 角度センサ 図 2.2 に示した角度センサは, センサの穴を通 したシャフト (棒) が,どれだけ回転したかを 測定できる. 差し込んだ軸が1回転すると 16 カウントするようになっている. つまり, 分 解能は 360/16=22.5 °で, サンプリング周期は 3[ms]である.2.3. 光センサを用いた倒立振子の製作 5 図 2.3: タッチセンサ 図 2.3 に示したタッチセンサは, スイッチが押 されることで, 何かにぶつかっているかが測定 できる. 黄色の部分を押すことで ON/OFF が 切り変わる. 図 2.4: 温度センサ 図 2.4 に示した温度センサは, 摂氏マイナス 20 度から摂氏 50 度までの温度を測定できる. 図 2.5: モータ 図 2.5 に示したモータは, ロボットを動かすた めのもので, ROBOLAB で速度を 5 段階で調 節できる. 図 2.6: RCX 図 2.6 に示した RCX は, PC からプログラムを ダウンロードすることで, LEGO のパーツを制 御できるマイコンで, LEGO MINDSTORMS チームチャレンジセットに付属のパーツであ る. CPUは,H8/3292 という日立製の 8bit CPU(アドレス空間は 16bit) で 16MHz で動 作する.そして,ROM が 16kbyte,RAM が 32kbyteである.ROM にはファームウェアを RCXにロードするプログラムが格納されてお り,RAM にファームウェアとユーザプログラ ムを書き込むことになる.また,この CPU は 10bitの A/D コンバータを内蔵しており,各 センサからこの A/D コンバータを介して入力 を受け付けている.
2.3
光センサを用いた倒立振子の製作
はじめに, 光センサを用いた倒立振子を製作した. センサの前を振子が通るとセンサの受光部に入る光量が変化するので, それを利用して振 子の傾きを感知する. 光センサは 2 つ使用しており, 振子の傾きが 0 の位置の左右に一つず6 第 2 章 LEGO を用いた倒立振子の製作 つ取り付けてある. これによって, 振子が倒れたときに, どちらかのセンサが傾きを感知す るようになっている. また, 製作した倒立振子は以下に示したものになりった. 台車の質量 0.95 [kg] ボールの質量 0.1 [kg] 棒の長さ 1.2 [m] 図 2.7: 光センサを用いた倒立振子の全体図 図 2.8: センサ部の拡大図 センサは, できるだけ高い位置に取り付けたほうが, 振子の小さな振れを感知することが できるので, 図 2.7 のような形になる. また, 図 2.8 にセンサー部を拡大したものを示す. ROBOLABで作成したプログラムを図 2.9 に示す. 図 2.9: 光センサを用いた場合
2.3. 光センサを用いた倒立振子の製作 7 コマンドアイコンの説明 (1) · プログラムのスタート地点を設定する. · プログラムは常にこのコマンドで開始する. (2) · 新しいタスクを開始するのにこのアイコンを使用する. · タスクは同時に実行される. (3) · あるコマンドを繰り返す場合にジャンプが役立つ. ジャンプの後に繰り返しの起点となる場所に着地コマンドを置く. 着地コマンドにはジャンプコマンドをあわせて使用する必要がある. (4) · つぎのコマンドに進む前に光センサーの出力値が任意の値だけ 増加するのを待つにはこのコマンドを使用する. (5) · ポート A に接続されたモーターを順方向に回転する場合 にこのアイコンを使用する. · モーターを反対方向へ回転させたい場合には モーター A 逆方向コマンドを使用する. · モーターが回転するスピードを 1(遅い) から 5(速い) の間で 変更することもできる. 特に指定しない無い場合, パワーレベルは 5(速い) に設定される. (6) · つぎのコマンドに進む前に光センサーの出力値が任意の値だけ 減少するのを待つにはこのコマンドを使用する. (7) · 全てのポートに接続されたモーターやランプを ブレーキ停止 (急激に停止) するにはこのアイコンを使用する. (8) · あるコマンドを繰り返す場合にジャンプが役立つ. ジャンプコマンドには着地コマンドをあわせて使用する必要がある. (9) · インベンタープログラムは常にこのコマンドで終了すること. · 各タスクにはそれぞれ終了コマンドが必要. (10) · 入力装置がポート 1 に接続されたことを示すのにこのアイコンを使用する. (11) · モーターのスピードを 5 に変更するにはこのアイコンをモーターに連結する. スピード 1 が最も遅く, スピード 5 が最も速い.
8 第 2 章 LEGO を用いた倒立振子の製作
2.3.1
光センサを用いた倒立振子の結果
平均で約 10 秒間, 最大で 20 秒間振子が倒れずにバランスを取ることができた. 光センサーを出来るだけ振子の高い位置に取り付けたほうが, 小さな振子の振れを感知で きるため, 振子の支点から約 50cm の位置にセンサを取り付けた. このため, 台車部分の質量 が大きくなり, 応答が遅くなるほか, 滑りやすい床では, うまく動かなかった.2.4
角度センサを用いた倒立振子の製作
角度センサを用いた倒立振子を製作した. 振子が傾くと振子の軸に付けられた歯車が回転 し, その小さな振子の傾きを, 歯車を使ってセンサが感知できるまで増幅することで, 振子 の傾きを感知する. また, 製作した倒立振子は以下に示したものになった. 台車の質量 0.85 [kg] ボールの質量 0.1 [kg] 棒の長さ 1.2 [m] 図 2.10: 角度センサを用いた倒立振子の全体図 図 2.11: センサ部の拡大図 図 2.10 に示したように, 角度センサを使うことで, 光センサを用いていたときのように, 大きなセンサ部が不要になったので, 台車部分を軽くすることができた. また, 図 2.11 にセ ンサー部を拡大したものを示す. 作成したプログラムを図 2.12 に示す.2.4. 角度センサを用いた倒立振子の製作 9 図 2.12: 角度センサを用いた倒立振子の制御プログラム コマンドアイコンの説明 (12) · 角度センサーをリセットするのにこのコマンドを使用する. リセットしたときの角度を 0 とする. · 角度または回転データを取るときに役立つ. (13) · つぎのコマンドへ進むのに 10 秒待つ場合にはこのコマンドを使用する. モーターやランプを使う場合に動作時間を選ぶのに役立つ. (14) · 音声での反応を得るにはこのアイコンを使用する. (15) · コンテナに回転センサーの値を代入するにはこのコマンドを使用する. · デフォルトではコンテナに, ポート 1 の回転センサーの値が設定されるが ,アイコンによって回転センサーが どのポートに接続されているかを確認する必要がある. (16) · コンテナに値を代入していることを示すのにこのアイコンを使用する. (17) · 回転センンサーによって異なるアクションをとらせたいとき, この分岐を使用する, このアイコンの後のどこかで分岐合流が必要. · このアイコン以前のどこかで角度センサーを ゼロにするコマンドを使用する必要がある. 注意:回転センサーは 16 分の 1 ずつを読み取るので, 読取値 16 で1回転となる. 回転は順 方向と逆方向の両方がある. (18) · コンテナの値を使うのにはこのモディファイアを使用する. (19) · 分岐したタスクを合流させるのに使用する.
10 第 2 章 LEGO を用いた倒立振子の製作
2.4.1
角度センサを用いた倒立振子の結果
平均で 5 秒, 最大で 7 秒程しかバランスを保つことができなかった. 光センサのときのよ うに, 大きなセンサーが要らなくなった分, 台車部分は軽くなったが, LEGO の角度センサー の分解能が低いため, うまく振子の傾きを感知してくれなかった. そのため, ギアを用いて 振子の振れを増幅したが, ギアの遊びもあり, 常に応答が遅れるため振子のバランスを保つ ことができなかった.11
第
3
章
Matlab
によるシミュレーション
3.1
システムのモデリング
図 3.1: 倒立振子のモデル ここでは, 光センサを用いた場合の値を使用して, 文献 [3, 4] を参考に, 図 3.1 に示したシ ステムのモデリングをおこなう. まずはじめに, Matlab によりシミュレーションを実行する ために, 下の各値を, バネばかり, ストップウォッチなどを用いて測定した. 台車の質量 : M [kg] ボールの質量 : m [kg] 棒の長さ : l [m] 台車に加わる力 : f (t) [N] 振子の振れ角 : θ(t) [rad] 台車の位置 : x(t) [m] 摩擦係数 : b [Ns/m] これらの数値から, このシステムの A, b, c を求める. ニュートンの運動方程式より (M + m)¨x + ml cos(θ)¨θ =−b¨x + ml sin(θ) ˙θ2+ f (J + ml2)¨θ + ml cos(θ) ˙x =−mg sin θ (3.1)12 第 3 章 MATLAB によるシミュレーション が成立する. θ = 0の近傍では cos θ≈ 1 sin θ ≈ θ ˙θ2 ≈ 0 なので (3.1) 式は (M + m)¨x + mlθ ¨θ =−b¨x + f (J + ml2)¨θ + mlθ ˙x =−mg sin θ (3.2) となり, 状態:x = [x, θ, ˙x, ˙θ]T , 入力:u = f , 出力:y = x より (3.2) 式を状態空間表現に変換 すると, d dt x θ ˙ x ˙ θ = 0 0 1 0 0 0 0 1 0 m 2sl2 J (M + m) + M ml2 −(J + ml2)b J (M + m) + M ml2 0 0 mgl(M + m) J (M + m) + M ml2 mlb J (M + m) + M ml2 0 x θ ˙ x ¨ θ + 0 0 J + ml2 J (M + m) + M ml2 ml J (M + m) + M ml2 f (3.3) y = 1 0 0 0 x (3.4) となる, ここに光センサを用いた場合の倒立振子の値の M = 0.85 [ rmkg], m = 0.1 [kg], l = 1.2 [kg], b = 0.144 [Ns/m]を (3.3) 式, (3.4) 式に代入すると. dx dt= 0 0 1 0 0 0 0 1 0 0.544 −0.176 0 0 4.310 −0.073 0 x+ 0 0 1.111 0.463 u (3.5) y = 1 0 0 0 x (3.6) となる. また, 状態方程式 ˙x = Ax + bu y = cx (3.7) なので, A, b, c は (3.5) 式, (3.6) 式より,
3.2. システムの安定性 13 A = 0 0 1 0 0 0 0 1 0 0.544 −0.176 0 0 4.310 −0.073 0 (3.8) b = 0 0 1.111 0.463 (3.9) c = 1 0 0 0 (3.10) となる.
3.2
システムの安定性
システムの平衡状態 x = 0 は, それが安定で, 任意の初期状態から出発する. ˙x = Ax の 解が, lim t→∞x(t) = 0 であるとき, 漸近安定であるという. 固有値の実部が正なら応答は発散してゆく, つまり lim x→∞x(t) =∞ 負なら収束してゆく, つまり lim x→∞x(t) = 0 また, 固有値の虚部が存在する場合は応答は振動する. よって, システムが漸近安定であるための必要十分条件は, 行列 A のすべての固有値の実 部が負であることである. 行列 A の固有値 λ = 0, 2.0718,−2.0811, −0.1667 である. よって, 漸近安定ではない14 第 3 章 MATLAB によるシミュレーション
3.3
可制御性と可観測性
LEGOによって製作ことしかできないので, 本来 c = 0 1 0 0 (3.11) であるが, これでは可制御, 不可観測になってしまうため, 本実験では, 完璧なコントローラ を設計するために c = 1 0 0 0 (3.12) とした.3.3.1
可制御性
可制御性とは, 状態空間 X の任意の 2 点, x0, x1に対して, t = 0 で x0にあった状態を, 有 限な時間 t1 > 0において x1に移す入力 u(τ ), 0≥ τ < t1が存在するとき, 可制御であると いう. システムが可制御であるための必要十分条件は, n 次の正方行列 可制御性行列 Co = b Ab . . . An−1b (3.13) が正則であることであり, rank b Ab . . . An−1b = n (3.14) であればよい. Matlab では ctrb 関数を使うことで可制御性行列 Co を求め, rank 関数で Co の階数を求めることができる. Co=ctrb(A,B) rankCo=rank(Co) この計算結果は,3.3. 可制御性と可観測性 15 Co = 0 1.111 −0.195 0.286 0 0.463 −0.081 2.000 1.111 −0.1955 0.286 −0.095 0.463 0.081 2.01 −0.371 rankCo = 4 よって, このシステムは可制御であることがわかった.
3.3.2
可観測性
可観測性とは, 有限な時間 t1 > 0存在して, 区間 [0, t1]における出力 y のデータから, t = 0 における状態 x0を一意的に定めることができるとき, 可観測であるという. システムが可観測であるための必要十分条件は, n 次の正方行列 可観測性行列 Ob = c cA .. . cAn−1 (3.15) が正則であることであり, rank c cA .. . cAn−1 = n (3.16) であればよい. Matlabでは obsv 関数を使うことで可観測性行列 Ob を求めることができる. Ob=obsv(A,C) rankOb=rank(Ob) この計算結果は,16 第 3 章 MATLAB によるシミュレーション Ob = 1 0 0 0 0 0 1 0 0 0.544 −0.176 0 0 −0.096 0.031 0.544 rankOb = 4 よって, このシステムは可観測であることがわかった.
3.4
線形
2
次レギュレータ
b
sx
c
y
1u
A
x
K
図 3.2: 制御対象のブロック線図 図 3.2 より, 制御対象の状態変数 x と出力値 y が, 線形な状態方程式 ˙ x = Ax(t) + Bu(t), x(0) = x0y = cx (3.17) に従うとき, 制御量 u を, u =−Kx (3.18) によって決定し, 制御する方式である. この系を安定化させるフィートバックゲイン K を求める手段として最適レギュレータ法 を用いる. 2次形式評価関数 J = ∞ 0 (xTQx + uTRu)dt (3.19) が最小となるようにフィートバックゲイン K を求める方法である. Q および R は正定値の 対称行列で, この 2 つを選びなおすことで, 最適なフィートバックゲイン K を選ぶことがで きる. Q≥ 0, R ≥ 03.4. 線形 2 次レギュレータ 17 ここで, リカッチ方程式 (P を未知行列として) 0 = ATP + P A− P BR−1BTP + Q (3.20) を満足する正定対称解 P をもちいて K = R−1BTP (3.21) と求められる. Matolabでは lqr 関数を使うことでフィートバックゲイン K を求めることができる. 今回は Q = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 , R = 1 として, R=1; Q=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1] [P, e, K] = lqr(A, B, Q, R) eig(A-B*K); このプログラムでは最後に閉ループの固有値を求めているが, 閉ループの固有値とは, 図 3.2 より, ˙x = Ax + bKx = (A + bK)x (3.22) となり, このときの A + bK の固有値である. そして, この計算結果は, ans = -2.3359 -1.8764 -0.8933 + 0.4868i -0.8933 - 0.4868i
18 第 3 章 MATLAB によるシミュレーション となり, すべての固有値の実数部が負となっている. このことがら, 最適レギュレータ法に よる状態フィートバックは漸近安定であることがわかる. また, このときの P の値は P = 2.69 −19.40 3.10 −9.59 −19.40 382.90 −42.50 187.63 3.10 −42.50 6.19 −20.99 −9.59 187.63 −20.99 92.25 (3.23)
3.5
シミュレーション結果
システムのモデリングによって求めた , A, b, c, P を用いて, Matlab の中の Simulink とい うソフトを用いてシミュレーションをおこなう. まず, 図 3.2 で示したシステムのブロック線図を, Simulink を用いて再現したものを図 3.3 に示す. つぎに , K, b, c, A にそれぞれ Matlab で求めた値を代入するように設定する. 最後 に, VR Sink に x, θ が代入されるように設定する. このとき, x = [x, θ, ˙x, ˙θ] なので, このな かの x と θ を取り出して, VR Sink につなぐ. また, 時間変化を観測するためのブロックを つなげることで, input, state, output に出力されている波形を観測することができる.このソフトは下図のようにシステムのブロック線図を作り, output で出力値 y, state で状 態値 x, input で制御量 u のそれぞれの時間変化を見ることができる. また, VR Sink では倒 立振子のモデルが実際に動いているシミュレーションを見ることができる.
図 3.3: Simulink を用いたブロック線図
3.5. シミュレーション結果 19 x0 = x θ ˙x ˙ θ = 1 0 0 0 (3.24) とする. また, y = 1 0 0 0 (3.25) なので, 上図は状態量の中から x のみを表示しているので x = y である. x が次第に 1 から 0に近づいているのでこのシステムは安定である. この時のシミュレーション結果を示す. 0 1 2 3 4 5 6 7 8 9 10 -0.5 0 0.5 1 図 3.4: R=1, Q*1 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.5: R=1, Q*1 の場合の input つぎに, フィートバックゲイン K の値を変化させて, システムの応答の変化を調べる. K = R−1BTP (3.26) なので, この中で B は変化させることが出来ないので, R と P を変化させて, K を変化さ せる. これらの結果を表にまとめると,
20 第 3 章 MATLAB によるシミュレーション
stateの振幅 stateの収束の早さ inputの振幅 inputの収束の早さ
Q R*0.1 少し減少 変化なし 約 2 倍に増加 変化なし Q R*0.01 減少 変化なし 約 4 倍に増加 変化なし Q R*10 少し増加 変化なし 約 1/2 倍に減少 変化なし Q R*100 増加 変化なし 約 1/4 倍に減少 変化なし Q*0.1 R 少し減少 やや遅くなる 約 2 倍に増加 変化なし Q*0.01 R 減少 遅くなる 約 4 倍に増加 変化なし Q*10 R 少し増加 やや早くなる 約 1/2 倍に減少 変化なし Q*100 R 増加 早くなる 約 1/4 倍に減少 変化なし
上の表の state の振幅, state の収束の早さ, input の振幅, input の収束の早さは, それぞれ
R=1, Q*1を基準としている. 以下に, そのときの応答の波形を示す. 今回は, R, Q を多少変化させてもシステムは安定 だったが, R, Q によってシステムが不安定になってしまう場合もある. 0 1 2 3 4 5 6 7 8 9 10 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 図 3.6: R=1, Q*0.1 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.7: R=1, Q*0.1 の場合の state
3.5. シミュレーション結果 21 0 1 2 3 4 5 6 7 8 9 10 -2 0 2 4 6 8 10 図 3.8: R=1, Q*0.01 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.9: R=1, Q*0.01 の場合の state 0 1 2 3 4 5 6 7 8 9 10 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.10: R=1, Q*10 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.11: R=1, Q*10 の場合の state 0 1 2 3 4 5 6 7 8 9 10 -0.5 0 0.5 1 図 3.12: R=1, Q*100 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.13: R=1, Q*100 の場合の state
22 第 3 章 MATLAB によるシミュレーション 0 1 2 3 4 5 6 7 8 9 10 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5 図 3.14: R=0.1, Q*1 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.15: R=0.1, Q*1 の場合の state 0 1 2 3 4 5 6 7 8 9 10 -0.08 -0.06 -0.04 -0.02 0 0.02 0.04 0.06 0.08 0.1 図 3.16: R=0.01, Q*1 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.17: R=0.01, Q*1 の場合の state 0 1 2 3 4 5 6 7 8 9 10 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 図 3.18: R=10, Q*1 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.19: R=10, Q*1 の場合の state
3.5. シミュレーション結果 23 0 1 2 3 4 5 6 7 8 9 10 -2 0 2 4 6 8 10 図 3.20: R=100, Q*1 の場合の input 0 1 2 3 4 5 6 7 8 9 10 -0.2 0 0.2 0.4 0.6 0.8 1 図 3.21: R=100, Q*1 の場合の state
24 第 4 章 おわりに
第
4
章
おわりに
4.1
本研究のまとめ
本研究では, LEGO MINDSTORMS と ROBOLAB の説明と, それらを用いて作成した倒 立振子と, その制御用プログラムについての説明を行った. そして, その安定性を検証した. 次に, 作成した倒立振子のパラメータをつかい, MATRAB を用いてシステムをモデリング した後, 安定性, 可制御性, 可観測性について検証した. 最後に, 適切なフィートバックゲイ ンを求めて, それを用いてシュミレーションを行い, システムの安定性を検証した.
25
参考文献
[1] LEGO Dacta社 ROBOLAB のホームページ. http://www.lego.com/dacta
[2] マインドストーム情報局. http://www.mi-ra-i.com/JinSato/MindStorms
[3] 片山徹, 線形システムの最適制御, 近代科学社, 1999.