逆立ちに再挑戦してみた。これまでは、PID制御のI(積分)の項はすぐに発散して使いにくいためPとDの項だけで制御していた。今回は積分の項も使うようにしてみたところ、しっかり立てるようになった。つついても転ばないし、ギクシャクしながらだけど、前後に歩くこともできるよになった。
いつものレゴのモーターを使うことにしたが、これまで逆立ちに使っていた2つのモーターのうち1つがキュルキュル音を出すようになり、ついに使えなくなってしまった。30年くらい前の初代マインドストームのモーターなので、十分もとはとったけど残念。
ライントレース用に組み立ててあるモーターを1つ外して使おうかと思ったが、逆立ちだけならモーター1つでもできそうなので、残った1つのモーターで動かすことにした。モーターを1つにしたので、車体はコンパクトにできた。後輪はレゴの小さな車輪をつけてある。
基板は以前逆立ちに使ったものをそのまま使う。CPUは16bitsのPIC24FV32KA301、モータードライバーはロームのBD6211。センサーも以前と同じフォトリフレクタのRPR220を使う。床からの反射光の強さを測定し、一定の値になるようにモーターを制御する。
PIDの積分の項を以前8bitsのPICで使おうとしたときには、すぐに発散してしまい、使えなかったが、今回は16bitsのPICにしたこと、積分の値を32bitsにしたこと、などが効いたのか、発散せずにうまく使えるようになった。
Iの項を使うことにした効果は驚くほどで、以前よりも安定して逆立ちできるようになった。床からの距離の目標値を少し変更すると、ギクシャクしながら前後に歩くこともできるようになった。
リモコンはものづくり用に作ったものを使った。ボリュームが3ヶあるので、これでP・I・Dの係数を設定できるようにした。試しにPやIの係数を小さくすると、立てなくなってしまう。Dの係数を大きくするとしびれたようにビリビリ振動し、小さくすると酔っ払ったようにユラユラ前後に揺れるようになる。Pの係数を大きくすると、前後にフラフラ動くのが少なくなる。