STEP8: 4脚ãƒãƒœãƒƒãƒˆ
ODE本「簡å˜!実践!ãƒãƒœãƒƒãƒˆã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ – Open Dynamics Engineã«ã‚ˆã‚‹ãƒãƒœãƒƒãƒˆãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°
ã€ã®Step8ã§ã™ï¼Ž
ã“ã“ã§ã¯ï¼Œï¼”脚æ©è¡Œãƒãƒœãƒƒãƒˆã«ã¤ã„ã¦å¦ã³ã¾ã™ï¼Žã‚¯ãƒãƒ¼ãƒ«ï¼Œã‚¦ã‚ªãƒ¼ã‚¯ï¼Œãƒˆãƒãƒƒãƒˆãªã©ã®ä»£è¡¨çš„ãªæ©ã方をå¦ã³ï¼Œï¼”脚ãƒãƒœãƒƒãƒˆã®ãƒ¢ãƒ‡ãƒ«ã‚’作り,ãれã«ã‚¯ãƒãƒ¼ãƒ«æ©è¡Œã‚’実装ã—ã¾ã™ï¼Žç¶šãã¯ODE本ã§ï¼Žï¼Žï¼Ž
以下ã«ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã®å‹•画を掲載ã—ã¾ã™ï¼Žã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯ã“ã®ãƒšãƒ¼ã‚¸ã®æ³¨æ„äº‹é …ã‚’èªã¿ï¼Œãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ï¼Œãƒ“ルドやコンパイルã—実行ã—ã¦ãã ã•ã„.
- プãƒã‚°ãƒ©ãƒ 8.1: 4脚ãƒãƒœãƒƒãƒˆã®æ©è¡Œåˆ¶å¾¡ã€€(P210)
- 説明:上ã®å‹•ç”»ã§ã¯ä½“ã‚’å·¦å³ã«ãµã£ã¦è»¢ã°ãªã„よã†ã«æ©ã„ã¦ã„ã¾ã™ï¼Žãƒ‘ラメータを調整ã—ã¦ã„ãªã„ã®ã§ï¼Œæ©ãæ–¹ãŒãŽã“ã¡ãªã„ã§ã™ï¼Žã“ã‚Œã‚’ã‚¹ãƒ ãƒ¼ã‚ºã«æ©ã‹ã›ã‚‹ã“ã¨ãŒï¼Œã‚ãªãŸã®ãƒŸãƒƒã‚·ãƒ§ãƒ³ã§ã™ï¼Ž
(最終更新日 2008-7-27)
4脚æ©è¡Œã®ãƒ¢ãƒ‡ãƒ«ã‚’å°‘ã—æ›¸ãæ›ãˆã¦è„šã‚’2本増やã—ãŸã®ã§ã™ãŒã€è„š6本ã§ã¯ã†ã¾ãæ©ã‹ãšã€ã²ã–ã‹ã‚‰ä¸‹ãŒé£›ã‚“ã§ã£ã¦ã—ã¾ã„ã¾ã™ã€‚
ã©ã®ã‚ˆã†ã«ã™ã‚Œã°ï¼–脚æ©è¡Œã§ãã‚‹ã®ã‹ã‚ã‹ã‚‹äººæ•™ãˆã¦ãã ã•ã„。
ãŠå¿™ã—ã„ä¸,ãŠè¿”事ã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸ.
時間ãŒç©ºã„ã¦ã„る時,見ã¦é ‚ããŸã„ã®ã§ã™ãŒ,
1を試ãã†ã¨æ€ã£ãŸã®ã§ã™ãŒã€è†ã—ã‹æ›²ãŒã‚‰ãš,ã§ãã¾ã›ã‚“ã§ã—ãŸ.
股関節ã¨è¶³é¦–ã«ã¯ãれãžã‚Œãƒ’ンジジョイントã§,x y zæ–¹å‘,x yæ–¹å‘ã«è¨å®šã—ã¦ã„ãŸã®ã§ã™ãŒ,ヒンジジョイントã¯åŒã˜ä½ç½®ã§ã¯ï¼’æ–¹å‘以上ã«è¨å®šã™ã‚‹ã“ã¨ã¯ã§ããªã„ã®ã§ã—ょã†ã‹?
mahiã•ん,
ãƒãƒœã‚«ãƒƒãƒ—世界大会ã§ã‚ªãƒ¼ã‚¹ãƒˆãƒªã‚¢å‡ºå¼µã—ãŸã„ãŸã®ã§ä»•äº‹ãŒæºœã¾ã£ã¦ã„ã¦è©³ã—ãアドãƒã‚¤ã‚¹ã§ãã¾ã›ã‚“ãŒï¼Œä»¥ä¸‹ã®ã“ã¨ã‚’試ã—ã¦ãã ã•ã„.
1.逆é‹å‹•å¦ãŒæ£ã—ã„ã‹ã¯ï¼Œé‹å‹•å¦ã‚’使ã£ã¦ç¢ºã‹ã‚る.
ï¼’ï¼Žï¼‘ãŒæ£ã—ã„å ´åˆã¯ï¼ŒCFM, ERPã®å€¤ã‚’調整ã™ã‚‹ï¼Ž
3.ãれã§ã‚‚ãŠã‹ã—ã„å ´åˆã¯ï¼Œãƒãƒœãƒƒãƒˆã®ãƒ¢ãƒ‡ãƒ«ãŒæ£ã—ã„(リンクや関節ã®ä½ç½®ï¼‰ã‹ç¢ºèªã™ã‚‹ï¼Ž
ã§ã‚€
demuã•ã‚“,ã“ã‚“ã«ã¡ã¯.
4脚ãƒãƒœãƒƒãƒˆã‚’å‚考ã«ï¼’è¶³æ©è¡Œãƒãƒœãƒƒãƒˆï¼ˆè„šã ã‘)を作ã£ãŸã®ã§ã™ãŒ,æ€ã†ã‚ˆã†ã«ã§ãã¾ã›ã‚“ã§ã—ãŸ.
地é¢ã¾ã§ã®é«˜ã•,最高到é”点,å·¦å³ã®å¤‰ä½,æ©å¹…,ã‚’å°‘ã—ãšã¤å¤‰ãˆã¦ã¿ãŸã®ã§ã™ãŒ,振動ã—ãªãŒã‚‰ä¸è¦å‰‡ã«ç§»å‹•ã—ãŸã‚Š,片方ã®è†ãŒæ›²ãŒã£ãŸã¾ã¾åœæ¢ã—ãŸã‚Š,倒れãŸã‚ã¨æŒ¯å‹•ã—移動ã—ãŸã‚Š,ã¨å…¨ãæ©è¡Œã«ãªã‚Šã¾ã›ã‚“ã§ã—ãŸ.
ã©ã†ã„ã†åŽŸå› ãŒè€ƒãˆã‚‰ã‚Œã‚‹ã§ã—ょã†ã‹?
å› ã¿ã«ã‚¤ãƒ³ãƒãƒ¼ã‚¹ã‚ãƒãƒžãƒ†ã‚£ã‚¯ã‚¹ã®éƒ¨åˆ†ã¯ã“ã†ã„ã†æ„Ÿã˜ã§ã„ã„ã®ã§ã—ょã†ã‹?
void inverseKinematics(dReal x, dReal y, dReal z,dReal *ang1,dReal *ang2, dReal *ang3, dReal *ang4, dReal *ang5,dReal *ang6)
{
dReal l3=0.7,l4=0.7,l6=0.1;
dReal Px,Py,Pz;
dReal a[3],b[3];
    a[0]=-cos(*ang1)*sin(*ang3+*ang4+*ang5)*cos(*ang6)-sin(*ang1)*(cos(*ang2)*sin(*ang6)+sin(*ang2)*cos(*ang3+*ang4+*ang5)*cos(*ang6));
a[1]=-sin(*ang1)*cos(*ang3+*ang4+*ang5)*cos(*ang6)+cos(*ang1)*(cos(*ang2)*sin(*ang6)+sin(*ang2)*cos(*ang3+*ang4+*ang5)*cos(*ang6));
         a[2]=sin(*ang2)*sin(*ang6)-cos(*ang2)*cos(*ang3+*ang4+*ang5)*cos(*ang6);
b[0]=cos(*ang1)*cos(*ang3+*ang4+*ang5)-sin(*ang1)*sin(*ang2)*sin(*ang3+*ang4+*ang5);
b[1]=sin(*ang1)*cos(*ang3+*ang4+*ang5)+cos(*ang1)*sin(*ang2)*sin(*ang3+*ang4+*ang5);
b[2]=-cos(*ang2)*sin(*ang3+*ang4+*ang5);
Px=x-l6*a[0];
Py=y-l6*a[1];
Pz=z-l6*a[2];
dReal Ca=(l3*l3+Px*Px+Py*Py+Pz*Pz-l4*l4)/2*l3*sqrt(Px*Px+Py*Py+Pz*Pz);
dReal Cb=(l3*l3+l4*l4-Px*Px+Py*Py+Pz*Pz)/2*l3*l4;
dReal phi=atan2(Px,sqrt(Px*Px+Py*Py));
dReal alpha =-atan2(sqrt(1-Ca*Ca),Ca);
*ang1=atan2(b[1],b[0]);
*ang2=M_PI/2-atan2(sqrt(Px*Px+Py*Py),Pz);
*ang3=M_PI/2-atan2(sqrt(Px*Px+Py*Py),Pz)-atan2(sqrt(1-Ca*Ca),Ca);
*ang4=M_PI-atan2(sqrt(1-Cb*Cb),Cb);
*ang5=atan2(sqrt((x-Px)*(x-Px)+(y-Py)*(y-Py)),z-Pz)+*ang4-phi-alpha;
*ang6=atan2(sqrt(Px*Px+Py*Py),Pz)+atan2(sqrt((x-Px)*(x-Px)+(y-Py)*(y-Py)),z-Pz);
}
長々ã¨ç”³ã—訳ã‚りã¾ã›ã‚“.
宜ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™.
mahiã•ん,
モデルã«å•題ãŒã‚ã‚‹ã¨æ€ã„ã¾ã™ï¼Ž
ヒンジジョイントã¯åŒã˜æ–¹å‘ã«ä½•個ã§ã‚‚è¨å®šå¯èƒ½ã§ã™ï¼Ž
ãƒ’ãƒ³ã‚¸ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã«æŽ¥ç¶šã•れã¦ã„ã‚‹ï¼’ã¤ã®ãƒœãƒ‡ã‚£ã¯æŽ¥è§¦åˆ¤å®šã‚’ã—ãªã„よã†ã«ã—ã¦ã¿ã¦ãã ã•ã„.ã¾ãŸï¼Œã‚¸ãƒ§ã‚¤ãƒ³ãƒˆå¯å‹•域ã®è¨å®šã¯æ£ã—ã„ã§ã—ょã†ã‹ï¼Ÿ
ã§ã‚€
æ©è¡Œãƒ¢ãƒ‡ãƒ«ã§ä¸Šè¨˜ã®ã“ã¨ã‚’æ°—ã«ã—ã¦ã‚„ã£ã¦ã¿ãŸã®ã§ã™ãŒä¸Šæ‰‹ãã§ããªã‹ã£ãŸã®ã§,ç°¡å˜ãªä¾‹ã¨ã—ã¦ï¼’ã¤ã®ç›´æ–¹ä½“ã‚’yè»¸ã«æ²¿ã£ã¦ã¤ãりx,y,z軸ã¾ã‚りã«ãƒ’ãƒ³ã‚¸ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã§æŽ¥ç¶šã—ã¦ã¿ã¾ã—ãŸ.
接触判定ã¯ãªãã—ã¦,å¯å‹•域ã¯-M_PI/4ã‹ã‚‰M_PI/4ã«ã—ã¾ã—ãŸ.
ãã—ã¦,z軸ã¾ã‚りã«M_PI/6回転ã™ã‚‹ã‚ˆã†ã«ã—ãŸã®ã§ã™ãŒ,真ã£ç›´ãã®ã¾ã¾ã§ã—ãŸ.
x,y軸ã¾ã‚りã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã‚’ãªãã™ã¨,z軸ã¾ã‚りã«M_PI/6回転ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸ.
ã‚„ã¯ã‚Šï¼“æ–¹å‘ã®ãƒ’ンジã«ã™ã‚‹ã¨å‹•ã‹ãªããªã£ã¦ã—ã¾ã£ãŸã®ã§ã™ãŒ,何ãŒåŽŸå› ãªã®ã‹ã‚ã‹ã‚Šã¾ã›ã‚“.
モデルã®ä½œã‚Šæ–¹ãŒé–“é•ã£ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹?
ã‚‚ã—ã‹ã—ã¦ï¼Œï¼‘ã¤ã®ãƒœãƒ‡ã‚£ã«ï¼“ã¤ã®ãƒ’ンジジョイントを付ã‘ã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ
例ãˆã°ï¼Œãƒœãƒ‡ã‚£ï¼‘ã¨ãƒœãƒ‡ã‚£ï¼’をヒンジジョイントã§ï¼“軸直交ã™ã‚‹ãŸã‚ã«ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™ï¼Ž
ボディ1ï¼ãƒ’ンジ(ãƒãƒ¼ãƒ«ï¼‰ï¼ãƒ€ãƒŸã‚£ãƒœãƒ‡ã‚£ï¼‘ï¼ãƒ’ンジ(ピッãƒï¼‰ï¼ãƒ€ãƒŸã‚£ãƒœãƒ‡ã‚£ï¼’ï¼ãƒ’ンジ(ヨー)ï¼ãƒœãƒ‡ã‚£ï¼’
ãªãŠï¼Œãƒ€ãƒŸã‚£ãƒœãƒ‡ã‚£ã¯éžå¸¸ã«å°ã•ãã—ã¦ãã ã•ã„.
ã§ã‚€
ã²ã–ã‹ã‚‰ä¸‹ãŒãµã£ã¨ã‚“ã§ã—ã¾ã†ã®ã¯ï¼Œæã‚‰ãモデルãŒé–“é•ã£ã¦ã„ã‚‹ãŸã‚ã ã¨æ€ã‚れã¾ã™ï¼Ž
å„リンクã®åº§æ¨™ã¨é–¢ç¯€ã®ä½ç½®ï¼Œå›žè»¢ãƒ™ã‚¯ãƒˆãƒ«ã«çŸ›ç›¾ãŒãªã„ã‹èª¿ã¹ã¦ã¿ã¦ãã ã•ã„.
モデルã«å•題ãŒãªã„å ´åˆã¯ï¼Œé–¢ç¯€åˆ¶å¾¡ã«ãŠã‹ã—ãªå€¤ãŒå…¥ã£ã¦ã„ãªã„ã‹èª¿ã¹ã‚‹ã¨è‰¯ã„ã¨è€ƒãˆã¾ã™ï¼Ž
ã§ã‚€
返信ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
何度も見直ã—ã¦ç¢ºèªã¯ã—ã¦ã‚‹ã‚“ã§ã™ãŒã€ã¾ã£ãŸã直らãªã„ã§ã™ã€‚
ãれã©ã“ã‚ã‹ã‚ˆãè¦‹ã‚‹ã¨æ–°ãŸãªç–‘å•点ã¨ã‹ãŒå‡ºã¦ããŸã‚Šãƒ»ãƒ»ãƒ»
具体的ãªå¤‰æ›´ç‚¹ã£ã¦
・全脚数
・関節ä¸å¿ƒåº§æ¨™
・å„リンクã®ä½ç½®
・æ©è¡Œã®ç›®æ¨™åº§æ¨™
ã§ã„ã„ã‚“ã§ã™ã‚ˆã?