みなさん,こんにちは
おかしょです.
このブログではこれまでに二輪型倒立振子に関する記事を公開してきました.運動方程式の導出から制御器によって倒立振子を制御する数値シミュレーションまで解説してきました.
しかし,記事を書いていて気が付いたのですが,これまでの記事を順番に読んでもらわないと理解できない記事が増えてしまいました.
例えば,振り子の長さや慣性モーメントなどをそのまま書いてしまうと数式が長くなってしまうのでまとめて\(A_1\)や\(B_2\)などと置いています.この文字の具体的な意味は最初の運動方程式の導出を解説している記事を見なければわかりません.
そこで,これから二輪型倒立振子のシミュレーションを行いたい方が迷うことなく自分でシミュレーションを行うようになるために読むべき記事の流れをここに記録していこうと思います.
この記事を読むと以下のようなことがわかる・できるようになります.
- 二輪型倒立振子のシミュレーションを行う方法
- 数値シミュレーションを行う流れ
この記事を読む前に
この記事では二輪型倒立振子の数値シミュレーションを行う方法について解説するのですが,そもそも数値シミュレーションをするのが初めての方は,以下の記事で数値シミュレーションをするために必要なものなどを解説しているので,そちらを先に読んでおくことをおすすめします.
おすすめはしますが,以下の記事を読まなくてもこの記事の内容は理解できると思いますのでご安心ください.
数値シミュレーションを行う流れ
まずは二輪型倒立振子の数値シミュレーションを行う全体像を解説します.
- 運動方程式を求める
- システムのパラメータを求める
- プログラムorブロック線図を書く
- 自由応答を確かめる
- 制御器の理論を理解する
- 制御器を設計する
- 制御器をシミュレーションに適用する
順番に解説していきます.また,各ステップのことを詳細に解説した記事のリンクも貼り付けていますので,順番に読んでいただければ二輪型倒立振子の制御シミュレーションができるようになります.
1. 運動方程式を求める
まずは二輪型倒立振子の運動方程式を求めます.運動方程式の求め方にはニュートン法とラグランジュ法があるのですが,二輪型倒立振子は構造が少し複雑なのでニュートン法よりもラグランジュ法の方が求めやすいです.
以下の記事で運動方程式の導出を解説しています.
2. システムのパラメータを求める
運動方程式を導出しただけでは振り子の長さや慣性モーメントなどの数値が入っていません.これではシミュレーションのプログラムを書こうにも,数値がわからないので書くことができません.
なので,想定する二輪型倒立振子の各種パラメータを求める必要があります.本当は実際にCADソフトなどを用いて自分で設計した方がためになると思いますが,とりあえずシミュレーションをしたいという方は以下の記事にパラメータの例が示されているので参考にしてください.
3. プログラムorブロック線図を書く
運動方程式・パラメータがわかったらシミュレーションプログラムを書くことができます.シミュレーションソフトとしてよく使われるのはMTLABというソフトです.MATLABは非常に多くの研究機関でも用いられていて,論文にもこのソフトを使って作ったブロック線図が掲載されていたりします.
シミュレーションをするソフトは他にもscilabというものがありますが,MATLABの方が使いやすいですしサポートも充実しています.また,Excelを使うという方法もありますがMATLABの方が圧倒的に使いやすいです.
ただ,MATLABは有料のソフトなので抵抗を感じる方もいると思います.ですが,初めの1か月は無料で使えます.この無料期間が切れるとMATLABのライセンスが切れて使えなくなるのですが,もう一度MATLABをインストールしなおすと1か月間無料で使えるようになります.少し面倒ですが,1か月ごとにインストールすることでずっと無料でMATLABを利用することができます.
ちなみにMATLABはインストールするツールの数にもよりますが1万円から2万円ほどでインスト―ルができます.私は1か月ごとにインストールするのは面倒なのでライセンスを購入してMATLABを使用しています.
さて,話は戻ってシミュレーションのプログラムを書いていきます.シミュレーションはすべてプログラムで書いても良いのですが,初心者の方はsimulinkと言うブロック線図を作るツールを使用することをおすすめします.simulinkと言うのはMATLAB内の機能で,ブロックを矢印でつなげるだけでシミュレーションができてしまう優れものです.
これを使用するとシミュレーションをする上で絶対に必要な積分などの計算をブロックを置くだけで勝手にやってくれます.
シミュレーションを初めてやる方はsimulinkがおすすめですが,積分の計算などすべてプログラムで行うことも可能です.simulinkだと自分で理解していないこともできてしまって気持ちが悪いので,私はすべてプログラムでシミュレーションを行い,シミュレーション結果が正しいかsimulinkで確認をするようにしています.
シミュレーションを行うためのプログラムの書き方は以下で解説しています.
「現在準備中です...」
4. 自由応答を確かめる
シミュレーションをするプログラムが書けたら自由応答を確かめます.
自由応答とは制御入力を一切加えないときの応答のことを言います.
二輪型倒立振子の場合は,振り子の状態が垂直状態の時は垂直状態を続けるはずです.もしこの時点でシミュレーションを行って,垂直状態を続けないような応答をした場合はプログラムを見直す必要があります.
次に初期値を与えてみます.この時,すべての状態変数の初期値を順番に変更していくようにしてください.例えば,振り子の角度のみ初期値を\(0.1rad\)としてみると振り子の角度は鉛直下向きになって収束するはずです.収束しない場合はシミュレーション時間を伸ばしてみてください.この記事で紹介しているパラメータを使用している場合は収束するはずですが,違うパラメータを使用している場合は振り子の慣性モーメントを大きくしてみたりして収束するか確かめてください.それでも収束しない場合はプログラムを確認してください.
この自由応答の確認方法の詳細については以下の記事で解説しています.
「現在準備中です...」
5. 制御器の理論を理解する
次に制御器を設計します.二輪型倒立振子の制御目標は振り子の倒立状態を維持することや目標地点へと誘導することだと思います.
さまざまな制御器がありますが,シミュレーションしたい制御器がある場合はその制御器をどのようにして二輪型倒立振子に適用するのか考え設計する必要があります.その前に制御器を深く理解する必要があるので理論をしっかり確認しましょう.
PID制御
特にやりたい制御器がない場合は,初心者の方はPID制御がおすすめです.以下の記事でPID制御について解説しています.
6. 制御器を設計する
制御器の理論を確認したら,二輪型倒立振子に適用するにはどのようにすればいいの考えます.
PID制御
先ほど挙げた例のPID制御器を倒立振子に適用したい場合は,ゲインの選定が重要になります.PID制御器は非常に単純な構造をしていますが,ゲインの選定を間違えると倒立状態を維持することができません.
そこで,PID制御のゲインを極配置法という手法で求めます.極配置法を行うには以下の記事で解説しているように二輪型倒立振子の運動方程式を線形化する必要があります.
線形化をしたら伝達関数を求めます.二輪型倒立振子の振り子の伝達関数は以下の記事で解説しています.
伝達関数を求めると,二輪が倒立振子の伝達関数は3次のシステムとなることがわかります.3次のシステムに対して極配置法でPID制御器を設計する方法は以下の記事で解説しています.
7. 制御器をシミュレーションに適用する
最後に制御器を二輪型倒立振子のシミュレーションに適用します.
PID制御
PID制御器をシミュレーションに適用する場合は伝達関数を基に制御ゲインを求めます.制御ゲインの求め方や数値シミュレーションの結果は以下の記事で解説しています.
上の記事では線形化した二輪型倒立振子に極配置法で設計したPID制御器を適用しています.しかし,実際のシステムはラグランジュ法で導出した運動方程式のように非線形です.非線形システムにこのPID制御器を適用した場合,応答が少し異なります.
極配置法で設計したPID制御器を非線形システムに適用した場合の記事は以下になります.
まとめ
以上のような流れで二輪型倒立振子の数値シミュレーションを行うことができます.ほかの制御器も適用したら,この記事にリンクを張っていこうと思いますので,気になる方はチェックしてみてください.
続けて読む
このブログでは,実際に二輪型倒立振子を作成した記録も公開しています.以下の記事で制作過程をまとめています.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
YouTubeでも制御工学や電子工作などの解説をしているので,ぜひのぞいてみてください.
それでは最後まで読んでいただきありがとうございました.