
ãã®ã·ãªãŒãºã®èšäºã§ã¯ããããªã²ãŒã ã®ééååŠã玹ä»ããŸãã æ ãå§ããåã«ã æç¶ãåã¢ãã¡ãŒã·ã§ã³ã䜿çšããããã€ãã®ã²ãŒã ãšãããããåŸæ¥ã®ãªãœãŒã¹ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ãšã©ã®ããã«ç°ãªããã«ã€ããŠã話ããŸãã
GIF

ã·ãªãŒãºã¯ã次ã®éšåã§æ§æãããŸãã
- ããŒã1.æç¶ãåã¢ãã¡ãŒã·ã§ã³ã®æŠèŠ
- ããŒã2.çŽæ¥éååŠã®æ°åŠ
- ããŒã3.çŽæ¥éååŠã®å®çŸ
- ããŒã4.åŸé éäžæ³ã®æŠèŠ
- ããŒã5.ããããã¢ãŒã ã®ééååŠ
- ããŒã6.觊æã®ééååŠ
-
ããŒã7.ã¯ã¢ã®è¶³ã®ééååŠ
ããŒã1.æç¶ãåã¢ãã¡ãŒã·ã§ã³ã®æŠèŠ
ã»ãšãã©ã®ã²ãŒã ã§ã¯ããã£ã©ã¯ã¿ãŒã¢ãã¡ãŒã·ã§ã³ã¯ãéçãã§ãã ãã£ã©ã¯ã¿ãŒãç»é¢äžã移åãããšãã¢ãŒãã£ã¹ãã¯ç¹å®ã®åããäœæããŸãã ãããã¯æåã§äœæãããããã¢ãŒã·ã§ã³ãã£ããã£ã䜿çšããŠèšé²ãããŸãã ãã®å Žåã®ã¢ãã¡ãŒã·ã§ã³ã¯ãäºåã«äœæããããªãœãŒã¹ã§ãã ãã£ã©ã¯ã¿ãŒãå¥ã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠãããå Žåãå¥ã®ã¢ãã¡ãŒã·ã§ã³ãå¿ èŠã§ãã ãã£ã©ã¯ã¿ãŒã®åããå®è£ ãããã®æ¹æ³ã¯ãã²ãŒã æ¥çã§ã¯ããªãæšæºçã§ãã æ©è¡ããžã£ã³ããå°æãªã©ã®æãäžè¬çã«äœ¿çšãããåäœãå«ãã¢ãã¡ãŒã·ã§ã³ã®å€§èŠæš¡ã§è©³çŽ°ãªã³ã¬ã¯ã·ã§ã³ããããŸãã åŸæ¥ã®ã¢ãã¡ãŒã·ã§ã³ã¯ã²ãŒã æ¥çãæ¯é ããŠããŸãããåçã®ä»£æ¿æ段ããããŸãã æç¶ãåã¢ãã¡ãŒã·ã§ã³ã®æŠå¿µã玹ä»ããããšæããŸãã
ããã§ã®äž»ãªã¢ã€ãã¢ã¯ããã£ã©ã¯ã¿ãŒã®ç¶æ ã®ç¬éãæç¶ãçã«çæã§ãããšããããšã§ãã æç¶ãåã¢ãã¡ãŒã·ã§ã³ãçæããããã®æãæšæºçãªææ³ã®1ã€ã¯ãç©çã·ãã¥ã¬ãŒã·ã§ã³ã䜿çšããŸãã ãããã£ãŠãå€ãã®å Žåã ç©çã¢ãã¡ãŒã·ã§ã³ ïŒ Wikipedia ïŒãšåŒã°ããŸãã å žåçãªäŸã¯æ°Žã§ãã æåã§ã¢ãã¡ãŒã·ã§ã³åãããã æµäœååŠãèæ ®ããã¢ãã¡ãŒã·ã§ã³ã䜿çšã§ããŸãã
以äžã§ã¯ãåäœã·ãã¥ã¬ãŒã·ã§ã³ã䜿çšããç©çã¢ãã¡ãŒã·ã§ã³ã®éåžžã«å ·äœçãªäºçš®ã«ã€ããŠèª¬æããŸãã åãã¿ã€ãã®ã·ãã¥ã¬ãŒã·ã§ã³ã¯ãUnityãUnrealãªã©ã®ã²ãŒã ãšã³ãžã³ã§äžè¬çã«äœ¿çšãããŠããŸãã ãã®åçŽãªåçãã²ãŒã ã§ã©ã®ããã«äœ¿çšãããŠç©ççãªã¢ãã¡ãŒã·ã§ã³ãäœæããããèŠãŠã¿ãŸãããã
ã©ã°ããŒã«ç©çåŠ
ç©ççãªã¢ãã¡ãŒã·ã§ã³ã®æ žãšãªãã®ã¯ããã£ã©ã¯ã¿ãŒã®åããã·ãã¥ã¬ãŒãããå¯èœæ§ã®ååã§ãã 人äœãæ¯é ããããã»ã¹ãšå¶éãåäœæããããšã«ãããçŸå®çãªè¡åã®äœæã«è¿ã¥ãããšãã§ããŸãã æç¶ãåã¢ãã¡ãŒã·ã§ã³ãäœæããæãç°¡åã§å¹æçãªæ¹æ³ã®1ã€ã¯ãã©ã°ããŒã«ïŒã©ã°ããŒã«ãã©ã°ããŒã«ïŒã®ç©çåŠã䜿çšããããšã§ãïŒ Wikipedia ïŒã ã¢ã€ãã¢ã¯ããã¥ãŒããã€ãããã£ãäœæãããã®ãã¹ãŠã®ãªã³ã¯ããžã§ã€ã³ãã§æ¥ç¶ããŠãå®éã®ãããã¿ã€ãã瀺ãèªç±åºŠãåçŸããããšã§ãã åºäœç©çãšé¢ç¯ã®å¶çŽã䜿çšããã ãã§ã人ã®äœã®è»¢åãã·ãã¥ã¬ãŒãã§ããŸãã ããã¯ããæ»ã®ã¢ãã¡ãŒã·ã§ã³ãã§ãéãç¯çŽããã ãã§ã¯ãããŸããã ãŸããçŸå®çã«èœã¡ãŠç°å¢ãšçžäºäœçšãããã£ã©ã¯ã¿ãŒãäœæããããšãã§ããŸãã ãã®ãããªã¿ã¹ã¯ã¯ã粟床ã«é¢ä¿ãªããæ¢è£œã®ã¢ãã¡ãŒã·ã§ã³ã»ããã ãã§ã¯è§£æ±ºããããšã¯ã»ãšãã©äžå¯èœã§ãã
ã©ã°ããŒã«ã®æ倧ã®æ¬ ç¹ã¯ããã®éåžžã«äºæž¬äžå¯èœãªããšã§ãããããã¯ãã°ãã°éåžžã«é¢çœãåäœã«ã€ãªãããŸãã
GIF

ä»æ¥ãã©ã°ããŒã«ã¯ã²ãŒã ã§éåžžã«ããç¥ãããŠããŸãã Unityã«ã¯ã人åã¢ãã«ãã©ã°ããŒã«ã«ãã°ããå€æã§ããã·ã³ãã«ãªã©ã°ããŒã«ãŠã£ã¶ãŒãããŒã«ããããŸãã
ãœãªããã¹ããŒãã·ãã¥ã¬ãŒã·ã§ã³
ã©ã°ããŒã«ã®äž»ãªåé¡ã¯ãã¢ãŒã·ã§ã³ã³ã³ãããŒã«ã®æ¬ åŠã§ãã äœã®åéšããžã§ã€ã³ãã§æ¥ç¶ãããšããã£ã©ã¯ã¿ãŒã¯æ©ãããšããžã£ã³ãããããšãã§ããªããªããŸãã 圌ã¯èœã¡ãã ãã§ãã ãã ããæ··åã¢ãããŒãã䜿çšã§ããç¶æ³ããããŸãã
Grow Homeãæ°åŠã䜿çšããŠããŒãœããªãã£ãçæããæ¹æ³ã®èšäºã§ãã²ãŒã ãžã£ãŒããªã¹ãã®Alex WiltshireãUbisoftã«Grow Homeã«ã€ããŠè©±ããŠããŸãã ãã®ã²ãŒã ã®äž»ãªæ©èœã®1ã€ã¯ãäž»äººå ¬ã®åãã®æªãïŒBUDïŒã§ãã å°ãªããšãåŸæ¥ã®æå³ã§ã¯ãã²ãŒã ã«ã¯æ¢è£œã®ã¢ãã¡ãŒã·ã§ã³ã¯ãããŸããã ãã¬ãŒã€ãŒã移åãããšãèãšè ã®äœçœ®ã¯ã³ãŒãã«ãã£ãŠå¶åŸ¡ãããŸãã äœã®äžéšã«ã¯ã©ã°ããŒã«ãšåãå¶éãé©çšããããããé åçãªã¢ãã¡ãŒã·ã§ã³ãäœæããå¿ èŠããããŸãã
åæ§ã®ååãRain Worldã§ãç©æ¥µçã«äœ¿çšãããŠããŸãã ã²ãŒã å ã®ååç©ã«ã¯ãè€æ°ã®ã³ã©ã€ããŒã§æ§æãããäœããããŸãã ãããã®äžéšã¯ã³ãŒãã«ãã£ãŠå¶åŸ¡ããããã®ä»ã¯ã¢ãŒãã£ãã¥ã¬ãŒã·ã§ã³ã«ãã£ãŠå¶åŸ¡ãããŸãã ããã¯ä»¥äžã®ã¢ãã¡ãŒã·ã§ã³ã§èŠãããšãã§ããŸãã ç犜é¡ã®ç¿Œã®ç«¯ç¹ã¯ããã°ã©ã ã§ç§»åããæ®ãã®éªšã¯ãã³ãžã§æ¥ç¶ãããŠããŸãã ãšã³ããã€ã³ã管çã¯ãããã§ãªããã°äžå¯èœã ã£ãã¹ã ãŒãºãªã¢ãã¡ãŒã·ã§ã³ãèªåçã«äœæããŸãã
GIF

Grow HomeãšRain Worldã®äž¡æ¹ã§ãæç¶ãåã¢ãã¡ãŒã·ã§ã³ã䜿çšããŠãã£ã©ã¯ã¿ãŒã®ãªã¢ãªãºã ã匷åããŸãã ãã ããã³ã³ãããŒã©ãŒã¯ãããã®ã¢ãã¡ãŒã·ã§ã³ã«äŸåããŸããã Gang Beastsã²ãŒã ã§ã¯ããã®æŠå¿µã¯ããã«çºå±ããŠããŸãã ã²ãŒã ã¯ã©ã°ããŒã«ç©çåŠã®äœ¿çšã«èµ·å ãããŒãããåããå®å šã«æ¿èªããŸãã ãã®çµæãäºæž¬äžå¯èœãªåãã®ããé¢çœããã£ã©ã¯ã¿ãŒãã§ããŸãã
GIF

ééååŠ
åäœã·ãã¥ã¬ãŒã·ã§ã³ã«ãããã¢ãã¡ãŒã·ã§ã³ãç°¡åã«äœæã§ããŸãã ããã®è ãšèãã©ãã«ããã¹ããã瀺ããç©çãšã³ãžã³ãæ®ããè¡ããŸãã ãã®éåžžã«ã·ã³ãã«ãªã¢ãããŒãã¯ã·ã³ãã«ãªãã£ã©ã¯ã¿ãŒã§æ©èœããŸãããå€ãã®å Žåãªã¢ãªãºã ã«æ¬ ããŠããŸãã ãœãªããããã£ã·ãã¥ã¬ãŒã·ã§ã³ã§ã¯ãéåã質éãªã©ã®ãã©ã¡ãŒã¿ãŒã®ã¿ãèæ ®ãããŸãããã³ã³ããã¹ãã«é¢ããç¥èã¯ãããŸããã å€ãã®å Žåãéåãååç©ã«ããå¶éã®åœ±é¿äžã§ã®ã¿äœçšãããã®ãäœæããå¿ èŠããããŸãã
æç¶ãåã¢ãã¡ãŒã·ã§ã³ãäœæãã次ã®ã¹ãããã¯ã ééååŠãšããŠç¥ãããŠããŸãã ããããã¿ã€ãã®ã©ã°ããŒã«ã«ã€ããŠãã€ã³ããŒã¹ããããã£ã¯ã¹ã¯ãç®çã®ç®æšãéæããããã«ãããåããæ¹æ³ãèšç®ããŸãã Grow HomeãšRain Worldã§ã¯ãç©çåŠèªäœãéåã®åœ±é¿ãåããååç©ã®ç§»åæ¹æ³ã決å®ããŸãã ééååŠã¯ãããããé©åãªãã§ãŒãºã§ç§»åãããŸãã
ãã®ã³ã³ã»ãããç©æ¥µçã«äœ¿çšãããæåã®ã€ã³ãã£ãŒãºã²ãŒã ã®1ã€ã¯ã The Future Proof Gamesã¹ã¿ãžãªã® The Majesty Of Colorã§ããã ãã®äžã§ããã¬ã€ã€ãŒã¯æµ·ã®çãç©ã®è§Šæãå¶åŸ¡ããŸãã Rain Worldã®é³¥ã®çŸœãšã¯ç°ãªãããã®è§Šæã¯ãã³ãžã ãã§ã¯ãããŸããã 觊æã®ç«¯ç¹ãç®çã®ç¹ã«å°éããããã«ãåã»ã°ã¡ã³ããå転ããŸãã ãã®ã¢ãã¡ãŒã·ã§ã³ã§ãœãªããããã£ã·ãã¥ã¬ãŒã·ã§ã³ã®ã¿ã䜿çšããå Žåã觊æã¯ããŒãã®ããã«ãã®ãã€ã³ãã«ãåºå®ããããŠããããã«èŠããŸãã
GIF

ééååŠã¯ãå€ãã®åé¡ã解決ããããã«äœ¿çšã§ããŸãã æãæšæºçãªã®ã¯ãç¹å®ã®ãªããžã§ã¯ããžã®ãã¥ãŒããã€ããã£ã©ã¯ã¿ãŒã®èªç¶ãªåãã§ãã éçºè ã¯ãäºåå®çŸ©ãããã¢ãã¡ãŒã·ã§ã³ã䜿çšãã代ããã«ãæãéæãã¹ãç®æšãåã«ç€ºãã ãã§ãã ééååŠã¯æ®ããè¡ããæã®é¢ç¯ãåããæãèªç¶ãªæ¹æ³ãèŠã€ããŸãã ãœãªããã®ã·ãã¥ã¬ãŒã·ã§ã³ã®ã¿ã䜿çšãããšãåãããããããããäœã®äžéšãåã«ãã©ãã°ã¢ã³ããããããããŠããããã«èŠããŸãã
MechanimãšããUnityã¢ãã¡ãŒã·ã§ã³ãšãã£ã¿ãŒã«ã¯ãéçºè ããã¥ãŒããã€ããã£ã©ã¯ã¿ãŒã«ééååŠã䜿çšã§ããããŒã«ïŒ Unityãã«ã ïŒããããŸãã

ãã®äžé£ã®èšäºã®æ®ãã§ã¯ãééååŠã®åé¡ã®è§£æ±ºã«çŠç¹ãåœãŠãŸãã ããããã¢ãŒã ãŸãã¯ã¢ã³ã¹ã¿ãŒã®è§Šæãå¶åŸ¡ããæ¹æ³ãç解ããŸãã
GIF

ããŒã2.çŽæ¥éååŠã®æ°åŠ
ããã ééååŠã®äžçãžã®æ ãå§ããŸãããã ãã®åé¡ã解決ããæ¹æ³ã¯ãããããããŸããããããã¯ãã¹ãŠçŽæ¥éååŠããå§ãŸããŸãã
ã€ã³ããŒã¹ããããã£ã¯ã¹ã¯ã空éå ã®ãã€ã³ããååŸããããã«å°éããããã«æãåããæ¹æ³ãæããŠãããŸãã çŽæ¥éååŠã¯ãå察ã®äºéåé¡ã解決ããŸãã ç§ãã¡ãã©ã®ããã«æãåããããç¥ã£ãŠã圌女ã¯æã空éã®ã©ã®ç¹ã«éããããæããŠãããŸãã
ããããã¢ãŒã
ééååŠã¯ããšããšãããããããã¥ã¬ãŒã¿ãŒãå¶åŸ¡ããããã«äœ¿çšãããŸããã ãããã£ãŠããã®ã·ãªãŒãºã®èšäºã§ã¯ãããããå·¥åŠã®åæãšçšèªã䜿çšããŸãã ãã ããããã¯ééååŠã®å¯èœãªã¢ããªã±ãŒã·ã§ã³ãå¶éããŸããã 人éã®æãã¯ã¢ã®è¶³ã觊æã«äœ¿çšã§ããŸãã
ãŸãããããããã¢ãŒã ããšããçšèªã®æå³ã瀺ãããšããå§ããŸãããã

äžã®ç»åã¯ãããžã§ã€ã³ããã§æ¥ç¶ããããæ足ãã§äœãããæšæºçãªããããã¢ãŒã ã瀺ããŠããŸãã ç»åã«ç€ºãããŠããããããã«ã¯5ã€ã®ç¬ç«ããé¢ç¯ãããããã5ã€ã®èªç±åºŠããããšèããããŠããŸãã åãžã§ã€ã³ãã¯ãšã³ãžã³ã«ãã£ãŠå¶åŸ¡ãããŸããããã«ããããžã§ã€ã³ãã«åãä»ãããããªã³ã¯ãç¹å®ã®è§åºŠã«ç§»åã§ããŸãã
ããäžè¬çãªäŸãæ€èšããããã«ãå ±åå³ãæãããšãã§ããŸãã ãã®èšäºã§ã¯ãåãžã§ã€ã³ãã1ã€ã®è»žã§ã®ã¿å転ã§ãããšä»®å®ããŸãã

ããããã¢ãŒã ã®ç«¯ã«åãä»ããããããŒã«ã¯ã ãšã³ããªã³ã¯ãšåŒã°ããŸãã ã³ã³ããã¹ãã«å¿ããŠã1èªç±åºŠãšèŠãªãããå Žåãšãããªãå ŽåããããŸãã ãã®èšäºã§ã¯ãç®çã®ãã€ã³ãã«å°éããããã®ç§»åã®ã¿ã«çŠç¹ãåœãŠããããæçµãªã³ã¯ã¯èæ ®ãããŸããã
çŽæ¥éååŠ
ãã®äŸã§ã¯ãåãžã§ã€ã³ãã¯1ã€ã®è»žã§å転ã§ããŸãã ãããã£ãŠãåé¢ç¯ã®ç¶æ ã¯è§åºŠãšããŠæž¬å®ãããŸãã åãžã§ã€ã³ããç¹å®ã®è§åºŠã§å転ãããããšã«ãããæçµçãªãªã³ã¯ã空éã®ç°ãªããã€ã³ãã«å°éã§ããããã«ããŸãã ãšã³ããªã³ã¯ãæ¢ç¥ã®ãžã§ã€ã³ãè§åºŠã«ããå Žæãç¹å®ããããšã¯ã çŽæ¥éååŠãšåŒã°ããŸãã
çŽæ¥éååŠã¯ãåçŽãªãåé¡ã§ãã ããã¯ãè§åºŠã®åã»ããã«å¯ŸããŠãäžç¢ºå®æ§ãªãã«èšç®ã§ããåäžã®çµæãããããšãæå³ããŸãã éä¿¡ããããŒã¿ã«å¿ããŠããããã¢ãŒã ãã©ã®ããã«åãããå€æããããšã¯ãééååŠã®éåé¡ãèŠã€ããããã«å¿ èŠãªã¹ãããã§ãã
幟äœåŠç解é
ã³ãŒãã®èšè¿°ãéå§ããåã«ãçŽæ¥éååŠã®èåŸã«ããæ°åŠçæ§é ãç解ããå¿ èŠããããŸãã ãããããŸã第äžã«ãããã空éçããã³å¹ŸäœåŠçã«æå³ããããšãç解ããå¿ èŠããããŸãã
3Dã§ã¿ãŒã³ãèŠèŠåããã®ã¯ããã»ã©ç°¡åã§ã¯ãªãã®ã§ã2次å 空éã®åçŽãªãããã¥ã¬ãŒã¿ãŒããå§ããŸãããã ããããã¢ãŒã ã«ã¯ãéå§äœçœ®ãããããŸããããã¯ããã¹ãŠã®é¢ç¯ãããŒãè§ããŸã§å転ããæ§æã§ãã

äžã®å³ã¯ã3ã€ã®èªç±åºŠãæã€ãããã¥ã¬ãŒã¿ãŒã瀺ããŠããŸãã åé¢ç¯ã¯ããã®ãŒãè§åºŠã®äœçœ®ãŸã§å転ããŸããã€ãŸããããããã¯å ã®äœçœ®ã«ãããŸãã ãžã§ã€ã³ããå転ãããšããã®æ§æãã©ã®ããã«å€åãããã確èªã§ããŸãã




ä»ã®ãžã§ã€ã³ãã«åãä»ããããã¢ãŒã¿ãŒã¯ãŸã 移åããŠããªãããšã«æ³šæããããšãéèŠã§ãã åãžã§ã€ã³ãã¯ãçµåã®çŽæ¥ãã§ãŒã³ã®ããŒã«ã«å転ã«å¯äžããŸãã 次ã®å³ã¯ã2çªç®ã®ãžã§ã€ã³ããå転ãããšãã®æ§æã®å€æŽã瀺ããŠããŸã


圹è·





æ°åŠ
åã®ã¹ããŒã ãããçŽæ¥éååŠã®åé¡ã解決ããã«ã¯ãåã蟌ãŸããïŒåŸå±ïŒãªããžã§ã¯ããå転ãããšãã®äœçœ®ãèšç®ããå¿ èŠãããããšã¯æããã§ãã
2ã€ã®ãžã§ã€ã³ãã®äŸã䜿çšããŠèšç®ããæ¹æ³ãèŠãŠã¿ãŸãããã 2ã€ã®èŠçŽ ã®è§£æ±ºçãèŠã€ãããããã®ããã»ã¹ãç¹°ãè¿ããŠä»»æã®é·ãã®ãã§ãŒã³ã解決ã§ããŸãã
æåã®ãžã§ã€ã³ããåæäœçœ®ã«ããåçŽãªã±ãŒã¹ããå§ããŸãããã ã€ãŸãã


ããã¯æ¬¡ã®ããšãæå³ããŸãã

ãã€





æ°åŠçã«ã¯ãããã¯æ¬¡ã®ããã«æžãããšãã§ããŸãã

以äžã§ã¯ãäžè§æ³ã«
AngleAxis
ããšãªã
AngleAxis
é¢æ°ïŒ Unityããã¥ã¡ã³ã ïŒã䜿çšããæ¹æ³ãåŠã³ãŸãã
åãè«çãåçŸãããšã次ã®æ¹çšåŒãåŸãããšãã§ããŸã


ãããŠæåŸã«ãäžè¬çãªæ¹çšåŒïŒ

ãã®èšäºã®æ¬¡ã®ããŒãã§ã¯ããã®åŒãCïŒã³ãŒãã§å®è£ ããã®ãã©ã®ããã«äŸ¿å©ãã説æããŸãã
2Dã§ã®çŽæ¥éååŠ
2Dã§ã®å転ã«ç²ŸéããŠããå Žåãããã¯äžè§æ³ã§è¡ãããšãã§ããŸãã
æ¹çšåŒã®å°åºã¯ãç§ã®èšäºã2Då転ã«é¢ããç©ãããªå ¥éãã«èšèŒãããŠããŸãã


æ¹çšåŒã®å°åºã¯ãç§ã®èšäºã2Då転ã«é¢ããç©ãããªå ¥éãã«èšèŒãããŠããŸãã
Denavit-Hartenbergè¡åã¯ã©ãã§ããïŒ
ãšã³ãžãã¢ãªã³ã°ã®ç¥èãããå Žåã¯ããã®åé¡ãå¥ã®æ¹æ³ã§è§£æ±ºã§ããŸãã çŽæ¥ããã³ééååŠã®åé¡ã¯åºãç¥ãããŠããããããã解決ããããã®æšæºåãããã¢ãããŒããããã€ãååšããŸãã ãããã®1ã€ã¯ãDenavit-Hartenberg ïŒ ãŠã£ãããã£ã¢ ïŒã®ãã©ã¡ãŒã¿ãŒãšåŒã°ãã4ã€ã®ãã©ã¡ãŒã¿ãŒã®åãžã§ã€ã³ããžã®ãã€ã³ãã§ãã ãããããããªãã¯ã¹åœ¢åŒã§æäœãããšäŸ¿å©ã§ãããééååŠã®åé¡ã®åæãœãªã¥ãŒã·ã§ã³ã«æé©ã§ãã
ãã ãããã®èšäºã§ã¯ãããã䜿çšããŸããã Denavit-Hartenbergè¡åã解ãã«ã¯ãå€ãã®ããã°ã©ããç解ãããããå€ãã®æ°åŠãå¿ èŠã§ãã ç§ãéžæããã¢ãããŒãã§ã¯ãããäžè¬çãªæé©åã¢ã«ãŽãªãºã ã§ããåŸé éäžæ³ã䜿çšããŠããŸãã

ãã ãããã®èšäºã§ã¯ãããã䜿çšããŸããã Denavit-Hartenbergè¡åã解ãã«ã¯ãå€ãã®ããã°ã©ããç解ãããããå€ãã®æ°åŠãå¿ èŠã§ãã ç§ãéžæããã¢ãããŒãã§ã¯ãããäžè¬çãªæé©åã¢ã«ãŽãªãºã ã§ããåŸé éäžæ³ã䜿çšããŠããŸãã
ããŒã3.çŽæ¥éååŠã®å®çŸ
ãã®ããŒãã§ã¯ã çŽæ¥éååŠã®åé¡ã解決ãç¶ããŸãã æåŸã®éšåã§æ°åŠç解決çãèŠã€ããã®ã§ãUnityã®CïŒã³ãŒãã§ãããå®è£ ããæ¹æ³ãåŠã³ãŸãã 次ã®ãåŸé éäžæ³ã®çŽ¹ä»ãã§ã¯ãæçµçã«ééååŠã®åé¡ã解決ããããã®çè«çæ ¹æ ã瀺ããŸãã
ã¯ããã«
åã®ããŒãã§ã¯ãããããã¢ãŒã ã®åãã圢åŒåããŸããã 3ã€ã®ãžã§ã€ã³ãã®ç°¡åãªäŸããå§ããŸããã åæäœçœ®ã§ã¯ã以äžã«ç€ºãæ§æã«ãªã£ãŠããŸãã

ç°ãªã



ãžã§ã€ã³ããåããšãã次ã®å³ã芳å¯ããŸãã

ãã®ã·ã¹ãã ã®åäœã¯ã次ã®ã¹ããŒãã¡ã³ãã§èŠçŽã§ããŸãã
- ã¿ãŒã³ ã ã°ããŒãã«ã¿ãŒã³
ãžã§ã€ã³ãã¯ã以åã®ãã¹ãŠã®ãžã§ã€ã³ãã®å転ã®åèšã§ãã
- äœçœ® ã°ããŒãã«ããžã·ã§ã³
ãžã§ã€ã³ãã¯æ¬¡ã®ããã«å®çŸ©ãããŸãïŒ
äžèšã®ãã¹ãŠãèæ ®ãããšãUnityã§ãããã®åäœãå®è£ ããå¯èœãªæ¹æ³ãèãåºãããšãã§ããŸãã
ã²ãŒã ãªããžã§ã¯ãéå±€
Unityã¯ãã§ã«ãäžèšã®ãã¹ãŠã®èŠä»¶ãå®è£ ããæ¹æ³ãæã£ãŠããŸãïŒ ãã¢ã¬ã³ãã£ã³ã°ã·ã¹ãã ã ã²ãŒã ãªããžã§ã¯ããå¥ã®ãªããžã§ã¯ãã®åã«ãããšããã®ãªããžã§ã¯ãã®äœçœ®ãå転ãã¹ã±ãŒã«ãèªåçã«ç¶æ¿ãããŸãã

çŽ¢å ·ã«æ £ããŠããå Žåãããã¯é©ãããšã§ã¯ãããŸããã ãã¥ãŒããã€ããã£ã©ã¯ã¿ãŒã®é¢ç¯ã§ãã骚ã«ã¯ãã¿ãŒã³ãšåããç¶æ¿ããã芪ã·ã¹ãã ããããŸãã Michael Erbetnotã«ããUnity Animation 3ïŒCharacter Setupã®ç»åã¯ããã®æçœãªäŸã瀺ããŠããŸãã

æ¥ç¶éå±€ãäœæããå Žåããã¹ãŠã®ããŒã«ã«ãªã€ã©ãŒè§ããŒãã«çããå Žåãããããã¢ãŒã ãå ã®äœçœ®ã«ããããšã確èªããå¿ èŠããããŸãã ãã¥ãŒããã€ããã£ã©ã¯ã¿ãŒã®å Žåãããã¯éåžžãäžã®ç»åã«ç€ºãããŠããæšæºã®Tååã®ããŒãºã§ãã
å®è£
Unityã§åã³ã³ããŒãã³ããäœæããæ©èœã«ãããçŽæ¥éååŠã®åé¡ãäºå®äžè§£æ±ºãããŸãã æ®å¿µãªãããããã§ã¯ååã§ã¯ãããŸããã äžé£ã®èšäºã®æ¬¡ã®éšåã§ã¯ãããããã¢ãŒã ãåãããã«æçµçãªãªã³ã¯ã®äœçœ®ã確èªããæ¹æ³ãå®éã«å¿ èŠã§ããããšãããããŸãã ããã«ããããã®åºæ¬çãªUnityæ©èœãç¬èªã®æ¹æ³ã§å®è£ ããå¿ èŠããããŸãã
æåã®ã¹ãããã¯ãããããã¢ãŒã ã®åé¢ç¯ã«é¢ããæ å ±ãä¿åããããšã§ãã ããã¯ã次ã®äŸã®
RobotJoint
ãªã©ã®ã¹ã¯ãªããã䜿çšããŠå®çŸã§ããŸãã
using UnityEngine; public class RobotJoint : MonoBehaviour { public Vector3 Axis; public Vector3 StartOffset; void Awake () { StartOffset = transform.localPosition; } }
èšç®ãç°¡çŽ åããããã«ãåãžã§ã€ã³ãã¯ããŒã«ã«è»žã®1ã€ïŒXãYããŸãã¯ZïŒã§ã®ã¿å転ã§ãããšæ³å®ããŠããŸãããããå€æ°
Axis
ã§è¡šããå転軞ã«å¯Ÿãã座æšã®å€ã
1
ããŸãã ãžã§ã€ã³ããY軞ã«æ²¿ã£ãŠå転ããå Žåã軞ã®åœ¢åŒã¯
(0,1,0)
ãŸãã ããã«ããã
IF
ã䜿çšããŠã³ã³ã¹ãã©ã¯ããåé€ã§ããããšãããããŸãã
ForwardKinematics
é¢æ°ãäœæããŸãããã 圌女ã¯
float
åã®
angles
é åãååŸããŸãã ååã¯ããèªèº«ãè¡šããŠããŸã
angles[i]
ã«ã¯ãiçªç®ã®ãžã§ã€ã³ãã®ããŒã«ã«å転å€ãå«ãŸããŸãã ãã®é¢æ°ã¯ãã°ããŒãã«ãªã³ã¯ã®æçµãªã³ã¯ã®äœçœ®ãè¿ããŸãã
public Vector3 ForwardKinematics (float [] angles) { ... }
ãã®ã³ãŒãã¯ãäžèšã®äœçœ®æ¹çšåŒã®åçŽãªCïŒå®è£ ã§ãã
rotate
é¢æ°ã¯ã䟿å©ãª
Quaternion.AngleAxis
é¢æ°ãéããŠå®è£ ãããŸãã
Vector3 prevPoint = Joints[0].transform.position; Quaternion rotation = Quaternion.identity; for (int i = 1; i < Joints.Length; i++) { // rotation *= Quaternion.AngleAxis(angles[i - 1], Joints[i - 1].Axis); Vector3 nextPoint = prevPoint + rotation * Joints[i].StartOffset; prevPoint = nextPoint; } return prevPoint;
ã¯ã©ãŒã¿ããªã³ã®ãµããŒããå¿
èŠã§ããïŒ
ãŠããã£ã®ã¿ãŒã³ã¯ãå€ãã®å Žåããªã€ã©ãŒè§ã§èšè¿°ãããŸãã ãããã¯ãXãYãZ軞ã«æ²¿ã£ããªããžã§ã¯ãã®å転ã«å¯Ÿå¿ãã3ã€ã®æ°å€ã§ããããªã€ã©ãŒè§ã¯ã空éå
ã®ãªããžã§ã¯ãã®ããŒã« ã ããã ã ãšãŒãè¡šããŸãã ãã ããæ°åŠçãªèŠ³ç¹ããã¯ããªã€ã©ãŒè§ã䜿çšãããšãããªãäžå¿«ãªåé¡ãçºçããå¯èœæ§ããããŸãã
åå æ°ã®å©ããåããŠã³ãŒããŒã§äœæ¥ããæ¹ã䟿å©ã§ãã åå æ°ã¯ã ã¿ãŒã³ãèšè¿°ããããã«äœ¿çšã§ããæ°åŠçãªãªããžã§ã¯ãã§ãã å¯Ÿç §çã«ããªã€ã©ãŒè§ã¯æ¹åãè¡šããŸãã ã¯ã©ãŒã¿ããªã³ã¯ãããæ¹åããå¥ã®æ¹åã«é²ããã¹ãè¡šããŸãã æè¡çãªèŠ³ç¹ããèŠããšãããã¯éåžžã«åçŽåãããŠããŸãããç§ãã¡ã®èšäºã«ãšã£ãŠã¯ååãããã»ã©ã§ãã
åå æ°ã¯ã¿ãŒã³ãšããŠè¡šãããšãã§ããŸãã 空éå ã®ãªããžã§ã¯ãã®å転ã¯ãæ°åŠçãªèŠ³ç¹ããããã®äœçœ®ã«åå æ°ãæãããã®ã«é¡äŒŒããŠããŸãã
é¢æ°ã䜿çšããŠãUnityã®åºå®ç¹ãäžå¿ã«å転ãäœæã§ããŸãã String
軞
åšãã®å転ã
è¡šãã¯ã©ãŒã¿ããªã³ãäœæããŸãã ãã®ã³ã³ããã¹ãã§ã¯ã
å€ã¯
ã
ãŸãã¯
ã«ãªããããããXãYãŸãã¯Zãæå³ããŸãã
ã¯ã©ã¹ã®
ã
2ã€ã®ã¯ã©ãŒã¿ããªã³ãä¹ç®ãããšãäž¡æ¹ã®ã¿ãŒã³ãå«ãæ°ããã¯ã©ãŒã¿ããªã³ãäœæãããŸãã
ã«ãŒãã®åå埩ã§ã
å€æ°ã«çŸåšã®ã¯ã©ãŒã¿ããªã³ãä¹ç®ãããŸãã ããã¯ããã¹ãŠã®ãžã§ã€ã³ãã®ãã¹ãŠã®å転ãå«ãŸããããšãæå³ããŸãã
æåŸã«ããã®è¡ã§åå æ°ã䜿çšãããŸãã
次ã®ãšã³ããªãšå®å šã«äžèŽããŠããŸãã
ã¯ã©ãŒã¿ããªã³ãšãã¯ãã«ã®ç©ã¯å転ãé©çšããŸãã
åå æ°ã®å©ããåããŠã³ãŒããŒã§äœæ¥ããæ¹ã䟿å©ã§ãã åå æ°ã¯ã ã¿ãŒã³ãèšè¿°ããããã«äœ¿çšã§ããæ°åŠçãªãªããžã§ã¯ãã§ãã å¯Ÿç §çã«ããªã€ã©ãŒè§ã¯æ¹åãè¡šããŸãã ã¯ã©ãŒã¿ããªã³ã¯ãããæ¹åããå¥ã®æ¹åã«é²ããã¹ãè¡šããŸãã æè¡çãªèŠ³ç¹ããèŠããšãããã¯éåžžã«åçŽåãããŠããŸãããç§ãã¡ã®èšäºã«ãšã£ãŠã¯ååãããã»ã©ã§ãã
ããŒããŒã·ã§ã³âã¯ã©ãŒã¿ããªã³
åå æ°ã¯ã¿ãŒã³ãšããŠè¡šãããšãã§ããŸãã 空éå ã®ãªããžã§ã¯ãã®å転ã¯ãæ°åŠçãªèŠ³ç¹ããããã®äœçœ®ã«åå æ°ãæãããã®ã«é¡äŒŒããŠããŸãã
Quaternion.AngleAxis
é¢æ°ã䜿çšããŠãUnityã®åºå®ç¹ãäžå¿ã«å転ãäœæã§ããŸãã String
Quaternion.AngleAxis(angle, axis);
軞
axis
åšãã®å転ã
angle
è¡šãã¯ã©ãŒã¿ããªã³ãäœæããŸãã ãã®ã³ã³ããã¹ãã§ã¯ã
Axis
å€ã¯
(1,0,0)
ã
(0,1,0)
ãŸãã¯
(0,0,1)
ã«ãªããããããXãYãŸãã¯Zãæå³ããŸãã
RobotJoint
ã¯ã©ã¹ã®
Axis
ã
ã¹ãã³ã®è¿œå âåå æ°ã®ä¹ç®
2ã€ã®ã¯ã©ãŒã¿ããªã³ãä¹ç®ãããšãäž¡æ¹ã®ã¿ãŒã³ãå«ãæ°ããã¯ã©ãŒã¿ããªã³ãäœæãããŸãã
for
ã«ãŒãã®åå埩ã§ã
rotation
å€æ°ã«çŸåšã®ã¯ã©ãŒã¿ããªã³ãä¹ç®ãããŸãã ããã¯ããã¹ãŠã®ãžã§ã€ã³ãã®ãã¹ãŠã®å転ãå«ãŸããããšãæå³ããŸãã
åå æ°*ãã¯ãã«=å転ãã¯ãã«
æåŸã«ããã®è¡ã§åå æ°ã䜿çšãããŸãã
Vector3 nextPoint = prevPoint + rotation * Joints[i].StartOffset;
次ã®ãšã³ããªãšå®å šã«äžèŽããŠããŸãã

ã¯ã©ãŒã¿ããªã³ãšãã¯ãã«ã®ç©ã¯å転ãé©çšããŸãã
[ç¶ããŸãã 2çªç®ã®èšäºã§ã¯ãééååŠã«æ³šç®ããŸãã]