テオ・ヤンセン機構の計算【詳細版】
はじめに
前回の記事ではテオ・ヤンセン機構のアニメーションを行いました。その際のリンク機構の詳細な動きに関する説明は省略していたのですが、思いのほかブックマークが沢山ついたのでここで説明してみます。
テオ・ヤンセン機構をHTML5 Canvasでアニメーションに - roombaの日記
結構面倒ですが、やっていることは点A~点Gの座標を計算しているだけです(前回の記事中プログラムのdraw_jansen関数に対応)。それさえできてしまえば、あとはその点どうしを線で結ぶだけでリンク機構が描けることになります。そこで、点A~点Gの座標の計算方法を以下で順に説明します。
前提
- 以下の図では、青字が点の名前・黒字がリンクの長さ
- 赤で示したリンクmが点Oのまわりを回転し、その角度Θによって他の全ての点の座標が定まる(1自由度)
- 座標系の原点は点Oとし、右がx, 上がy
- 点O, 点Bは固定点で不動
- 点Aの座標を(A0, A1)のように表す
- リンクの長さa~mは既知(前回の記事中プログラムで宣言)
1. 点Aの座標の計算
点Oが原点で、長さmのリンクが角度θの位置にあるため
これによってリンクm(線分OA)が描画できる。
2. 点Cの座標の計算
(i) 点Aと点Bの距離の計算
先ほどの点Aの座標と、点Bの座標が(-a, -l)であることより
(ii) xc, ycの計算
図の緑字のようにxc, ycを定めると、余弦定理より
(iii) theta_abの計算
図の緑のように角度theta_abを定めると
(iv) 点Cの座標の計算
上記で求めたxc, yc, theta_abを用いて
上式はベクトルの足し算であり、第一項までが点Bの座標・第二項までが線分AB上の垂線の足の座標となっている。
これによってリンクj, b(線分AC, BC)が描画できる。
3. 点Eの座標の計算
(i) xc, ycの計算
今度はxc, ycを図のように定めると
(ii) theta_bcの計算
肌色のようにtheta_bcを定めると
(iii) 点Eの座標の計算
第一項までが点Bの座標・第二項までが線分BC上の垂線の足の座標となっている。
これによってリンクe, d(線分CE, BE)が描画できる。
4. 点Dの座標の計算
(i) xc, ycの計算
今度はxc, ycを図のように定めると
(ii) 点Dの座標の計算
上記のxc, ycおよび既に求めていたtheta_abを用いると
第一項までが点Bの座標・第二項までが線分AB上の垂線の足の座標となっている。
これによってリンクk, c(線分AD, BD)が描画できる。
5. 点Fの座標の計算
(i)点Dと点Eの距離の計算
既に求めた点D, Eの座標より
(ii) xc, ycの計算
上記のDEを用いて、再びxc, ycを図のように定めると
(iii) theta_deの計算
緑色のようにtheta_deを定めると
(iv) 点Fの座標の計算
上記のxc, yc, theta_deを用いると
第一項までが点Dの座標・第二項までが線分DE上の垂線の足の座標となっている。
これによってリンクf, g(線分EF, DF)が描画できる。
6. 点Gの座標の計算
(i) xc, ycの計算
今度はxc, ycを図のように定めると
図ではxcが負になっているが、(iii)でちゃんと辻褄があう。
(ii) theta_dfの計算
肌色のようにtheta_dfを定めると
(iii) 点Gの座標の計算
第一項までが点Dの座標・第二項までが直線FD上の垂線の足の座標となっている。
これによってリンクh, i(線分FG, DG)が描画できる。
おわりに
疲れた…
このように、リンクmの角度θに依存した形で各点A~Gの座標を求めることができました。そのθを少しずつ増加させながら描画してゆけばアニメーションとなります。やったね!
ちなみに、θだけですべての座標が定まったのは、この機構が「1自由度」だからです。例えば肩と肘を持つロボットアームだと2自由度となり、肩と肘の角度をそれぞれ指定しなければなりません。
アニメーションは前回の記事↓
- 作者: 日本機械学会
- 出版社/メーカー: 日本機械学会
- 発売日: 2007/12
- メディア: 大型本
- クリック: 7回
- この商品を含むブログを見る