倒立振子キットを買いました
スイッチサイエンスでPololu製の倒立振子ロボットのキットを買いました。タイヤとモータは別売りです。これで制御の勉強をしたいと思います。サンプルコードで動かせるらしいので、まずはそこまでやりました。
組み立て自体は簡単です。はんだ付けキットでしたが、ほとんどの部品は実装済みでした。あとはモータやタイヤ部分の組み立てです。
倒立振子してくれない
サンプルコードが用意されており、これを動かすだけで倒立振子として動いてくれるらしいのですが、どうも一発ではうまくいきませんでした。
サンプルコードは各種制御の係数などがパラメータ化されていました。私が用意したモータは75:1のモータでギア比がデフォルトの構成と違ったのでこれは変更しました。ギア比リストが乗っていたページ
ですがこれが原因ではなさそうです。
サンプルコードを動かしていたところ、どうにも両のモータが逆向きに動作しているようでした。左右でモータの向きを変えないといけなかったようでした。組み立て書にモータに書かれている⊕を上にして組みたてるという旨が書かれていたのですが、基板を水平にしたときの上方向と勘違いしました。正しくは基板を垂直に立てた時の上方向です。
arudinoのブートローダが破壊された
このキットはマイコンにATmega32U4を使用しておりArduino Leonardoの互換となります。作業中何回もプログラムの書き換えを行っていましたが、途中arudinoが認識しなくなりました。調べてみるとブートローダの破壊みたいで、よくあるらしいです。
arudinoのファームウェアがどういう構造になっているか詳しくないですが、なにやらややこしいです。
・ブートローダが破壊されたarudinoを接続すると認識できないUSBデバイスとして認識?されます。
・リセットボタンを2回連続で押すとリセットモード的なモードになります。(LEDがゆっくり光る)この時にはwindowsにCOMポートとして認識されます。(arudinoとして認識されていたときとは違うCOM番号になりました。)
リセットモード的なモードですが、数秒すると勝手に終了してまた認識できなUSBデバイスとなってしまいます。厄介なことにリセットモード的なモードでCOMポートが認識されている隙に書き込まないといけないようです。(別の手法もあるようです。)
うまくタイミングを合わせてリセットボタンを2回押してプログラムを書き込みます。書き込むときは普通にarudinoIDEから書き込めばよいそうです。
使っていたarudinoIDEのバージョンは2.0.3だったのですけれど、この手法ではブートローダの復旧はできませんでした。旧バージョンのarudinoIDEを使ったらうまく書き込めて復旧しました。
ゲームコントローラで動かす
キットには無線モジュールなど搭載されていませんので、倒立させた後は動かすことができませんでした。ランニングエレクトロニクスのSBDBTを使ってゲームコントローラで動かしました。ボタンに前後と旋回を割り振っています。