以前三輪車で電車のシミュレータを作ったが、レールに沿って走るライントレースはもっとも単純なオンオフ制御で行ったので、ギクシャクしながら走るのが気に入らなかった。改善をめざしネットでPID制御の方法を調べ、ライントレースに適用してみた。
PID制御については、ネットで見つけた「ETロボコンではじめるシステム制御」を参考にした。
PID制御の計算は浮動小数点で行うことになるので、PICで処理できるか確認することろから始めた。いつもは8bitのPICを使っているが、比較のために16bitのPIC24FJ64GA002でテストすることにしたが、これまで使っていたMPLAB IDEでは16bitのPICのコンパイラが入手できなくなっていることが判明。あきらめて新しいMPLAB X IDEに乗り換えることにした。コンパイラも新しいものに変わったので、これまでのソースの修正も必要だが、なんとか使い慣れてきた。
PID制御のサンプルコードを16bitと8bitのPICで走らせて実行時間を測ってみたところ、16bitのPIC24FJ64GA002(32MHz)で176μsec、8bitのPIC18F24K20(16MHz)で380μsecとなり、同じクロックとするとほぼ同じ実行速度という不思議な結果が得られた。
大差なければ、以前使ったハードをそのまま使うのが一番楽なので、8bitのPIC18F2431(8MHz)で処理速度を測ってみたところ、1.8msであった。古いPICなので処理が遅いと思われるが、これでやることにした。
今回はセンサはラインの片側に1ヶ取り付け、明るさの目標値に近づくように方向を制御する。三輪車なので、左に曲がるときは、左側の車輪を逆転させ、駆動力をコントロールして曲がる具合を調節する。
1回のPIDの計算に最大で3.5ms程度かかるので、制御の時間間隔は5msとしてある。
比較のために、オンオフ制御とPID制御を切り替えれるようにしておいた。PID制御にすると、ギクシャクした動きがグッと少なくなるのがわかる。