制御モデルの作成

HOME>>メモ>>天地人メモ>>制御モデルの作成
ロボットを制御するというからには、制御対象であるロボットがどのように振る舞うかを知らなければなりません。 そこでここでは、移動ロボットの制御モデルがどのように表現されるか、 どのようなコントローラを作成すればよいかを考えてみます。

モデル化の前提

まずは対象となるロボットを決めます。 平面を移動する移動ロボットの作り方にはいろいろありますが、 ここでは対向2輪型(2輪駆動1キャスタ)のロボットを対象とします。 対向2輪型とは、左右の独立な駆動輪とひとつのキャスタのみで構成できる簡単な移動方法です。 作るのが簡単で、制御も容易、自由度も高い、制御屋さんにも設計屋さんにもみんなに易しい方式、ということで採用しました。 動力としては、DCモータを想定します。

このロボットの制御モデルを作りたいのですが、実際のロボットを厳密にモデル化することは困難です。 そこで次のような仮定をします。

  • タイヤはすべらない
    タイヤによる移動は、床とタイヤとの摩擦を利用して移動しています。 しかし、この摩擦を正確に知ることは困難です。ここでは、床との摩擦力が十分に大きいと仮定します。
  • ロボットは十分重くて、大きい
    モータの力は、ロボットを動かすためだけでなく、タイヤやギヤを回転させるためのにも使われます。 しかし、タイヤやギヤを動かすために必要な力はロボットを動かすために必要な力と比べれば小さいと考えられます。 簡単のために、タイヤやギヤの回転に必要な力は無視できるものとします。
  • 電機系の動作は機械系の動作に比べて十分速い
    DCモータは内部にコイルをふくんでいるので、モータに流れる電流は印加電圧に対して複雑な過渡応答を示します。 しかし、この応答は電気的なものであるので、機械系の応答と比べて速いと考えられます。 そのため、モータのコイルが機械系に与える影響は小さいと考えられ、ここではその影響を無視することにします。

駆動系のモデル化

電気系のモデル化

駆動系をモデル化します。モータの電気系は等価回路は図1のように抵抗とモータの逆起電力であらわすことができます。 この等価回路からモータに流れる電流は次のようになります。

\begin{eqnarray*} I_\mathrm{R} &=& \frac{V_\mathrm{R}-E_\mathrm{R}}{R} \\ I_\mathrm{L} &=& \frac{V_\mathrm{L}-E_\mathrm{L}}{R} \end{eqnarray*}
モータの等価回路
図1 モータの等価回路

電気系から機械系

次にモータの電気系が機械系に与える影響を見てみましょう。 駆動系は図2のように、モータに半径$r$のタイヤがつながっているものと考えます。

駆動系のモデル
図2 駆動系のモデル

モータに発生するトルクは、モータに流れる電流に比例します。 その比例定数を$K_\mathrm{e}$とすると

\begin{eqnarray*} T_\mathrm{R} &=& K_\mathrm{e}I_\mathrm{R} \\ T_\mathrm{L} &=& K_\mathrm{e}I_\mathrm{L} \end{eqnarray*}

となります。これから、ロボットに実際に加わる力は以下のようになります。

\begin{eqnarray*} f_\mathrm{R} &=& \frac{T_\mathrm{R}}{r} = \frac{K_\mathrm{e}}{r}I_\mathrm{R} \\ f_\mathrm{L} &=& \frac{T_\mathrm{L}}{r} = \frac{K_\mathrm{e}}{r}I_\mathrm{L} \end{eqnarray*}

この力がロボットに伝わり、ロボットが移動するわけです。

機械系から電気系

今度は逆に機械系が電気系に与える影響を考えます。 ロボットが動き、右と左のタイヤがそれぞれ$v_\mathrm{R},v_\mathrm{L}$で回転したとします。 このときのモータの角速度は

\begin{eqnarray*} \omega_\mathrm{R} &=& \frac{v_\mathrm{R}}{r} \\ \omega_\mathrm{L} &=& \frac{v_\mathrm{L}}{r} \end{eqnarray*}

です。モータに発生する逆起電力はモータの角速度に比例します。 このときの比例定数は、単位系を適切に設定している場合$K_\mathrm{e}$です。 したがって、

\begin{eqnarray*} E_\mathrm{R} &=& K_\mathrm{e}\omega_\mathrm{R} = \frac{K_\mathrm{e}}{r}v_\mathrm{R} \\ E_\mathrm{L} &=& K_\mathrm{e}\omega_\mathrm{L} = \frac{K_\mathrm{e}}{r}v_\mathrm{L} \end{eqnarray*}

となります。

ロボットのモデル化

次にロボットの運動方程式を立てます。 ロボットは図3のような大きさの質量$m$、慣性モーメント$J$の剛体と仮定します。

ロボットのモデル
図3 ロボットのモデル

この運動方程式は次のようになります。

\begin{eqnarray*} m\frac{\mathrm{d}v}{\mathrm{d}t} &=& f_\mathrm{R} + f_\mathrm{L} \\ J\frac{\mathrm{d}\omega}{\mathrm{d}t} &=& d(f_\mathrm{R} - f_\mathrm{L}) \end{eqnarray*}

ロボットがこのような運動をしているときの、 タイヤの回転速度について考えてみましょう。

対向2輪型のロボットの場合、図4のように円弧運動をしています。

ロボットの移動
図4 ロボットの移動

微小時間$\Delta t$の間に図4のように動いた場合、ロボットの速度と角速度は

\begin{eqnarray*} v &=& \frac{\rho\Delta\theta}{\Delta t}\\ \omega &=& \frac{\Delta\theta}{\Delta t} \end{eqnarray*}

と表すことができます。これから、

\begin{eqnarray*} v_\mathrm{R} &=& \frac{\Delta l_\mathrm{R}}{\Delta t} \\ &=& \frac{(\rho + d)\Delta\theta}{\Delta t} \\ &=& \frac{\rho\Delta\theta}{\Delta t} + d\frac{\Delta\theta}{\Delta t} \\ &=& v + d\omega \\ v_\mathrm{L} &=& v - d\omega \end{eqnarray*}

となることがわかります。

ロボット全体の制御モデル

以上のことをまとめると図5のようなブロック図で表すことができます。

制御モデル
図5 制御モデル

このモデルは2入力2出力なので、少し複雑です。 もう少し簡単になるように次のような変換をします。

\[ \left[ \begin{array}{c} x_1 \\ x_2 \end{array} \right] = \left[ \begin{array}{cc} 1 & 1 \\ 1 & -1 \end{array} \right] \left[ \begin{array}{c} V_\mathrm{R} \\ V_\mathrm{L} \end{array} \right] \]

この様な変換によって、ロボットのモデルを下のように書き直すことができます。

対角化した制御モデル
図6 対角化した制御モデル

このモデルをよく見ると、モデルの中に現れる行列がすべて対角成分のみとなっており、 対角化できていることがわかります。 これは速度と角速度を2つの独立な制御系として扱うことができるということを意味しています。

制御器のモデル

ここまでで、ロボットの速度と角速度は独立に制御可能であることがわかりました。 そこで、ロボットのコントローラも速度制御器と角速度制御器の2つの独立な制御器に分離してしまいましょう。 このような考えに基づき制御器も含めたロボットのモデルは図7のようになります。

制御器のモデル
図7 制御器のモデル

経路制御器は、モータの速度を直接扱うのでなく、速度と向きの目標値を扱います。 なぜ角速度ではなく向きの目標値をとっているのかというと、 実際に角速度の制御器を作成してみたところ、どうパラメータ調整しても振動がひどく、うまくいかなかったからです。 おそらく、タイヤの回転バックラッシュの影響や、ロータリーエンコーダの分解能が十分で角速度の検出精度が十分でなかった ためと考えられます。 角度の制御は比較的うまくいったのでこちらを採用しました。 天地人の向きの制御にはPIDコントローラを使用しています。