DCマウスの車体制御

フィードバック制御の方法

問題点

基本的にはPID制御で制御を行うのが良いと思います。

ただし、PID制御といっても、制御するべき項目は

  • 速度、距離
  • 角速度、角度
  • 壁との距離(角度)

と3つあるのに対し、出力としては

  • モータの出力(左右)

しかありません。

なので、何らかの方法で3つの量に対する制御を2つのモータへの出力という形に落とし込まなければなりません。

2つの方法

カスケード接続

カスケード接続とは、ものごとを順々に繋いでいく事を表します。

たとえば、角度を制御したい時に、角速度制御を下層の制御として見て、

角度制御量計算();
角速度目標値 = 理想的な角速度 + 角度制御量;
角速度制御量計算();

とやるようなやり方をカスケード接続といいます。

実際にDCマウスの制御をする時には、さらにどんどんカスケード接続していって、
左右のモータの速度(回転数)制御にすべてをまとめてしまうというような接続方法になります。

メリットとして、制御の安定性を評価しやすいという点があります。

下流の方(上の例でのモータの速度など)から制御パラメータを詰めていけば(詰められていれば)、
ある点よりも下流では制御ができている事が保障されているため、今のパラメータだけを見直していけば良いのです。
逆にとらえると、下流の方で調整をミスしていると、上流をいくら調整しても無駄という事も起こり得ます。

壁の制御をどこに接続するかは、工夫のしどころだと思います。
思いついた通りにやってみると割と動きます。これもカスケード接続制御の良い所です。

調整はこちらの方がやりやすい(と思う)ので、下でどうしてもうまく制御できない場合(もしくはパラメータの調整に慣れたい場合)は、こっちでやってみると良いと思います。

ちなみに、この時のさくらねずみ3はこれで動いています。

運動ベースの制御

katoさんNg Beng Kiatさんなど、有名な人が使っている事が知られている方法です。

まず、運動を直線運動と角運動に分解します。すると、それぞれの制御は単純なPID制御で書けます。
あとはそれを足し合わせてモータのトルクとして出力するだけです。
シンプルですが、有効である事は上の2名のマウスの走りを見れば一目瞭然でしょう。(もちろん随所に工夫はあると思いますが)

メリットとして、シンプルなので見通しが良く工夫した結果等を盛り込みやすい、フィードフォワード制御と組み合わせやすい 等があります。
要すると、カスケード接続はなんかごちゃごちゃしてるから嫌だ という人に良いと思います。

速度制御量 = 速度制御();
角度制御量 = 角度制御();
壁制御量 = 壁制御();
 
トルク.右 = 速度制御量 + 角度制御量 + 壁制御量;
トルク.左 = 速度制御量 - 角度制御量 - 壁制御量;

要はこれだけです。

フィードフォワード制御

要するに

マウスが加速する時を考えてみます。

  • 加速度は自分で決めます(a[mm/s^2])
  • 車体の重量は量ってみればわかります(m[kg])
  • タイヤ径も自分で設計しました(D[m])
  • ギヤ比も自分で決めました(G)
  • モータの特性はデータシートに載っています (トルク定数[mNm/A])

この条件があれば、マウスが加速する時に必要とする電流は簡単に求められます。

要するに、簡単に計算できるので 「偏差が出てくるまで仕事をしてくれないフィードバック制御が働く前に出力してしまおう」 というのがフィードフォワード制御です。

/home/users/2/deca.jp-mice/web/cgi/dokuwiki/data/pages/dcマウスの車体制御.txt · 最終更新: 2011/04/20 00:13 by member
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0