======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]) この条件があれば、マウスが加速する時に必要とする電流は簡単に求められます。 \\ 要するに、簡単に計算できるので 「偏差が出てくるまで仕事をしてくれないフィードバック制御が働く前に出力してしまおう」 というのがフィードフォワード制御です。