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