ビーム上の球のバランスを取るコードを配備する
はじめに
天秤の水平ビーム(梁)に乗せた球は不安定である.重力の影響で球はビームの端から端へ転がり,天秤も水平位置には留まらない.しかしモータを使うと,ビームの向きと球の位置が制御できる.
球の位置はIR(赤外線)距離センサで測定する.ビームはサーボモータで制御する.モータが必要とする動作電圧は電圧変換器で保たれる.球の希望の位置はポテンショメータを使って指定する.Arduino Unoで実行する制御器はポテンショメータとIRセンサの値を読み取り,サーボモータに適切な信号を送る.
まず系のモデルを計算することから始める.その後,IRセンサとサーボモータの校正を行う.PID制御器,極配置制御器,積分制御器の3つの制御器を設計し,応答を比較する.
部品
Makeblockサーボモータ[リンク]
シャフトコネクタ[リンク]
Makeblockサーボモータのブラケットペア[リンク]
Makeblock Beam0824-320ペア[リンク]
Makeblock Beam0824-192ペア[リンク]
Makeblock Beam0824-160ペア[リンク]
Makeblock Beam0824-144 [リンク]
Makeblock Beam0824-096ペア[リンク]
Makeblock Bracket 3x3ペア[リンク]
M4x22mmねじ7個[リンク],M4x14mmねじ30個[リンク],M4x8mmねじ5個[リンク],M4ナット14個[リンク],4x7x2のプラスチックリング3個[リンク]
モータフランジとビームの3Dプリントのメスコネクタ[リンク]
モータフランジとビームの3Dプリントオスコネクタ[リンク]
3Dプリントのビームエンド2個[リンク]
IR距離センサ[リンク],3ピンメスケーブル[リンク],ハウジング[リンク]
Arduino Uno [リンク]
ポテンショメータ[リンク]
ProtoShield [リンク]
オスピンヘッダ[リンク]
USBケーブル[リンク]
可変DC/DC電圧変換器[リンク]
電源アダプタ[リンク]
各種スペーサ[リンク]
重石またはクランプ
長方形粘着マウントテープ[リンク]
ピンポン玉
組立て
0824-096ビーム2つと0824-160ビーム2つをM4x14ねじ4個で留め,ベースを作る(動作中にカタカタ音がしそうな場合は,底に長方形粘着テープを貼り付ける).
3x3のブラケットをM4x14ねじ2個とナット2個を使って0824-160ビームそれぞれに取り付ける.
0824-192ビームをM4x22ねじ2個とナット2個を使って0824-160ビームそれぞれに取り付ける.
0824-144ビームをM4x14ねじ4個で0824-192ビーム2つの上に取り付ける.
モータブラケットを0824-144ビームにM4x14ねじ2個とナット2個で取り付ける.
モータ,モータフランジ,シャフトコネクタ,モータフランジとビームのメスコネクタを,M4x22ねじ1個(中央)とM4x14ねじ2個で取り付ける.
組み立てたモータをM4x8 mmねじ3個とプラスチックリング3つでモータブラケットに取り付ける.
3ピンのメスケーブルの片方の端をIR距離センサに,もう片方をハウジングに挿してから,M4x8ねじ2個を使ってセンサをビームエンドの一つに取り付ける.
0824-320ビームの片方は,目盛を付けて長さが測れるようにする.
ビームエンドをM4x14ねじ8個で0824-320ビームに取り付ける.
フランジとビームのオスコネクタを,目盛が付いていない方の0824-320ビームにM14x22ねじ2個とナット2個で取り付ける.
ブラケットをIRセンサが付いている側の0824-320ビームにM14x22ねじ2個とナット2個で取り付ける.
ビームに取り付けたオスコネクタを,組み立てたモータ側部品のメスコネクタに差し込み,重石を使って固定する.
ProtoShieldボードまたはブレッドボードを使って電気接続を配線する.電圧変換器を接続する前に,出力電圧(VOUT)が6Vに設定されていることを確認する.
スペーサを使ってArduinoを持ち上げ,その上にProtoShieldボードを載せる.
モータとセンサをProtoShieldボードのそれぞれ適切な場所に接続する.
モデル化
前から見たピンポン球とビーム.
サーボモータに指定された角度を制御入力とする.モータの動力学を無視すると,ビームの質量も無視できる.
ラグランジアン(Lagrangian)を運動エネルギーとポテンシャルエネルギーの差として計算する.
ピンポン球は中空球であり,すべることなく転がると仮定する.
制御入力uの線形化フィードバックを使う.これは系を線形化する.
仮定と線形化フィードバックを加えたラグランジアン.
運動方程式.
入力u,出力rの線形StateSpaceModel(状態空間モデル).
センサの校正
IRセンサの値を読み取り,それをシリアルチャンネルに出力するコードを埋め込む.
マイクロコントローラへの接続を開く.
入ってくるデータを解釈する関数.
入ってくるデータを読み取るタスク.
ピンポン球をビームのさまざまな位置に置き,センサの読取り値を記録する.
センサデータ.
十分なデータ点を取得したら,タスクを停止し接続を閉じる.
非線形モデルをデータにフィットする.
データとモデルを比較する.
モデルをNonlinearStateSpaceModel(非線形状態空間モデル)として再構築する.
サーボの校正
モータの制御にArduinoサーボライブラリを使用する.
サーボ出力チャンネル.
ライブラリで指定されたサーボの「角度」は 0から180までの値を取る.これはモデルで使われている θ と同じではない.θ と「角度」のマッピングを特定する必要がある.
これを行うために,特定の「角度」の値のサーボ出力のモデルを作成する
これをマイクロコントローラに埋め込むと,ビームはそれに従って向きを変える.
結果の θ を計測して記録する.これを繰り返していくつかのデータ点を得る.
非線形モデルをデータにフィットする.
データとモデルを比較する.
モデルをNonlinearStateSpaceModelとして再構築する.
θ が大きいと,ビームがテーブルにぶつかる可能性がある.また,制御器が大きい θ 値からビームを戻すときに,ピンポン球がビームから落ちる可能性がある.これを防ぐために,サーボが均衡値 θ ==0からどれだけ回転できるのかについてクランプを設ける.
クランプのモデルを作成する.
その他の構成要素
必要となる他の構成要素のモデルを作成する.
基準位置はポテンショメータで設定され,これは0から5Vまでである.これを- 6 cmから6 cmにマップするモデルを作成する.
モデルをNonlinearStateSpaceModelとして再構築する.
基準位置と実際の位置を比較する比較器のモデル.
シミュレーション用に,連続時間比較器も必要である.
AVR-Libcライブラリの逆正弦関数asinは,引数が正しい範囲でない場合エラーを返す.ArcSinの計算をうまく扱うモデル.
逆正弦の引数が正しい範囲であることを確認する別のモデル.
制御器コードのためのマイクロコントローラの指定.
マイクロコントローラ,ポート,ライブラリの指定.
サンプリング期間.
PID制御器の設計
フィルタした微分部分を持つPID制御器を設計する.
閉ループ系.
閉ループ系のシミュレーションを行う.
シミュレーションから,安定するのに少し時間がかかることが分かる.系の固有値を見ると,虚軸に近いものがあることが分かる.
フィードバック制御器.
フィードフォワードフィルタ.
PID制御器を離散化する.
PID制御器の配備
PID制御器の全容.
パッケージをロードする.
制御器を埋め込む.
極配置制御器の設計
極を左半平面に移動させるのに極配置を使用する.これには状態フィードバックすべてを使い,位置rだけが計測されるため,推定器も必要である.また,制御器が基準信号を追跡するためにフィードフォワード項も必要である.
StateFeedbackGainsを使ってフィードバックゲインを計算する.
推定器ゲインEstimatorGainsを計算する.
状態推定器.
フィードバック制御器.
フィードフォワード制御器.
制御器とプラントの構造.
閉ループ系.
閉ループ系の固有値.
設計された場所にあることを確認する.
制御器を離散化する.
極配置の配備
極配置制御器の全容.
制御器を埋め込む.
積分制御器の設計
状態方程式を誤差の積分値で拡張する.
誤差に大きくペナルティを与えるオプションの最適ゲイン一式.
閉ループ系の固有値.
フィードフォワード制御器.
フィードバック制御器.
制御器とプラントの構造.
閉ループ系.
固有値を計算する.
制御器を離散化する.
積分制御器の配備
積分制御器の全容.
結論
3つの制御器の線形閉ループ系のステップ応答のシミュレーションにより,極配置制御器の性能が他よりよいことが分かる.
PID制御器は予想通り,二重積分系ではあまりよい結果が得られなかった.実際の物理的な系では,整定時間が長く,オーバーシュートが大きいという特徴がある.定常状態応答はよい結果が得られた.
極配置制御器ではよい結果が得られたが,別の設置で異なるIRセンサとモータを使うと性能が非常に低かった.
全体として,過渡応答,定常状態応答,外乱応答については積分制御器が最も良い結果を出した.これはセンサとモータを変更してもよい性能を維持でき,十分に堅固であった.
発展
- 外乱応答のシミュレーションを行う.
- 他のPID調整則を試す.
- 他のフィードバックゲイン,推定器ゲインを試す.
- 非線形ArcSin要素を取り除いたときの違いを調べる.
- アンチワインドアップ制御を使う.