🧮

オムニホイール制御の計算法

2022/05/05に公開

オムニホイールとは

https://www.youtube.com/watch?v=oCm66wa7ZS4

オムニホイール (Omni Wheel) とは, 上の動画のロボットに取り付けられているような, 回転方向と垂直に回転するローラーを備えるホイールのことである. これらのローラーにより全方向に移動することを可能としている.

図1. オムニホイール
図1. オムニホイール. Rotacaster, CC BY 1.0, via Wikimedia Commons.

4輪の場合, 図2に示すような 45\degree 間隔の単純な移動では, ホイールの回転方向のみで簡単に移動方向を決定できる. しかし, 15\degree165\degree 方向などの場合は計算が必要になる. この記事ではその計算方法について記す.

図2. ロボットの移動方向とホイールの回転方向の関係
図2. ロボットの移動方向とホイールの回転方向の関係

ホイールの角速度の導出

まず, オムニホイールを3輪搭載した全方位ロボットを例として考え, 各ホイールの角速度を求めてみる. ロボットの各要素の運動学的関係を表すモデルを図3に示す.


図3. 全方位ロボットの運動学的モデル
図3. 全方位ロボットの運動学的モデル

はじめに, ロボットの環境を表すグローバル座標 [x,y] を定義する. グローバル座標におけるロボットの位置と向き・速度はそれぞれ \boldsymbol{u}=(x,y,\theta)^\mathsf{T}, \dot{\boldsymbol{u}}=(\dot{x},\dot{y}, \dot{\theta})^\mathsf{T} と表せる.

続いて, ローカル座標 [x_{\mathrm{L}},y_{\mathrm{L}}] も定義する. ローカル座標の中心はロボットの重心と一致する. 3つのオムニホイールはローカル座標系に対し, 角度 \alpha_i (i=1,2,3) で配置されている. 等間隔に配置すれば軸 x_{\mathrm{L}} を始点, 反時計回りを正とし, \alpha_1 = 0\degree, \alpha_2 = 120\degree, \alpha_3 = 240\degree となる.

また, ホイール半径を r, ロボットの重心からホイール中心までの距離を R, ホイールの移動速度を \boldsymbol{v}=(v_0,v_1,v_2)^\mathsf{T}, 角速度を \dot{\boldsymbol{\phi}}=(\dot{\phi_0},\dot{\phi_1},\dot{\phi}_2)^\mathsf{T} とする.

以上の定義から v_i を求める. これは純粋な並進速度と回転速度に分けることができる.

v_i=v_{\mathrm{trans},i}+v_{\mathrm{rot}}

まず, 並進速度について考える. 図4にホイール1における並進速度 v_{\mathrm{trans},1} を拡大したものを示す.


図4. ベクトル拡大図
図4. ベクトル拡大図

v_{\mathrm{trans},1}\dot{x}, \dot{y} に写像すると次式が得られる.

v_{\mathrm{trans},1}=-\sin{(\theta})\dot{x}+\cos{(\theta)}\dot{y}

各ホイールが \theta+\alpha_i に配置されていることを考慮すれば, この写像を全てのホイールに対して一般化できる.

v_{\mathrm{trans},i}=-\sin{(\theta+\alpha_i})\dot{x}+\cos{(\theta+\alpha_i)}\dot{y}

続いて, 回転速度について考える. ロボットが純粋に回転する場合, 以下の条件を満たす.

v_{\mathrm{rot}}=R\dot{\theta}

以上より

\begin{align} v_i=-\sin{(\theta+\alpha_i})\dot{x}+\cos{(\theta+\alpha_i)}\dot{y}+R\dot{\theta} \end{align}

これで各ホイールの移動速度とロボットの移動速度が関連付けられた. 次はホイールの角速度について立式する.

\begin{align} v_i=r\dot{\phi}_i \end{align}


ここで式(1)に式(2)を代入して

\dot{\phi}_i=\frac{1}{r}\{-\sin{(\theta+\alpha_i})\dot{x}+\cos{(\theta+\alpha_i)}\dot{y}+R\dot{\theta}\}

上式は, 式(3)のような行列表現に変換できる.

\begin{align} \begin{bmatrix} \dot{\phi}_1\\ \dot{\phi}_2\\ \dot{\phi}_3\\ \end{bmatrix} = \frac{1}{r} \begin{bmatrix} -\sin{(\theta)}&\cos{(\theta)}&R\\ -\sin{(\theta+\alpha_2)}&\cos{(\theta+\alpha_2)}&R\\ -\sin{(\theta+\alpha_3)}&\cos{(\theta+\alpha_3)}&R\\ \end{bmatrix} \begin{bmatrix} \dot{x}\\ \dot{y}\\ \dot{\theta}\\ \end{bmatrix} \end{align}

上式はグローバル座標系を使用しているため, 次式でローカル座標系に変換する.

\begin{align} \begin{bmatrix} \dot{x}\\ \dot{y}\\ \dot{\theta}\\ \end{bmatrix} = \begin{bmatrix} \cos{(\theta)}&0&0\\ 0&\cos{(\theta)}&0\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} \dot{x}_\mathrm{L}\\ \dot{y}_\mathrm{L}\\ \dot{\theta}\\ \end{bmatrix} \end{align}


(4)を式(3)に代入し

\begin{align} \begin{bmatrix} \dot{\phi}_1\\ \dot{\phi}_2\\ \dot{\phi}_3\\ \end{bmatrix} = \frac{1}{r} \begin{bmatrix} -\sin{(\theta)}&\cos{(\theta)}&R\\ -\sin{(\theta+\alpha_2)}&\cos{(\theta+\alpha_2)}&R\\ -\sin{(\theta+\alpha_3)}&\cos{(\theta+\alpha_3)}&R\\ \end{bmatrix} \begin{bmatrix} \cos{(\theta)}&0&0\\ 0&\cos{(\theta)}&0\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} \dot{x}_\mathrm{L}\\ \dot{y}_\mathrm{L}\\ \dot{\theta}\\ \end{bmatrix} \end{align}

(5)は, ホイール数に対して一般化できる.

\begin{align*} \begin{bmatrix} \dot{\phi}_1\\ \dot{\phi}_2\\ \vdots\\ \dot{\phi}_n\\ \end{bmatrix} = \frac{1}{r} \begin{bmatrix} -\sin{(\theta)}&\cos{(\theta)}&R\\ -\sin{(\theta+\alpha_2)}&\cos{(\theta+\alpha_2)}&R\\ \vdots&\vdots&\vdots\\ -\sin{(\theta+\alpha_n)}&\cos{(\theta+\alpha_n)}&R\\ \end{bmatrix} \begin{bmatrix} \cos{(\theta)}&0&0\\ 0&\cos{(\theta)}&0\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} \dot{x}_\mathrm{L}\\ \dot{y}_\mathrm{L}\\ \dot{\theta}\\ \end{bmatrix} \end{align*}


すなわち

\dot{\phi}_n=\frac{1}{r}\{-\sin{(\theta+\alpha_n)}\cos{(\theta)}\dot{x}_\mathrm{L}+\cos{(\theta+\alpha_n)}\cos{(\theta)}\dot{y}_\mathrm{L}+R\dot{\theta}\}

以上で, 任意の数のホイールを持つ全方位ロボットにおける各ホイールの角速度が求められた.

参考文献

GitHubで編集を提案

Discussion