LIBRA(倒立振子ロボット)のGain調整

 連休で車体を作った倒立振子ロボット(LIBRAと命名)のGain調整を昨日に引き続いてやって、1分位は立つようになりました。この時のGain調整の方法を紹介します。

画像


Gain調整のやり方は、Design Wave Magazine 2007 Augustの「加速度センサ、角速度センサの活用事例」の記事に書かれている「秘伝!倒立振子のパラメータ調整法」の項を参考にさせて戴きました。概略を紹介しておきます。

  ①全てのGainをゼロにしておく。
  ②ロボットを手で支えつつ角度Gainを上げて行くとロボットが往復運動をするようになる。
  ③この状態で角速度Gainを上げて行くと往復運動が収まって指一本でロボットの上端を押さえているだけで立つ
   ようになる。
  ④指で支えながら指でロボット引っ張るとそれについて、ロボットが動くようになる。この状態で指を放すと、
   少し止まって立ってから走り続けながら立つようになる。
  ⑤ここで距離Gainを上げると走り出したロボットが戻ってきて大きく往復運動をするようになる。
  ⑥この状態で速度Gainを上げると大きな往復運動が収まって、ほぼ一か所で立つようになる。

 この調整をする前に運動方程式が出してくる値をジャイロ出力(10bit)の精度がきちんと桁落ちしないように実際のモータ速度のスケール(0~255)に収まるよう桁合わせしておく必要があり、この調整に少し手間取りました。きちんと計算すれば机上で考えられたのですが、目分量でやっていたので、昨日は上のGain調整を何回もやりなおす羽目になりなかなかまともに倒立出来ませんでした。
 これを直してからは、Gain調整の①から初めて30分位で立つようになりました。

 撮ったビデオやシリアルI/Fからのデータを見ていくつかモータ制御周りで問題があることに気がつきました。

問題1
 ビデオを見ると気がつくと思いますが、何回か車体が倒れかけた時、立て直しの開始が遅れて大きく走ってやっと立て直す場面があります。このようなケースで、倒れる速度にタイヤのスピードが追いつかないと倒れてしまいます。(タイヤのスピードはMAXが255(1.7回/毎秒)なので、これ以上の値を運動方程式が指示してもプログラムで255に制限を掛けています。)これは、推定ですが、今回のモータ制御は、必ず1周期のパルスが出てから新しい速度指示を受け付けるようにしていることから、モータの回転が遅いケース、1パルスの周期(例えばスピード1の場合は、300ms以上)を待たないと次の速度変更が出来ないので立て直しの開始が遅れるのではないかと思っています。

問題2
 ビデオでは分かりませんが、単三電池4本を載せると車体が重くなるせいか、倒立出来る時間が下がります。これは、低速時の消費電力を減らすために、約2.4msONしてモータを1パルス分動かしたらモータへの電流をオフする処理をしているため、低速時のOFF時間が長くなるときのトルクが下がり過ぎて、電池分の荷重を動かせないのではないかと推定しています。

 これから引き続きこれらの問題を解決するモータ制御を考えてみます。

 一応現在の動きをビデオ(Youtube)に撮りました。




ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 2

なるほど(納得、参考になった、ヘー)
驚いた

この記事へのコメント

いしい
2019年05月03日 20:51
ステッピングモーターで倒立振子を作っていて、全然立つ気配がなかったのですが、貴ページのGain調整の方法を試したら数時間でほぼ直立静止できるようになりました。ありがとうございます!

この記事へのトラックバック