「オムニホイール」の編集履歴(バックアップ)一覧はこちら
「オムニホイール」(2011/11/26 (土) 00:36:42) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
----
*3輪オムニ
**ロボットのパラメータ
#image(3womni.png)
ロボットには図の $$v_0, v_1, v_2$$ の位置にタイヤが取り付けられていて、モータを正方向に回すと矢印の向きにロボットが動くとします。そして、モータの中心からの位置を$$L$$、タイヤの半径を$$R$$とします。
また、ロボット中心に固定した直交座標系も図のように定義します。
**直交座標系から各車輪系への変換式
まず、ロボットの縦横移動速度、旋回速度を、タイヤの周速度に変換します。
ロボットの移動速度、旋回速度を
#math(150){{{\br{V_d} = [v_x, v_y, v_{\theta}]^T}}}
とし、タイヤの周速度を
#math(150){{{\br{V_w} = [v_0, v_1, v_2]^T}}}
とすると、変換式は以下のようになります。
#math(150){{{
\begin{bmatrix} v_0 \\ v_1 \\ v_2\end{bmatrix} =
\begin{bmatrix}
\cos(180^\circ) & \sin(180^\circ) & L \\
\cos(-60^\circ) & \sin(-60^\circ) & L \\
\cos(60^\circ) & \sin(60^\circ) & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}
さらに、三角関数を展開すると以下のようになります。
#math(150){{{
\begin{bmatrix} v_0 \\ v_1 \\ v_2\end{bmatrix} =
\begin{bmatrix}
-1 & 0 & L \\
1/2 & -\sqrt{3}/2 & L \\
1/2 & \sqrt{3}/2 & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}
**速度係数入力、電圧出力の場合
センサを使用しない、もっとも簡単な制御法は電圧出力型です。
よく使うブラシモータは印加電圧と回転数がほぼ比例します。この特性を利用した制御方法と注意点を説明します。
また、ロボコンではゲームパッドを利用して操作することが多いと思いますので、パッド入力に適した入力についても説明します。
***入力
ゲームパッドを使用した入力では、最大速度を決めてその何割の出力をするかをスティックの傾きや、ボタンの押しの強さで決めます。
最大速度を、
#math(150){{{
V_{max} = \begin{bmatrix} v_{x,max} & v_{y,max} & v_{\theta,max}\end{bmatrix}^T
}}}
として、パッドからの入力割合(値域は-1.0~1.0)を、
#math(150){{{
Rate = \begin{bmatrix} r_{x} & r_{y} & r_{\theta}\end{bmatrix}^T
}}}
とすると入力は
#math(150){{{
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix} =
Rate^T \cdot V_{max}
= \begin{bmatrix} r_{x} v_{x,max} \\ r_{y} v_{y,max} \\ r_{\theta} v_{\theta,max}\end{bmatrix}
}}}
となります。
最大速度を調整して入力の効きの強さを決定します。
***出力
基本的には単純に、ブラシモータの特性を利用して、車輪周速度を電圧出力に置き換えるだけです。
モータへの電圧出力を
#math(150){{{
E =
\begin{bmatrix} e_0 & e_1 & e_2\end{bmatrix}^T
}}}
とし、電圧を調整するための電圧係数を$$C_e$$とすれば、
#math(150){{{
\begin{bmatrix} e_0 \\ e_1 \\ e_2\end{bmatrix} =
C_e
\begin{bmatrix}
\cos(180^\circ) & \sin(180^\circ) & L \\
\cos(-60^\circ) & \sin(-60^\circ) & L \\
\cos(60^\circ) & \sin(60^\circ) & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}
となります。電圧係数は、最大速度が入力されても電圧出力が最大電圧以下となるように設定する必要があります。
しかしすべての最大値を考えると、ただ前進または横移動しているときは最大出力よりかなり余裕のある値となる場合があります。そこで、
電圧係数は大きめに取り、最大電圧を超えるときは次の式で全体の出力を落とすようにします。
****速度比を維持したまま、最大出力を落とす式
3つのモータ電圧の中で一番大きな値を$$E_{bigger}$$とし、この電圧が最大電圧$$E_{max}$$以上となるとき、モータ電圧を以下のように置き換えます。
#math(150){{{
\begin{bmatrix} {e_0}^{'} \\ {e_1}^{'} \\ {e_2}^{'}\end{bmatrix}
=
\begin{bmatrix} e_0 \\ e_1 \\ e_2\end{bmatrix}\cdot E_{max} / E_{bigger}
}}}
**タイヤ回転数出力
モータもしくはタイヤにエンコーダが取り付けられていて、タイヤの回転数を直接制御できる場合、タイヤ回転数を出力としたほうがわかりやすい。
タイヤの周速度をタイヤ半径で割ればいい。
タイヤの回転数を、
#math(150){{{
\omega =
\begin{bmatrix} \omega_0 & \omega_1 & \omega_2\end{bmatrix}^T
}}}
とすれば、
#math(150){{{
\omega = V_{w} / R = \begin{bmatrix} v_0/R \\ v_1/R \\ v_2/R\end{bmatrix}
}}}
*4輪オムニ
ロボットやフィールドのゆがみにより1輪浮いた状態になり、暴走(思った通り動かない)状態になる可能性があります。しかし、それが無視できるとき、重心位置余裕や機体サイズ(ロボットのサイズ制限はたいてい縦×横の制限なので三角形の3輪オムニより2倍程度の底面積が得られる)の面で4輪オムニが適している場合もあります。
#image(4womni.png)
図のように車輪を配置した時のロボットの移動速度から車輪周速度への変換式は以下のようになります。
#math(150){{{
\begin{bmatrix} v_0 \\ v_1 \\ v_2 \\v_3\end{bmatrix} =
\begin{bmatrix}
\cos(135^\circ) & \sin(135^\circ) & L \\
\cos(-135^\circ) & \sin(-135^\circ) & L \\
\cos(-45^\circ) & \sin(-45^\circ) & L \\
\cos(45^\circ) & \sin(45^\circ) & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}
----
*3輪オムニ
**ロボットのパラメータ
#image(3womni.png)
ロボットには図の $$v_0, v_1, v_2$$ の位置にタイヤが取り付けられていて、モータを正方向に回すと矢印の向きにロボットが動くとします。そして、モータの中心からの位置を$$L$$、タイヤの半径を$$R$$とします。
また、ロボット中心に固定した直交座標系も図のように定義します。
**直交座標系から各車輪系への変換式
まず、ロボットの縦横移動速度、旋回速度を、タイヤの周速度に変換します。
ロボットの移動速度、旋回速度を
#math(150){{{\br{V_d} = [v_x, v_y, v_{\theta}]^T}}}
とし、タイヤの周速度を
#math(150){{{\br{V_w} = [v_0, v_1, v_2]^T}}}
とすると、変換式は以下のようになります。
#math(150){{{
\begin{bmatrix} v_0 \\ v_1 \\ v_2\end{bmatrix} =
\begin{bmatrix}
\cos(180^\circ) & \sin(180^\circ) & L \\
\cos(-60^\circ) & \sin(-60^\circ) & L \\
\cos(60^\circ) & \sin(60^\circ) & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}
さらに、三角関数を展開すると以下のようになります。
#math(150){{{
\begin{bmatrix} v_0 \\ v_1 \\ v_2\end{bmatrix} =
\begin{bmatrix}
-1 & 0 & L \\
1/2 & -\sqrt{3}/2 & L \\
1/2 & \sqrt{3}/2 & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}
**速度係数入力、電圧出力の場合
センサを使用しない、もっとも簡単な制御法は電圧出力型です。
よく使うブラシモータは印加電圧と回転数がほぼ比例します。この特性を利用した制御方法と注意点を説明します。
また、ロボコンではゲームパッドを利用して操作することが多いと思いますので、パッド入力に適した入力についても説明します。
***入力
ゲームパッドを使用した入力では、最大速度を決めてその何割の出力をするかをスティックの傾きや、ボタンの押しの強さで決めます。
最大速度を、
#math(150){{{
V_{max} = \begin{bmatrix} v_{x,max} & v_{y,max} & v_{\theta,max}\end{bmatrix}^T
}}}
として、パッドからの入力割合(値域は-1.0~1.0)を、
#math(150){{{
Rate = \begin{bmatrix} r_{x} & r_{y} & r_{\theta}\end{bmatrix}^T
}}}
とすると入力は
#math(150){{{
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix} =
\rm{diag}(Rate) \cdot V_{max}
= \begin{bmatrix} r_{x} v_{x,max} \\ r_{y} v_{y,max} \\ r_{\theta} v_{\theta,max}\end{bmatrix}
}}}
となります。
最大速度を調整して入力の効きの強さを決定します。
***出力
基本的には単純に、ブラシモータの特性を利用して、車輪周速度を電圧出力に置き換えるだけです。
モータへの電圧出力を
#math(150){{{
E =
\begin{bmatrix} e_0 & e_1 & e_2\end{bmatrix}^T
}}}
とし、電圧を調整するための電圧係数を$$C_e$$とすれば、
#math(150){{{
\begin{bmatrix} e_0 \\ e_1 \\ e_2\end{bmatrix} =
C_e
\begin{bmatrix}
\cos(180^\circ) & \sin(180^\circ) & L \\
\cos(-60^\circ) & \sin(-60^\circ) & L \\
\cos(60^\circ) & \sin(60^\circ) & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}
となります。電圧係数は、最大速度が入力されても電圧出力が最大電圧以下となるように設定する必要があります。
しかしすべての最大値を考えると、ただ前進または横移動しているときは最大出力よりかなり余裕のある値となる場合があります。そこで、
電圧係数は大きめに取り、最大電圧を超えるときは次の式で全体の出力を落とすようにします。
****速度比を維持したまま、最大出力を落とす式
3つのモータ電圧の中で一番大きな値を$$E_{bigger}$$とし、この電圧が最大電圧$$E_{max}$$以上となるとき、モータ電圧を以下のように置き換えます。
#math(150){{{
\begin{bmatrix} {e_0}^{'} \\ {e_1}^{'} \\ {e_2}^{'}\end{bmatrix}
=
\begin{bmatrix} e_0 \\ e_1 \\ e_2\end{bmatrix}\cdot E_{max} / E_{bigger}
}}}
**タイヤ回転数出力
モータもしくはタイヤにエンコーダが取り付けられていて、タイヤの回転数を直接制御できる場合、タイヤ回転数を出力としたほうがわかりやすい。
タイヤの周速度をタイヤ半径で割ればいい。
タイヤの回転数を、
#math(150){{{
\omega =
\begin{bmatrix} \omega_0 & \omega_1 & \omega_2\end{bmatrix}^T
}}}
とすれば、
#math(150){{{
\omega = V_{w} / R = \begin{bmatrix} v_0/R \\ v_1/R \\ v_2/R\end{bmatrix}
}}}
*4輪オムニ
ロボットやフィールドのゆがみにより1輪浮いた状態になり、暴走(思った通り動かない)状態になる可能性があります。しかし、それが無視できるとき、重心位置余裕や機体サイズ(ロボットのサイズ制限はたいてい縦×横の制限なので三角形の3輪オムニより2倍程度の底面積が得られる)の面で4輪オムニが適している場合もあります。
#image(4womni.png)
図のように車輪を配置した時のロボットの移動速度から車輪周速度への変換式は以下のようになります。
#math(150){{{
\begin{bmatrix} v_0 \\ v_1 \\ v_2 \\v_3\end{bmatrix} =
\begin{bmatrix}
\cos(135^\circ) & \sin(135^\circ) & L \\
\cos(-135^\circ) & \sin(-135^\circ) & L \\
\cos(-45^\circ) & \sin(-45^\circ) & L \\
\cos(45^\circ) & \sin(45^\circ) & L \\
\end{bmatrix}
\begin{bmatrix} v_x \\ v_y \\ v_{\theta}\end{bmatrix}
}}}