オイラー角~ジンバルロック~クォータニオン

オイラー角

オイラー角とは、三次元ユークリッド空間中の2つの直交座標系(デカルト座標系 )の関係を表現する方法の一つである。ロボット、ドローンの姿勢(ポーズ、向き)を直観に表現するには、オイラー角を用いることがある。オイラー角は3つの角度の組に、3座標軸まわりの回転順序(計12通りもある)で表されるので、オイラー角の変数は4つである。ロボットが姿勢Aから姿勢Bへ変わる際に、例えばx軸-y軸-z軸の順にx-y-z系オイラー角 \( (\alpha,\beta,\gamma) \) で回転することで姿勢の転換を表すことが可能である。姿勢B座標 = 回転行列・姿勢A座標より、姿勢A座標から回転後の姿勢B座標が求められる。姿勢A座標、姿勢B座標が分かれば、回転行列からオイラー角が求められる場合ある。積 \( R_{z}( \gamma ) R_{y}( \beta )R_{x}( \alpha ) \) は、x-y-z系で表したときのオイラー角が \( (\alpha,\beta,\gamma) \) であるような回転を表す回転行列\( R(\alpha,\beta,\gamma) \)である。

また、回転軸がワールド座標軸ローカル座標軸により、オイラー角が以下の2種類ほどある。
・ワールド座標系の3つの軸を中心とした回転、座標軸は静止しているので、静的オイラー角と呼ばれる。
・ローカル座標系の3つの軸を中心とした回転で、回転中に座標軸がロボットとともに回転するため、動的オイラー角と呼ばれる。

ロボットやドローンが移動の際、ワールド座標系を参照できないと、姿勢の転換を表す動的オイラー角を使うしかない場合がある。

ジンバルロック現象、他の問題点

オイラー角の問題点として、動的オイラー角を使用すると、オイラー角そのものの定義より、ジンバルロック現象を起こしてしまう場合がある。但し、静的オイラー角にはジンバルロック現象が起きない。オイラー角の2番目の回転角度が±π/2であれば、1番目と3番目の回転が同じ回転軸になることで、1自由度が失われて、また回転行列より、\( \alpha,\gamma \)の解は無限にあることをジンバルロック現象と呼ばれる。また他にジンバルロック現象を起こさないオイラー角\( (\alpha,\beta,\gamma) \)に対して、\( (\alpha+π,π−\beta,\gamma+π) \)の回転で同じ姿勢になる問題点もある。

よって、以下の条件付きであれば、ジンバルロック現象が除けて、オイラー角でロボットの姿勢を表すのが一意になる。言い換えれば、回転行列がオイラー角と一対一に対応することになる。

・ \( \beta ∈ (-π/2, π/2), \alpha,\gamma ∈ [-π, π] \)

しかし、オイラー角\( (\alpha,\beta,\gamma) \)を制限するのは無理の場合、オイラー角からクォータニオン・四元数の登場となる。

また、オイラー角の2番目の回転軸が1番目の回転軸 x 3番目の回転軸の外積の方向にある。つまり、2番目の回転軸が1番目と3番目の回転軸と直交する。1番目と3番目の回転軸の外積が0になるのが、ジンバルロック現象が発生する場合である。

クォータニオン、四元数

姿勢の表現には、オイラー角の3回転よりも、単純に回転軸と回転軸まわりの1回転で済む場合、クォータニオンが用いられる。クォータニオンの変数の個数がオイラー角と同様に4つであり、クォータニオンを見るだけでは姿勢転換のイメージが難しい。回転行列からオイラー角を求めるのと、逆に回転順とオイラー角から回転行列を求めるのが面倒だが、クォータニオンで回転を表現するとさっぱりとなる。

例えば以下のように、ベクトルxで表すロボットの姿勢Aを原点を通る単位ベクトルu回転軸として、右ねじが進む方向に角θだけ回転させて、ベクトルx’で表すロボットの姿勢Bになると、以下に優雅なる表現がある。$$ x’=q x \bar{q} \\ q=cos \frac{θ}{2} + u sin \frac{θ}{2} \\ \bar{q}=cos \frac{θ}{2} – u sin \frac{θ}{2} $$
但し、\( u=iu_1+ju_2+ku_3 \)

また、回転 \(q_1\)に引き続き、回転 \(q_2\)を行う場合、次のように書くと良い、
$$ x’=(q_{2}q_{1})x(\bar{q_{1}}\bar{q_{2}}) $$

参考文献

・wiki: オイラー角
・wiki: 四元数

関連記事

SLAM~拡張カルマンフィルタ
SLAM~Unscentedカルマンフィルタ
粒子フィルタ
6軸IMU~拡張カルマンフィルタ
研究開発用 台車型ロボット キット

0

ロボット・ドローン部品お探しなら、ロボット翔をご利用下さい

ブラシレスDCモータ~Hブリッジ回路

概要

DCブラシレスモータはブラシや整流子に依存しなくなり、代わりに整流用の半導体デバイスを使用する。同期モータの一種で、特性はDCモータと同様。速度はモータ電圧に比例し、トルクはモータ電流に比例する。下図のように、回転部としてのロータは外側にある、アウターロータ型モータと呼ばれるのを例に説明してみる。回転子の内周には磁石が配置されており、U、V、W相コイルの位置は120°ずれている。三相コイルは中心(中性点)で互いに接続されている。U、V、W相コイルの外側にホールセンサが配置され、出力信号はプルアップされて制御プロセッサに入力される。アウターロータ(回転子、磁石)のN極がホールセンサに近いときはH、S極がホールセンサに近いときはLとなる。

三相ブラシレスDCモータの例
三相ブラシレスDCモータの例

Hブリッジ回路でモータ制御

ブラシレスDCモータを駆動するHブリッジ回路の一例は下図のように示される。

BLDCM_H-bridge
BLDCM_H-bridge

下図のように、120°矩形波のU、V、W相ホールセンサと、U、V、W相電圧のH、Lの対応関係が分かる。
BLDCM_Pullup
BLDCM_Pullup

よって、アウターロータが一周360°回転の場合、U、V、W相ホールセンサのUH、UL、VH、VL、WH、WLがそれぞれ180°、U、V、W相電圧のUH、UL、VH、VL、WH、WLがそれぞれ120°と分かる。
ブラシレスDCモータには、FOC(ベクトル周波数変換、磁界ベクトル方向制御とも呼ばれる)、方形波制御(台形波制御、120°制御、6ステップ整流制御とも呼ばれる)、正弦波制御の3つの主な制御方法がある。

矩形波制御

矩形波制御は、ホールセンサまたは無誘導推定アルゴリズムを使用してモータの回転子の位置を取得し、360°の電気サイクルで回転子の位置に応じて6回の転流(60°の転流ごと)を実行する。各転流位置モータは特定の方向に力を出力するので、矩形波制御の位置精度は電気的に60°であると言える。この制御では、モータの相電流波形は方形波に近いため、矩形波制御と呼ばれている。

正弦波制御

正弦波制御方式はSVPWM波を使用し、出力は三相正弦波電圧であり、対応する電流も正弦波電流。矩形波制御と比較してトルク変動が少なく、高調波が少なく、制御時の「細かい」感じが明らかだが、制御器の性能要件は矩形波制御よりわずかに高く、モータ効率が発揮できない。

FOC制御

正弦波制御は、電圧ベクトルの制御を実現し、間接的に電流の大きさの制御を実現するが、電流の方向を制御することはできない。 FOC制御は、電流ベクトルの制御、すなわちモータの固定子磁界のベクトル制御を実現する正弦波制御の改良版と見なすことができる。

0

ロボット・ドローン部品お探しなら、ロボット翔をご利用下さい

粒子フィルタ

はじめに

ガウス分布に従う時系列確率変数の非線形関数は必ずしもガウス分布にならない、また非ガウス分布の確率変数が存在するから、優雅なるカルマンフィルタファミリーには限界あり、無理な場合がある。非線形、非ガウス時系列空間モデルに対して、1990年代から未知の状態密度関数p(x)に対して、既知の密度関数q(x)、p(x)⊂q(x) から逐次モンテカルロ法(逐次重要性サンプリングSequential Importance Samplingに、リサンプリングResampling)による粒子フィルタ(パーティクル・フィルタ、PF)が提案されて以来、研究・応用が活発になっている。粒子フィルタがROSのSLAM Gmappingアルゴリズムに組まれている。

粒子フィルタ

状態空間モデル

・システムモデル(状態方程式)
$$x_t = f_t(x_{t-1},v_t)$$

・観測モデル(観測方程式)
$$y_t = h_t(x_t,w_t)$$

ただし、\( v_t、w_t\)はフィルタリングをかける事前に既知で、非ガウス分布可能、\( y_t\)は2項分布またポアソン分布に従うcount dataのモデル化なども可能になる。また、粒子フィルタには、\( v_t、w_t\)はガウス分布でも構わない。
以下に粒子\( x_t^{[i]} \)~\( f_t (x_t^{[i]} | x_{t−1}^{[i]}, v_t) \)として、粒子フィルタリングの手順を示す。

粒子フィルタリングの手順

1、初期化\( (t=0) \)
初期分布\( f_t (x_0^{[i]}, v_0) \)に従って、n個の粒子\( \{x^{[i]}_0 | i = 1,2, ⋯ ,n\} \)を無作為に発生させる。

2、一期先予測\( (t=t+1) \)
粒子\( x_t^{[i]} \)を\( f_t (x_t^{[i]} | x_{t−1}^{[i]}, v_t) \)に従って状態推移させ、それぞれの類似値が\(x_t^{[i]}\)である粒子の集合\( \{\hat{x}^{[i]}_t | i = 1,2, ⋯ ,n\} \)を発生させる。

3、フィルタリング
・重み計算
粒子\( \hat{x}_t^{[i]} \) の重み\( w_t^{[i]} = p(y_k | \hat{x}_k^{[i]}) \)を計算する。
ただし、\( p(y_k | \hat{x}_k^{[i]}) \)は、尤度であり、観測値または類似値ではないことに注意する。

・重みの正規化
$$\hat{w}_t^{[i]} = \frac{w_t^{[i]}}{ \sum_{i=1}^n w_t^{[i]} }$$

・リサンプリング
粒子\( \hat{x}^{[i]}_0 \)を\(\hat{w}_t^{[i]}\)に従った確率でリサンプリングし、粒子集合\( \{x^{[i]}_t | i = 1,2, ⋯ ,n\} \)を発生させる。

・2に戻る

参考文献

粒子フィルタ、著者:樋口知之 先生

0

ロボット・ドローン部品お探しなら、ロボット翔をご利用下さい