以前、wiiモーションプラスに内蔵されているジャイロを使って倒立振子を行ってみたのですが、微妙な感じでフェードアウトしてしまいました。今回は6軸センサー使用して筐体もあらたに作り直して再チャレンジです。
▼筐体はこんな感じです▼
安定しやすいように重心を低目に設定。筐体の大半はタミヤの工作キットから作成。制御はArduino/Genuino101で行ってます。
筐体がしょぼいのでソフト面はなるべく凝ってみました。101の内蔵6軸センサー(ジャイロ、加速度)からカルマンフィルター通してドリフト補正を行うなど、可能な限り精度よく角度を検出できるよう調整してます。また、最終的にはPID制御もExcelでシミュレーションしてゲインもなるべく最適化してます。
・6軸センサーのドリフト補正
・姿勢角補正のビジュアル比較
・加速度センサーのフィルターへの影響
まずは適当なゲイン設定でためしてみました。
▼ゲイン調整無し▼
往復を繰り返して、いつまでたっても安定しない状況です。ただ重心が低いのがよかったのか、正確な角度検出がよかったのか、不安定ながらも思いのほか倒立しました。この状態で各種ログを取得、ExcelでフィードバックシミュレーションしてPID制御の調整を行いました。
制御に影響しそうな因子を表計算に組み込んで、ちまちま微積分計算してPID制御のシミュレーションを実施。最後に各ゲインを調整して最適であろうゲインを決定しました。
シミュレーションではいい感じに収束してます。EXCELで当たりを付けたゲインで、さらに現物でも微調整してソースに反映してます。
▼PID制御、ゲイン調整後▼
安定感が随分変わりました。数回のオーバーシュートできれいに安定してます。
今後、Arduinoの電源をスタンドアローン化、スマホから内蔵BLE経由で制御できるように改造していきたいと思います。
コメント
こんにちは。
同じく倒立振子を製作しているものです。
ゲイン調整についてお聞きしたいのですが、Excelでのシミュレーション計算ではどのような値を参考にして計算したのでしょうか?
こんにちは。コメント有難うございます。
参考にした値は、適当なゲインで倒立させたときの各種ログ値です。
制御量、角加速度、角速度、角度、加速度(筐体)、制御周期などで、特に制御量に対する角度変化を参考にして、角度が収束するようにゲインを調整してます。