倒立振子再チャレンジ(PID制御をExcelでシミュレーション)

 以前、wiiモーションプラスに内蔵されているジャイロを使って倒立振子を行ってみたのですが、微妙な感じでフェードアウトしてしまいました。今回は6軸センサー使用して筐体もあらたに作り直して再チャレンジです。

 

▼筐体はこんな感じです▼
096_02

 安定しやすいように重心を低目に設定。筐体の大半はタミヤの工作キットから作成。制御はArduino/Genuino101で行ってます。

 

 筐体がしょぼいのでソフト面はなるべく凝ってみました。101の内蔵6軸センサー(ジャイロ、加速度)からカルマンフィルター通してドリフト補正を行うなど、可能な限り精度よく角度を検出できるよう調整してます。また、最終的にはPID制御もExcelでシミュレーションしてゲインもなるべく最適化してます。

6軸センサーのドリフト補正
姿勢角補正のビジュアル比較

 

 まずは適当なゲイン設定でためしてみました。

▼ゲイン調整無し▼

 往復を繰り返して、いつまでたっても安定しない状況です。ただ重心が低いのがよかったのか、正確な角度検出がよかったのか、不安定ながらも思いのほか倒立しました。この状態で各種ログを取得、ExcelでフィードバックシミュレーションしてPID制御の調整を行いました。

 

<スポンサーリンク>

 ログから制御周期、姿勢変化の速度などを分析、各種パラメータを暫定的に決めました。その他、この筐体ではPWM出力25%程度以下ではモーターが廻りません。

 

 制御に影響しそうな因子を表計算に組み込んで、ちまちま微積分計算してPID制御のシミュレーションを実施。最後に各ゲインを調整して最適であろうゲインを決定しました。
096_01

 シミュレーションではいい感じに収束してます。ここできめたゲインをソースに反映して試してみました。

 

▼PID制御、ゲイン調整後▼

 

 安定感が随分変わりました。数回のオーバーシュートできれいに安定してます。

 

 今後、Arduinoの電源をスタンドアローン化スマホから内蔵BLE経由で制御できるように改造していきたいと思います。

<スポンサーリンク>

この投稿へのコメント

  1. 匿名 said on 2016-11-22 at 17:32

    こんにちは。
    同じく倒立振子を製作しているものです。

    ゲイン調整についてお聞きしたいのですが、Excelでのシミュレーション計算ではどのような値を参考にして計算したのでしょうか?

    • imo said on 2016-11-22 at 21:51

      こんにちは。コメント有難うございます。
      参考にした値は、適当なゲインで倒立させたときの各種ログ値です。
      制御量、角加速度、角速度、角度、加速度(筐体)、制御周期などで、特に制御量に対する角度変化を参考にして、角度が収束するようにゲインを調整してます。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL