基本的にはPID制御で制御を行うのが良いと思います。
ただし、PID制御といっても、制御するべき項目は
と3つあるのに対し、出力としては
しかありません。
なので、何らかの方法で3つの量に対する制御を2つのモータへの出力という形に落とし込まなければなりません。
カスケード接続とは、ものごとを順々に繋いでいく事を表します。
たとえば、角度を制御したい時に、角速度制御を下層の制御として見て、
角度制御量計算(); 角速度目標値 = 理想的な角速度 + 角度制御量; 角速度制御量計算();
とやるようなやり方をカスケード接続といいます。
実際にDCマウスの制御をする時には、さらにどんどんカスケード接続していって、
左右のモータの速度(回転数)制御にすべてをまとめてしまうというような接続方法になります。
メリットとして、制御の安定性を評価しやすいという点があります。
下流の方(上の例でのモータの速度など)から制御パラメータを詰めていけば(詰められていれば)、
ある点よりも下流では制御ができている事が保障されているため、今のパラメータだけを見直していけば良いのです。
逆にとらえると、下流の方で調整をミスしていると、上流をいくら調整しても無駄という事も起こり得ます。
壁の制御をどこに接続するかは、工夫のしどころだと思います。
思いついた通りにやってみると割と動きます。これもカスケード接続制御の良い所です。
調整はこちらの方がやりやすい(と思う)ので、下でどうしてもうまく制御できない場合(もしくはパラメータの調整に慣れたい場合)は、こっちでやってみると良いと思います。
ちなみに、この時のさくらねずみ3はこれで動いています。
katoさんやNg Beng Kiatさんなど、有名な人が使っている事が知られている方法です。
まず、運動を直線運動と角運動に分解します。すると、それぞれの制御は単純なPID制御で書けます。
あとはそれを足し合わせてモータのトルクとして出力するだけです。
シンプルですが、有効である事は上の2名のマウスの走りを見れば一目瞭然でしょう。(もちろん随所に工夫はあると思いますが)
メリットとして、シンプルなので見通しが良く工夫した結果等を盛り込みやすい、フィードフォワード制御と組み合わせやすい 等があります。
要すると、カスケード接続はなんかごちゃごちゃしてるから嫌だ という人に良いと思います。
速度制御量 = 速度制御(); 角度制御量 = 角度制御(); 壁制御量 = 壁制御(); トルク.右 = 速度制御量 + 角度制御量 + 壁制御量; トルク.左 = 速度制御量 - 角度制御量 - 壁制御量;
要はこれだけです。
マウスが加速する時を考えてみます。
この条件があれば、マウスが加速する時に必要とする電流は簡単に求められます。
要するに、簡単に計算できるので 「偏差が出てくるまで仕事をしてくれないフィードバック制御が働く前に出力してしまおう」 というのがフィードフォワード制御です。