M5StickC で倒立振子 Blynk でコントロール ー倒立振子への道 4ー

Home > 電子工作 > M5StickC で倒立振子 Blynk でコントロール ー倒立振子への道 4ー
すき 0
うんこ 0

前回、実現できたM5StickCによる倒立振子を前進/後進/旋回動作できるようにいたしました。

M5StickC で倒立振子 PID制御編 ー倒立振子への道 3ー

倒立振子自体の制御は前回と同様にPID制御です。タイヤの回転などを加味したより安定した制御方法は現在勉強中です。いつまでかかるかな。。。?

 

動作

早速動作を見てください。

スマホアプリBlynkを使用してBluetoothでコントロールしています。なかなかかわいいです♪

Blynk設定

前回のアプリ設定にジョイスティックウィジットを追加しただけです。

 

ジョイスティックの設定はx軸とy軸の出力をMERGEしてヴァーチャルピンV4に出力させ、それぞれ値は-5~5としました。y軸の値で前進/後進をx軸で左右旋回動作します。値が大きくなるほど動作速度が上がります。

Arduino IDEプログラム

前回とほぼ同様のコードです。カルマン・フィルタによって傾斜角と角速度の推定値を導出してPID制御によってモータをフィードバック制御しております。

前回コードとの主な差異

  • L421 – 435
    旋回動作を実現させるためにモータドライバの制御を左右のモータで関数を分離しました。これにより左右のモータを異なる動作の指示ができます。
     
  • L459-476
    ジョイスティックの値をヴァーチャルピンV4で受けます。
    y軸の値で前進/後進、x軸の値で旋回動作させます。
     
  • L520, 521
    推定された傾斜角(theta_data[0][0])にジョイスティックy軸の値を足すことで倒立振子の前進(+y)と後進(-y)を実現させています。
     
  • L526, 527
    PIDを係数かけてモータ出力を導出する前に比例項にジョイスティックx軸の値を足すことで倒立振子の旋回動作を実現します。左右それぞれx軸の値を反転させて(L469, 470)足して旋回動作させています。

 

おわりに

PID制御でも動作コントロールできることを確かめました。しかしまだ外乱には弱いですしもっと安定した振子にしたいです。でもロータリエンコーダは使用しないカジュアルな倒立振子にしたいものです。

折角M5StickCが小さくて半端ない集積でもってカワイイのですから。粛々と勉強を進めます。

追記

久々に動かしてみた (2020/3/19)

次の記事

倒立振子の再考

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください