最近調べたところロボットの運動学表現には3種ほどあって、違いがよくわからなくなってきたので整理したく本記事を書いています。
DH法(Denavit-Hartenberg line coordinates: 1955~)
最も古典的な表現方法です。
- 各JointのZ軸(下図の青矢印)を、回転軸の向きとする
- 各JointのX軸(下図の赤矢印)を、現在の関節とZ軸と次の関節のZ軸との共通法線の向きとする。共通法線が一意に決まらない(すなわちZ軸が平行)場合は、X軸とZ軸の交点は自由に決めて良い。
- Y軸を、X軸とZ軸と右手系を成すように設定する。
この手順でDHパラメータ$a, \alpha, d, \theta$を決定します。
同次変換行列は次のようになります。
$$
^{n-1}T_{n} = \rm{Trans}(z_{n-1}, d_{n}) \rm{Rot}(z_{n-1},\theta_{n})\rm{Trans}(x_{n}, a_{n})\rm{Rot}(x_{n},\alpha_{n})
$$
変換の読み方は左からです。
- $z_{n-1}$軸の向きに$d_{n}$だけ平行移動
- $z_{n-1}$軸周りに$\theta_{n}$だけ回転
- $x_{n}$軸の向きに$a_{n}$だけ平行移動
- $x_{n}$軸周りに$\alpha_{n}$だけ回転
特徴は、共通法線でX軸向きを決めていることと、関節の座標原点$O_{i}$を関節$i$のZ軸上に置くのではなく、関節$i+1$のZ軸上においていることだと思います。
修正DH法(Modified Denavit-Hartenberg line coordinates)
たぶん現在この表現方法が主流だと思います。従来のDH法と異なる点は、座標原点$O_{i}$を関節$i$のZ軸上に置いていることです。
これがどうしたと思われそうですが、計算順序が変わります。
$$
^{n-1}T_{n} = \rm{Rot}(x_{n-1},\alpha_{n-1}) \rm{Trans}(x_{n-1}, a_{n-1}) \rm{Rot}(z_{n},\theta_{n}) \rm{Trans}(z_{n}, d_{n})
$$
- $x_{n-1}$軸周りに$\alpha_{n-1}$だけ回転
- $x_{n-1}$軸向きに$a_{n-1}$だけ平行移動
- $z_{n}$軸周りに$\theta_{n}$だけ回転
- $z_{n}$軸周りに$d_{n}$だけ平行移動
補足
修正DHは他にも様々なものがあるようです。ここで挙げたのはWikipediaの記法。
Hayati-Roberts line coordinates(1985~)
ハヤティの方法(?)と呼ばれているとかなんとか。これが書きたかった。
ハヤティの方法では$L_{hr}(e_{x},e_{y},l_{x},l_{y})$と線表現される。
DH法では平行な軸があるとき煩雑になってしまう欠点があったが、これを改善、そもそも共通法線を使わない表現方法にしました。という感じらしい。
特にスクリュー理論表現が含まれるような状況で有効だとか。確かにDH法だとスクリュー形状は表現できなさそうだけど、スクリュー形状のロボットってなんだろう。想像が出来ない。今後調べてみる。
以下はWikipediaをGoogle翻訳にそのまま突っ込んだものです。
- $e_{x}$と$e_{y}$は$X$軸と$Y$軸の単位方向ベクトル。$e_{z}=(1- e^{2}_{x} - e^{2}_{y})^{\frac{1}{2}}$と表せることから、$Z$成分は必要なくなる
- $l_{x}$ と $l_{y}$ は、ワールド リファレンス フレームの原点を通り、ラインに垂直な平面とラインの交点の座標です。 この法平面上の基準座標系は、世界基準座標系と同じ原点を持ち、その $X$ および $Y$ 座標系軸は、世界座標系の $X$ および $Y$ ラインに沿った平行投影による Y 軸。
感想
普通のロボットアームを使用する場合には修正DH法で問題は無さそうだけど、いろんな論文等で言われているように平行軸の場合の処理が大変ですよとのこと。
平行軸だと、$z_{i-1}$軸から$z_{i}$への向きへ共通法線$x_{i-1}$を定義することは一意に出来るけど、共通法線の交点を一意に出来ないところがネックという記述をよく見る。
まあ結局、メーカーが出してるロボットを使うなら修正DH法でやるしかないよねって気がする。