倒立振子

目的

  • カルマンフィルタ、PID制御の勉強
  • Arduinoでのジャイロセンサ、DCモータ活用

ジャイロセンサ、DCモータ制御について調べたりしていると倒立振子をよく見かけます。

カルマンフィルタにも興味があったので、勉強がてら作ってみました。


倒立振子とは

倒立振子とは、支点よりも重心が高い位置にある振り子をいう。

写真に示すように、支点を台車に載せて実装する、台車駆動型倒立振子がよく知られている。ほとんどの応用例において振り子はある回転軸まわりにのみ運動するよう固定されており、自由度は1に制限されている。 by

倒立振子を作る上で必要な技術としては

1.ロボティクス(機械系)
・倒立振子(ロボット)の力学モデル作成
2.エレクトロニクス(電気系)
・各種センサの原理とデータ取得
・DCモータの制御
3.アルゴリズム(情報系)
・カルマンフィルタによる真値推定

等、メカ・ハード・ソフト全ての要素が含まれます。

倒立振子は学習用教材としても優れているため、幸い、ネットに親切な記事がたくさんあります。 そんなわけで中身を全て理解していなくてもプログラムはコピペで作成可能でした。

センサ出力値、向き、制御方向の把握、制御パラメータの調整等はあったので、簡単とは行きませんでしたが。。。

動画

説明

ジャイロセンサー(MPU6050)から取得できる角速度、加速度をカルマンフィルタで補正し、算出されたロボットの傾き角度からモータへの操作量をPID制御で計算、制御している。

 ・カルマンフィルタのざっくり説明

ジャイロセンサは仕組み上、単位時間あたりの角速度[deg/sec]を取得できるが、誤差が乗るため角速度の積分値である角度[deg]の推定精度が落ちてしまう。(つまり相対的な動きの検知は得意だが、絶対値の検知は苦手ということ) そのため、加速度などの情報(静止時はZ方向の重力は1GでXY方向は0になるはず等)を統合、センサフュージョンさせることで角度の推定精度を上げている。その手法の一つがカルマンフィルタである。この技術はアポロ13号の打ち上げや人工衛星にも使用されているらしい。

 ・PID制御のざっくり説明

DCモータは一般的にPWM制御でモータに流す電圧を調整している。 一定速度なら一定の操作量(モータへの印加電圧)でよいが 今回のように現在の角度からフィードバックして時々刻々と操作量を変えてやるには制御工学の知識が必要であり、そして古典制御の代表格がPID制御である。 詳細な説明は色んなサイトに書いてありますが、まぁ結局コントロールするのはPWMDutyの電圧なので、計算でその最適な操作量を求めましょうね、その手法の一つがPID制御、ということです。

青がロボットの推定角度[°]、赤がモータへの操作量[PWM値/10]。 角度が0になるように操作量を制御しています。


参考

月着陸船アポロに学ぶ 確率統計コンピュータ

トランジスタ技術 2019年 7月号

今後の展望

今回はトラ技のようにロータリエンコーダや現在制御は使わずに 作成したので、次回は使いたい。

しかしこの倒立振子、必要とされる技術は非常に高度でアカデミックなものだが、いかんせん見た目が地味すぎる。。。

たぶん子供や何も知らない人が見ても「倒立してる、だから何?」という反応な気が。ム〇タセイサク君、セ〇コちゃんレベルでようやく「ワオ!」だろうか。 次回作るときは見て楽しい要素を入れ込みたい。


この記事を書いた人

メカトロ同好部 エルチカ

本団体は、電子工作が好きな人の集まりです。 主に愛知県周辺のメイカーイベントに出展していたりします。 本サイトは、作品紹介やコラムなど掲載しております。

0コメント

  • 1000 / 1000