ビーム上の球のバランスを取るコードを配備する

はじめに

天秤の水平ビーム(梁)に乗せた球は不安定である.重力の影響で球はビームの端から端へ転がり,天秤も水平位置には留まらない.しかしモータを使うと,ビームの向きと球の位置が制御できる.

球の位置は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要素を取り除いたときの違いを調べる.
  • アンチワインドアップ制御を使う.