ODE質å•ãƒ»è¦æœ›å‹Ÿé›†ï¼
ã‚³ãƒ¡ãƒ³ãƒˆç·æ•°ãŒ50ä»¶ã‚’è¶…ãˆãŸã®ã§ï¼Œã‚³ãƒ¡ãƒ³ãƒˆã‚’é ‚ã‘ã‚‹å ´åˆã¯æœ€æ–°ã®ODE質å•ãƒ»è¦æœ›å‹Ÿé›†â—‹ï¼ã«ã‚³ãƒ¡ãƒ³ãƒˆãã ã•ã„.
ODE(Open Dynamics Engine)本出版ã®è©±ãŒæ±ºã¾ã‚Šã€æ€¥ãƒ”ッãƒã§ãã®åŽŸç¨¿ã‚’æ›¸ã上ã’る作æ¥ã¨å’ç ”ã®æŒ‡å°ŽãŒã¾ã•ã«ä½³å¢ƒã«å…¥ã£ã¦ã„ã‚‹ãŸã‚æ›´æ–°ãŒé…ããªã‚Šã™ã¿ã¾ã›ã‚“。ODE本ã§ã¯åˆå¿ƒè€…ã®ãƒ¦ãƒ¼ã‚¶ã‚’対象ã«ã€ã‚ã‹ã‚Šãšã‚‰ã„ã¨ã“ã‚を説明ã—ãŸã„ã®ã§æ˜¯éžã“ã®ã‚¦ã‚§ãƒ–ã«è³ªå•ã‚„è¦æœ›ãŒã‚ã‚Œã°æŠ•ç¨¿ã—ã¦ãã ã•ã„。2月ã¯å¸«èµ°ã‚ˆã‚Šã‚‚より忙ã—ã„ã®ã§ã™ãã«ã”è¿”ç”ã§ããªã„ã‹ã‚‚ã—れã¾ã›ã‚“。ã¾ãŸã€ã‚¹ãƒ‘ムコメント防æ¢ã®ãŸã‚コメントを投稿ã„ãŸã ã„ã¦ã‚‚ã™ãã«ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。 ã”了承ãã ã•ã„。
ã©ã‚ã»ã•ã‚“ã‹ã‚‰é ‚ã„ãŸè³ªå•ãŒè‰¯ã‹ã£ãŸã®ã§ã“ã“ã§ç´¹ä»‹ã—ã¾ã™ã€‚
「 ã¯ã˜ã‚ã¾ã—ã¦ã€‚ODEã«ã¤ã„ã¦æœ€è¿‘勉強を始ã‚ãŸã‚‚ã®ã§ã™ã€‚
ã“ã®ãƒ›ãƒ¼ãƒ ページをã„ã¤ã‚‚大変å‚考ã«ã•ã›ã¦ã„ãŸã ã„ã¦ãŠã‚Šã¾ã™ã€‚
å§¿å‹¢ã«ã¤ã„ã¦ã§ã™ãŒã€ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã§ã¤ãªãŒã‚ŒãŸç‰©ä½“ã®åˆæœŸå§¿å‹¢ã‚’変æ›ã™ã‚‹ã«ã¯ã©ã®ã‚ˆã†ã«ã™ã‚Œã°ã‚ˆã„ã§ã—ょã†ã‹ã€‚
ã¾ãŸã€ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ï¼ˆãƒ†ã‚スト)を表示ã•ã›ã‚‹ã«ã¯ã©ã®ã‚ˆã†ã«ã™ã‚Œã°ã‚ˆã„ã®ã§ã—ょã†ã‹ã€‚
æ•™ãˆã¦ã„ãŸã ã‘ã¾ã›ã‚“ã§ã—ょã†ã‹ã€‚ã€
ã•ã¦ã€ç¬¬ï¼‘å•ç›®ã®ã”質å•ã§ã™ãŒã€ï¼’ã¤ã®æ–¹æ³•ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚
A ジョイントã§ã¤ãªãŒã‚ŒãŸç‰©ä½“ã®åˆæœŸå§¿å‹¢ã‚’変æ›ã™ã‚‹æ–¹æ³•
1.軌é“を計算ã€é€†é‹å‹•å¦ã‚’è§£ãã€ç‰©ä½“ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆãªã©ã‚’制御ã—ã¦ãã®ä½ç½®ã¨å§¿å‹¢ã«ã™ã‚‹ã€‚ã“れãŒã§ãれã°ä½•ã®è‹¦åŠ´ã‚‚ã—ã¾ã›ã‚“ã

2.物体を構æˆã—ã¦ã„ã‚‹å…¨ã¦ã®ãƒœãƒ‡ã‚£ã«ã€è¨å®šã—ãŸã„å§¿å‹¢ã¨ä½ç½®ã‚’dBodySetRotation()ã¨dBodySetPosition()を使ã£ã¦æŒ‡å®šã™ã‚‹ã€‚ã“ã®é–¢æ•°ã‚’作ã£ãŸã‚‰ã‚ーボードã‹ã‚‰ã®å…¥åŠ›ã‚’å—ã‘ã‚‹command関数(ODEã®ãƒ†ã‚¹ãƒˆãƒ—ラグラムtest_buggy.cppå‚照)ã®ä¸ã«å…¥ã‚Œã¦ç½®ãã¨ã‚ˆã„ã§ã—ょã†ã€‚ã‚ーを入力ã™ã‚‹ã¨ç‰©ä½“ãŒæŒ‡å®šã—ãŸä½ç½®ã¨å§¿å‹¢ã«ãªã‚Šã¾ã™ã€‚
B ウインドウã«ãƒ†ã‚ストを表示ã™ã‚‹æ–¹æ³•
cygwinを使ã†å ´åˆã®å›žç”ã§ã™ã€‚cygwinã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã§ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’入力ã—ã€X Windowシステムを起動ã—ã¾ã™ã€‚
startx &
ãã†ã™ã‚‹ã¨Xã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ãŒé–‹ãã®ã§ã€ãã®ä¸Šã§å®Ÿè¡Œã—ãŸã„オブジェクトファイルを起動ã—ã¦ãã ã•ã„。
以上ã§ã™ã€‚
ã²ã‚ã•ん demura.netã¸ã‚ˆã†ã“ãï¼
dBodyGetPositionã§è¨ˆç®—ã•れãŸä½ç½®(x,y,z)ã®å€¤ã¯é…åˆ—ã«æ ¼ç´ã•れã¾ã™ï¼ŽdBodyGetPositionã®æˆ»ã‚Šå€¤ã¯const dReal *,ã¤ã¾ã‚Šãã®é…列ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã¨ãªã£ã¦ã„ã¾ã™ï¼Ž
å„è¦ç´ ã®å–ã‚Šå‡ºã—æ–¹ã¯ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã‚’å‚考ã«ã—ã¦ãã ã•ã„.
dBodyID body;
dReal x, y, z;
const dReal *pos = dBodyGetPositon(body);
 x = pos[0]; // ã¾ãŸã¯ã€€x = *(pos +0);
 y = pos[1]; // y = *(pos + 1);
 z = pos[2]; // z = *(pos + 2);
printf(“é‡å¿ƒã®ä½ç½®ã¯x=%f y=%f z=%f \n”, x , y, z);
以上ã§ã™ï¼Ž
ã¯ã˜ã‚ã¾ã—ã¦ï¼Žã“ã‚“ã«ã¡ã¯ï¼Žã„ã¤ã‚‚,å‚考ã«ã•ã›ã¦ã„ãŸã ã„ã¦ã¾ã™ï¼Ž
ã„ããªã‚Šã§ã™ãŒè³ªå•ã•ã›ã¦ãã ã•ã„.
ä½ç½®ã«å¯¾ã—ã¦P制御をã‹ã‘ã‚‹ã“ã¨ã¯ã§ãã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
目標ä½ç½®(x,y,z)ã«å¯¾ã—ã¦
ç¾åœ¨ã®ä½ç½®ã‚’dBodyGetPositionã§å–å¾—ã—ã¦å·®åˆ†ã‚’å–りãŸã„ã®ã§ã™ãŒï¼Žï¼Žï¼Ž
dBodyGetPositionã®ä¸èº«(行列?ベクトル?)ãŒã‚ã‹ã‚‰ãªã„ã®ã§è©°ã¾ã£ã¦ã—ã¾ã„ã¾ã—ãŸï¼ŽåŠ©ã‘ã¦ãã ã•~ã„ï¼
ã½ã£ãŸãƒ¼ã•ã‚“ã®æš–ã‹ã„コメントã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
励ã¿ã«ãªã‚Šã¾ã™ã€‚ã¾ãŸã€ã‚ã‹ã‚‰ãªã„ã¨ã“ã‚ãŒã‚ã£ãŸã‚‰ã‚³ãƒ¡ãƒ³ãƒˆãã ã•ã„。
ã¡ãªã¿ã«ã€ç§ã¯makeを猿ã®çµµãŒã‹ã‚ã„ã„?オライリージャパンã®GNU Makeã§å‹‰å¼·ã—ã¾ã—ãŸã€‚
ã½ã£ãŸãƒ¼ã§ã™ï¼Ž
ã§ã‚€ã•ん,アドãƒã‚¤ã‚¹ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
無事armãŒã‚³ãƒ³ãƒ‘イルã§ã,ã™ã„ã™ã„å‹•ã„ã¦ã„ã¾ã™ï¼Ž
æ£ç›´ï¼Œmakefileã®ã“ã¨ã£ã¦åˆ†ã‹ã‚‰ãªã„ã“ã¨ãŒå¤šã„ã‚“ã§ã™ã‚ˆã.
(ãれã˜ã‚ƒã‚,プãƒã‚°ãƒ©ãƒ を書ã„ã¦ã‚‚コンパイルã§ããªã„ã‹ã‚‰ï¼Œæ ¹æœ¬çš„ã«ã¾ãšã„ã‚“ã§ã™ãŒï¼Žï¼Žï¼Žï¼‰
ODEも,ã§ã‚€ã•ã‚“ã®ã‚µãƒ³ãƒ—ルファイルã¨å‡ºä¼šã£ã¦ãªã‹ã£ãŸã‚‰æ‰‹ã‚’出ã—ã¦ã„ãŸã‹ã©ã†ã‹ï¼Žï¼Žï¼Ž
第2回ã®ãƒãƒœã‚³ãƒ³ãƒžã‚¬ã‚¸ãƒ³ãŒæ¥½ã—ã¿ã«ã—ã¦ã¾ã™ã‚ˆï¼Ž
アドãƒã‚¤ã‚¹ï¼Œã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸï¼Ž
ã¾ãŸåˆ†ã‹ã‚‰ãªã„ã“ã¨ãŒã§ã¦ããŸã‚‰ï¼ŒãŠé¡˜ã„ã—ã¾ã™ï¼Ž
ãƒãƒƒã‚¿ãƒ¼ã•ã‚“
ãƒãƒœã‚³ãƒ³ãƒžã‚¬ã‚¸ãƒ³ã”æ„›èªã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸï¼Žï¼‘å›žç›®ã¯æ¦‚è¦ã¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã ã‘ã§ã—ãŸãŒï¼Œæ¬¡å›žã¯å‡ã£ãŸã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ を掲載ã—ã¾ã™ã®ã§æ¥½ã—ã¿ã«ã—ã¦ãã ã•ã„.
ã•ã¦ï¼ŒODE講座ã§ã¯é–‹ç™ºç’°å¢ƒã¨ã—ã¦cygwinを使ã£ã¦ã„ã¾ã—ãŸãŒï¼ŒODE-0.6ã§ã¯cygwinを使ã£ã¦ãƒ†ã‚¹ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ をコンパイルã§ããªã„ã®ã§mingwを使ã£ã¦ã„ã¾ã™ï¼Ž
ã¤ã¾ã‚Šï¼Œmingwを使ã†å ´åˆã¯ä»¥ä¸‹ã®mingw用ã®makefileを使ã£ã¦ãã ã•ã„.
ãŸã ã—,TARGETã®ã¨ã“ã‚ã¯ãƒ—ãƒã‚°ãƒ©ãƒ 毎ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼Žä¾‹ãˆã°sample.cをコンパイルã™ã‚‹å ´åˆã¯bunnyã§ã¯ãªãsampleã«å¤‰æ›´ã—ã¦ãã ã•ã„.
#mingw用 make file
CC = g++ -Wall -fno-exceptions -fno-rtti -g -DWIN32
TARGET = bunny
OBJS = $(TARGET).o
SOURCE = $(TARGET).c
HEADER =
WINDRES = windres
LIBS = -L../../drawstuff/src -L/usr/X11R6/lib -L/usr/local/lib -L/usr/lib/w32api/lib
INDS = -I. -I../../include -I/usr/X11R6/include -I/usr/include -I/usr/include/w32api/include
OPTS = -lode -ldrawstuff -lstdc++ -lcomctl32 -lkernel32 -luser32 -lgdi32 -lopengl32 -lglu32 -lwinmm -lm
#windows specification rule
RESOURCE_FILE= resources.o
$(TARGET):$(OBJS) $(RESOURCE_FILE) $(HEADER)
$(CC) -mwindows -o $@ $(OBJS) $(LIBS) $(INDS) $(OPTS) $(RESOURCE_FILE)
$(OBJS): $(SOURCE) $(HEADER)
$(CC) -c $(SOURCE) $(LIBS) $(INDS)
$(RESOURCE_FILE): ../../drawstuff/src/resources.rc ../../drawstuff/src/resource.h
$(WINDRES) $< -O coff $@
clean:
rm $(TARGET) $(OBJS) $(RESOURCE_FILE) *.*~ *~ *.exe *.*.stackdump
ãŠã²ã•ã—ã¶ã‚Šã§ã™ï¼Œã§ã‚€ã•ん.
ãƒãƒœã‚³ãƒ³ãƒžã‚¬ã‚¸ãƒ³èªã¿ã¾ã—ãŸã‚ˆï¼
ã•ã£ããODE-0.6ã«ãƒˆãƒ©ã‚¤ã—ã¦ï¼Œãƒ†ã‚¹ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ ã®èµ·å‹•ã¾ã§ã¯ç¢ºèªã§ãã¾ã—ãŸï¼Ž
ã§ã‚€ã•ã‚“ã®ã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ (arm)を試ãã†ã¨ã—ãŸã‚‰ã‚³ãƒ³ãƒ‘イルãŒã§ãã¾ã›ã‚“ã§ã—ãŸï¼Ž
ディレクトリã®ä½ç½®ãŒæ‚ªã„ã®ã‹ã¨æ€ã„ï¼Œè‰²ã€…å ´æ‰€ã‚’å¤‰ãˆã¦è©¦ã—ã¾ã—ãŸãŒã†ã¾ãã„ãã¾ã›ã‚“.
アドãƒã‚¤ã‚¹ãŠé¡˜ã„ã—ã¾ã™ï¼Ž
熱ä¸ç—‡ã«ã¯æ°—ã‚’ã¤ã‘ã¦ãã ã•ã„ã
ãŸã“ã‚„ãã•ã‚“
今日ã‹ã‚‰å¤å£ä¼‘暇ã«å…¥ã‚Šã¾ã—ãŸã€‚炎天下ã®ä¸ã€ãƒ†ãƒ‹ã‚¹ã‚’ã—ã¦é ãŒã‚¯ãƒ©ã‚¯ãƒ©ã—ã¾ã—ãŸã€‚
ã•ã¦ã€æŒ‡ã¨ç‰©ä½“ã®ã‚¸ã‚ªãƒ¡ãƒˆãƒªãŒåŒã˜ã‚¹ãƒšãƒ¼ã‚¹ã«å±žã—ã¦ã„れã°ã€dSpaceCollideã¨dSpaceCollide2ã¯å…¨ãåŒã˜ã§ã™ï¼ˆåŒã˜é–¢æ•°ã‚’呼ã³å‡ºã—ã¦ã¾ã™ï¼‰ã€‚ã§ã™ã‹ã‚‰dSpaceCollide2を試ã™å¿…è¦ã¯ã‚りã¾ã›ã‚“。
ODE0.5ã‚’ãŠä½¿ã„ã®å ´åˆã¯0.6ã«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã•ã‚Œã‚‹ã¨æ”¹å–„ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
ã§ã‚€ã•ã‚“
物体ã®ãƒžãƒ‹ãƒ”ュレーションを行ã†ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã§ã™ãŒï¼ŒæŒ‡ã¨ç‰©ä½“é–“ã®æŽ¥è§¦ãŒdSpaceCollideã§ã†ã¾ãã„ã‹ãªã‹ã£ãŸã‚‚ã®ã§ï¼ŒdSpaceCollide2ã®æ–¹ãŒé©ã—ã¦ã‚‹ã®ã‹ãªã¨æ€ã£ãŸæ¬¡ç¬¬ã§ã™ï¼Ž
ãŸã“ã‚„ãã•ã‚“
dSpaceCollide2ã®ä½¿ã„æ–¹ã®ã”質å•ã§ã™ãŒã€ã•ã—ã¤ã‹ãˆãªã‘れã°ã©ã®ã‚ˆã†ãªå ´é¢ã§ä½¿ç”¨ã—ãŸã„ã‹æ•™ãˆã¦ãã ã•ã„。
dSpaceCollideã§ã¯ãªãã€dSpaceCollide2を使用ã™ã‚‹çжæ³ã‚’知りãŸã„ã®ã§ã™ã€‚
ã¾ãŸã¾ãŸè³ªå•ã§ã™ã€‚
dSpaceCollide2ã®ä½¿ã„æ–¹ãŒã‚ˆãã‚ã‹ã‚Šã¾ã›ã‚“。
サンプルプãƒã‚°ãƒ©ãƒ ã§ã‚‚ã‚ã¾ã‚Šè¦‹å—ã‘られãªã„ã®ã§ã€‚
サンプルプãƒã‚°ãƒ©ãƒ ãªã©ã§ã©ã®ã‚ˆã†ã«
使ã†ã®ã‹æ•™ãˆã¦ã„ãŸã ã‘れã°å¹¸ã„ã§ã™ã€‚低レベルã®è³ªå•ã§ã™ã„ã¾ã›ã‚“。
ã§ã‚€ã•ん,解ç”ã—ã¦ã„ãŸã ãã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Žä»Šå¾Œã‚‚,ODEã§è©°ã¾ã£ãŸã‚‰è³ªå•ã•ã›ã¦ã„ãŸã ãã¨æ€ã†ã®ã§ã‚ˆã‚ã—ããŠé¡˜ã„ã—ã¾ã™ï¼Ž
ãŸã“ã‚„ãã•ん ã„ã¤ã‚‚見ã¦ãã ã•りã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
1.姿勢角ã«ã¤ã„ã¦
 dRFromEulerAnglesã®è§’ã¯å›ºå®šè§’ã§ã¯ãªã„ã‹ã¨ã®ã”質å•ã§ã™ãŒã€Z-Y-Xオイラー角ã§ã™ã€‚Z-Y-Xオイラー角ã«ã¤ã„ã¦ã¯Craig(三浦ã€å±±ä¸‹è¨³ã€å…±ç«‹å‡ºç‰ˆï¼‰ã®ãƒãƒœãƒ†ã‚£ã‚¯ã‚¹P45ã«è¨˜è¿°ãŒã‚ã‚‹ã®ã§å‚考ã«ã—ã¦ãã ã•ã„。ãªãŠã€ã“ã®APIã¯Z-Y-Xオイラー角ã‹ã‚‰å›žè»¢è¡Œåˆ—を求ã‚ã‚‹ã‚‚ã®ã§ã™ã€‚ode/ode/src/ratation.cppã«dRFromEulerAnglesã®ã‚³ãƒ¼ãƒ‰ãŒã‚ã‚‹ã®ã§ã€ãれを見るã¨Z-Y-Xオイラー角ã‹ã‚‰å›žè»¢è¡Œåˆ—を求ã‚ã‚‹å¼ã«ãªã£ã¦ã„ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚
2. LCP internal errorã«ã¤ã„ã¦
行列ãŒç‰¹ç•°è¡Œåˆ—ã«ãªã£ã¦ã„ã‚‹ãªã©LCPã‚’è§£ã‘ãªã„å ´åˆã«ã“ã®ã‚¨ãƒ©ãƒ¼ãŒã§ã¾ã™ã€‚制約ãŒçŸ›ç›¾ã—ã¦ã„ãŸã‚Šã€å†—é•·ãªå ´åˆã«è¡Œåˆ—ãŒç‰¹ç•°ã«ãªã‚‹ã®ã§ã€é–¢ç¯€ã‚„æŽ¥è§¦ç‚¹ã®æ•°ã‚’減らã›ã°é˜²ã’ã‚‹å¯èƒ½æ€§ãŒé«˜ã„ã§ã™ã€‚
ã¾ãŸã€è¨ˆç®—精度も関係ãŒã‚ã‚‹ã®ã§ODEã®è¨å®šãŒå˜ç²¾åº¦ãªã‚‰å€ç²¾åº¦ã«å¤‰æ›´ã™ã‚‹ã¨æ”¹å–„ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
ã•らã«ã€CFMã®å€¤ã‚’å¢—åŠ ã•ã›ã‚‹ã¨æ”¹å–„ã™ã‚‹å ´åˆãŒå¤šã„ã§ã™ã€‚
以上ã§ã™ã€‚
ã§ã‚€ã•ん,ã¯ã˜ã‚ã¾ã—ã¦ï¼Žã“ã®ï¼”月ã‹ã‚‰ODEを勉強ã—å§‹ã‚ãŸã‚‚ã®ã§ã™ï¼Žã“ã®ã‚µã‚¤ãƒˆã¯ï¼Œç ”ç©¶ã®å‚考ã«ãªã‚‹ã®ã§ã„ã¤ã‚‚興味深ã,æ‹è¦‹ã•ã›ã¦ã‚‚らã£ã¦ã„ã¾ã™ï¼Ž
ã•ã£ãã質å•ã§ã™ï¼Ž
1.姿勢角ã®è¨å®šã«ã¤ã„ã¦
dRFromEulerAngles(dMatirix3R ,dReal phi,dReal theta,dReal psi);
ã§å®šç¾©ã•れる姿勢角ã¯ï¼Œé–¢æ•°åã«åã—ã¦ï¼Œã‚ªã‚¤ãƒ©ãƒ¼è§’ã§ã¯ãªã,固定角ãªã®ã§ã¯ãªã„ã‹ï¼Ÿã¨ã„ã†ç–‘å•.実験ã—ã¦ã¿ãŸã¨ã“ã‚,基準座標系ã§ã®å›žè»¢ã«ãªã£ã¦ã„ãŸã‚“ã§ï¼Ž
ã„ã‚ゆるâ€å›žè»¢åº§æ¨™ç³»â€ã§ã®å§¿å‹¢è§’ã¯ã©ã®ã‚ˆã†ã«è¡¨ç¾ã—ãŸã‚‰ã„ã„ã‚“ã§ã—ょã†ã‹ï¼Ÿ
2.エラーメッセージ
ç‰©ä½“é–“ã®æŽ¥è§¦ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’è¡Œã†ã¨ã,以下ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå‡ºã¦ã†ã¾ãシミュレーションãŒã§ãã¾ã›ã‚“.解決ç–ãŒã‚れã°ã”教示ãŠé¡˜ã„ã—ã¾ã™ï¼Ž
ODE Message 3: LCP internal error, s <= 0 (s=0.0000e+000)
ã¯ã˜ã‚ã¾ã—ã¦ã€‚å’ç ”ã§4月よりODEを勉強ã—å§‹ã‚ãŸè€…ã§ã™ã€‚
ã•ã£ãã質å•ãªã‚“ã§ã™ãŒã€ç‰©ä½“é–“ã®æŽ¥è§¦ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’è¡Œã†éš›ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå‡ºã¦ã†ã¾ãã§ãã¾ã›ã‚“。物体ãŒãµã£é£›ã‚“ã り。。。ã©ã®ã‚ˆã†ã«è§£æ±ºã™ã‚Œã°ã„ã„ã®ã§ã—ょã†ã‹?
ODE Message 3: LCP internal error, s <= 0 (s=-0.0000e+00)
ã§ã‚€ã•ã‚“ã¯ã˜ã‚ã¾ã—ã¦ã€‚
halitiã¨ã„ã„ã¾ã™ã€‚
ã“ã®ãƒšãƒ¼ã‚¸ã®ãŠã‹ã’ã§ODEã®åŸºæœ¬çš„ãªä½¿ã„æ–¹ãŒåˆ†ã‹ã‚Šã€å¤§å¤‰åŠ©ã‹ã£ã¦ãŠã‚Šã¾ã™ã€‚
ã•ã£ãã質å•ãªã®ã§ã™ãŒã€ç§ã¯ODEを使ã£ã¦åŠ›åˆ¶å¾¡ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã—ãŸã„ã¨
考ãˆã¦ã„ã‚‹ã®ã§ã™ãŒã€æŽ¥è§¦åŠ›ã‚„åœ§åŠ›ãªã©ã®æƒ…å ±ã‚’å–å¾—ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãŒã©ã†ã‚‚見当
ãŸã‚Šã¾ã›ã‚“(マニュアルã«ï¼‰ã€‚ãŸã 見è½ã¨ã—ã¦ã„ã‚‹ã ã‘ã§ã—ょã†ã‹ï¼Ÿ
åŠ›æƒ…å ±ã®å–å¾—ã‚„ã€ä½•ã‹ãã‚Œã«æº–ã˜ã‚‹æ–¹æ³•ãŒã‚ã‚Œã°æ•™ãˆã¦ã„ãŸã ããŸã„ã§ã™ã€‚
よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚
ã†ãˆã®ã€€ã•ã‚“
ãŠã²ã•ã—ã¶ã‚Šã§ã™ã€‚
è¡çªæ¤œå‡ºã«é–¢ã—ã¦ã¯ODE講座15ã§èª¬æ˜Žã—ã¾ã™ã®ã§ãれをã”覧ãã ã•ã„。
ãŠä¹…ã—ã¶ã‚Šã§ã™ï¼
ç§ã®ç’°å¢ƒã ã¨ã€
test_moving_trimesh.cppã§ãƒˆãƒ©ã‚¤ãƒ¡ãƒƒã‚·ãƒ¥ã«ã‚ˆã‚‹
ã†ã•ãŽã‚’è½ä¸‹ã•ã›ãŸæ™‚ã€åœ°é¢ã‚’通éŽã—ã¦ã—ã¾ã„ã¾ã™ãŒ
ã“れã§ãŠã‹ã—ããªã„ã®ã§ã—ょã†ã‹ï¼Ÿ
ä»–ã®åŸºæœ¬ã‚¯ãƒ©ã‚¹ï¼ˆãƒœãƒƒã‚¯ã‚¹ã‚„ã€çƒãªã©ï¼‰ã‚’
è½ã¨ã—ãŸå¾Œåœ°é¢ã«è»¢ãŒã£ã¦ã‚‹åŸºæœ¬ã‚¯ãƒ©ã‚¹ã«
ã†ã•ãŽã‚’è½ã¨ã™ã¨ã—ã£ã‹ã‚Šè¡çªã—ãŸæŒ™å‹•ã‚’
見ã›ã¾ã™ãŒã€åœ°é¢ã®å ´åˆã¯é€šã‚ŠæŠœã‘ã¦ã—ã¾ã„ã¾ã™ã€‚
ã“ã®ã¨ãã€test_trimesh_moving.cpp内ã®
基本クラスã¨åœ°é¢ã®é•ã„ã¯ä½•ã§ã—ょã†ã‹ï¼Ÿ
(見ãŸã¨ã“ã‚ã€åœ°é¢ãŒGeometryã®ã¿ã§
基本クラスã¯Geometry+Bodyã¨ã„ã†
é•ã„ã—ã‹ã‚ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚)
å‰å›žå¾¡æŒ‡æ‘˜ã„ãŸã ã„ãŸã€
・トライメッシュã«ãƒœãƒ‡ã‚£ãƒ¼ã‚’ã¤ã‘ã‚‹
・è¡çªç‚¹ã®æœ€å¤§æ•°ã¯å¤§ããã™ã‚‹ã€‚(200ã«ã—ã¾ã—ãŸï¼‰
ã¨ã„ã†æ‰€ã¯ç›´ã—ã¦ã¿ã¾ã—ãŸã€‚
ã‚„ã‚ã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ã¯ã€åŸºæœ¬ã‚¯ãƒ©ã‚¹ï¼ˆãƒœãƒƒã‚¯ã‚¹ï¼‰
上ã§
トライメッシュクラスã®ç‰©ä½“ã®è¡çªèªè˜ã§ã™ã€‚
以上ã€ç›¸å½“åˆæ©çš„ãªè³ªå•ã§ã™ãŒã‚ˆã‚ã—ã御願ã„ã—ã¾ã™ã€‚
AKã•ん 質å•ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
ã•ã¦ï¼Œï¼‘番目ã®ã”質å•ã«é–¢ã—ã¦ã¯ODE講座14ã«ã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ を作り回ç”ã„ãŸã—ã¾ã—ãŸï¼Žç§ã‚‚é‡å¿ƒã‚’移動ã—ãŸçµŒé¨“ãŒãªã‹ã£ãŸã®ã§ã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ ã¯è©¦è¡ŒéŒ¯èª¤ã‚’é‡ãã¦ã¤ãりã¾ã—ãŸï¼Žå•題ãŒã‚ã‚Œã°æ•™ãˆã¦ãã ã•ã„.
2番目ã®ã”質å•ã«é–¢ã—ã¦ã¯ã©ã¡ã‚‰ã‚‚åŒã˜ã‚‚ã®ã§ã™ï¼Žè³ªé‡ãƒ‘ラメータã«ã¯æ…£æ€§ãƒ†ãƒ³ã‚½ãƒ«ã‚‚ã‚ã‚‹ã®ã§å˜ãªã‚‹è³ªç‚¹ã¨ã„ã†ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“.
å‚考ã¾ã§ã«ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’以下ã«ç¤ºã—ã¾ã™ï¼Ž
void dMassSetBox (dMass *m, dReal density,
dReal lx, dReal ly, dReal lz)
{
dMassSetBoxTotal (m, lx*ly*lz*density, lx, ly, lz);
}
void dMassSetBoxTotal (dMass *m, dReal total_mass,
dReal lx, dReal ly, dReal lz)
{
dMassSetZero (m);
m->mass = total_mass;
m->_I(0,0) = total_mass/REAL(12.0) * (ly*ly + lz*lz);
m->_I(1,1) = total_mass/REAL(12.0) * (lx*lx + lz*lz);
m->_I(2,2) = total_mass/REAL(12.0) * (lx*lx + ly*ly);
}
å‚考ã«ãªã‚Œã°ãƒãƒƒãƒ”ーã§ã™ï¼Ž
ã¯ã˜ã‚ã¾ã—ã¦ï¼Œã§ã‚€æ§˜ï¼Ž
ã“ã®ã‚µã‚¤ãƒˆã‚’å‚考ã«ODEã®å‹‰å¼·ã‚’ã•ã›ã¦é ‚ã„ã¦ãŠã‚Šã¾ã™ã€‚
æ—©é€Ÿã§æç¸®ãªã®ã§ã™ãŒã€ã„ãã¤ã‹åˆ†ã‹ã‚‰ãªã„ã“ã¨ãŒã‚ã‚‹ã®ã§è³ªå•ã•ã›ã¦ãã ã•ã„。
1.boxã‚„sphereç‰ã®ç‰©ä½“ã®é‡å¿ƒã‚’
dBodySetPosition ()
ã§æŒ‡å®šã—ãŸåº§æ¨™ã‹ã‚‰ç§»å‹•ã•ã›ã‚‹ç‚ºã«
dMassTranslate (dMass *, dReal x, dReal y, dReal z);
ã‚’mainæ–‡ã®ä¸ã§ä½¿ç”¨ã—ãŸã®ã§ã™ãŒï¼Œé‡å¿ƒãŒç§»å‹•ã—ã¦ãれã¾ã›ã‚“.一応
dBodyGetMass ()
を用ã„ã¦é‡å¿ƒã®æƒ…å ±ã‚’èª¿ã¹ãŸã¨ã“ã‚,ã“ã“ã‹ã‚‰å¾—られãŸå€¤ã®ä¸Šã§ã¯Translateã—ãŸã¨ã“ã‚ã«é‡å¿ƒãŒç§»å‹•ã—ã¦ã„るよã†ãªã®ã§ã™ãŒï¼Œæ€ªã—ã‹ã£ãŸã®ã§ï¼Œ
dBodyGetPosition ()
ã§æŒ‡å®šã—ãŸåº§æ¨™(linkフレームã®åŽŸç‚¹)ã«ä¸¦é€²åŠ›ã‚’åŠ ãˆãŸã¨ã“ã‚ï¼ŒåŠ›ã‚’åŠ ãˆãŸæ–¹å‘ã«ç‰©ä½“ãŒå¹³è¡Œç§»å‹•ã—ã¦ã—ã¾ã„ã¾ã—ãŸï¼ˆé‡å¿ƒã‚’移動ã•ã›ã¦ã„ã‚‹ã®ã§å›žè»¢ã™ã‚‹ã¯ãšãªã‚“ã§ã™ã‘ã©ï¼‰ï¼Ž
dMassTranslate ()
を使ã£ã¦é‡å¿ƒã‚’移動ã•ã›ã‚‹ã«ã¯ã©ã†ã—ãŸã‚‰è‰¯ã„ã®ã§ã—ょã†ã‹ï¼Ÿï¼ˆã²ã‚‡ã£ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ç‚ºã®æ¡ä»¶ã¿ãŸã„ãªã‚‚ã®ãŒã‚ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿï¼‰
2.Boxç‰ã‚’è¨å®šã™ã‚‹éš›ã«ä»¥ä¸‹ã®
dMassSetBox (dMass *, dReal density, dReal lx, dReal ly, dReal lz);
dMassSetBoxTotal (dMass *, dReal total_mass, dReal lx, dReal ly, dReal lz);
を用ã„ã‚‹ã¨æ€ã†ã®ã§ã™ãŒï¼ŒdMassSetBoxï¼ˆï¼‰ã®æ–¹ã¯densityを,dMassSetBoxTotal()ã¯total_massã‚’è¨å®šã™ã‚‹ã¨ã„ã†ç‚¹ã§ã“ã®ï¼’ã¤ã¯ç•°ãªã£ã¦ã„ã¾ã™ãŒï¼Œã“れã¯dMassSetBoxï¼ˆï¼‰ã®æ–¹ã¯è³ªé‡ãŒåˆ†å¸ƒã—ã¦ã„ã‚‹ã‚‚ã®ã¨ã—ã¦è€ƒãˆï¼ŒdMassSetBoxTotalï¼ˆï¼‰ã®æ–¹ã¯æŒ‡å®šã—ãŸåº§æ¨™ã«è³ªç‚¹ï¼ˆç‰©ä½“を質点ã¨ã—ã¦è€ƒãˆã‚‹ï¼Ÿï¼‰ãŒã‚ã‚‹ã¨ã„ã†è€ƒãˆæ–¹ã§å®œã—ã„ã®ã§ã—ょã†ã‹ï¼Ÿ
é•·ããªã£ã¦ç”³ã—訳ã”ã–ã„ã¾ã›ã‚“.
ãŠå¿™ã—ã„ã¨ã¯æ€ã„ã¾ã™ãŒï¼ŒãŠç”ãˆé ‚ã‘ãŸã‚‰å¹¸ã„ã§ã™ï¼Žå®œã—ããŠé¡˜ã„致ã—ã¾ã™ï¼Ž
コーエイã•ん,
ã”質å•ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
ã•ã¦ï¼ŒODEã§ã¯é–¢ç¯€ã«è§’度を直接指定ã™ã‚‹APIã¯ãªã„ã¨æ€ã„ã¾ã™ï¼Žå¾¡è‡ªåˆ†ã§PD制御ãªã©ã‚’ã—ã¦è§’度を制御ã—ã¦ãã ã•ã„.
ã¾ãŸï¼ŒAMotorã¯æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã§è§’速度を指定ã©ãŠã‚Šã«ã—ã¾ã™ï¼Žå˜ç‹¬ã§ä½¿ç”¨ã™ã‚‹ã®ã§ã¯ãªã,他ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã—ã¾ã™ï¼Žä¾‹ãˆã°ï¼Œï¼’ã¤ã®ãƒœãƒ‡ã‚£ã‚’ボールジョイントã§çµåˆã—,ãã“ã«AMotorを付ã‘ãŸã„å ´åˆï¼Œãã®ï¼’ã¤ã®ãƒœãƒ‡ã‚£ã‚’ボールジョイントã§çµåˆã—ã¦ã‹ã‚‰ï¼Œãã®åŒã˜ï¼’ã¤ã®ãƒœãƒ‡ã‚£ã‚’AMotorã§çµåˆã—ã¾ã™ï¼ŽODEã®ãƒ†ã‚¹ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ test_joints.cppã®ã‚½ãƒ¼ã‚¹ã‚’å‚考ã«ã™ã‚‹ã¨ã§ãã‚‹ã¨æ€ã„ã¾ã™ï¼Ž
以下ã¯ä¾‹ã§ã™ï¼Žãã®ã†ã¡é€£è¼‰ã«ã‚¢ãƒƒãƒ—ã—ã¾ã™ï¼Ž
// make and set a ball joint
joint = dJointCreateBall(world,0);
dJointAttach(joint,body[0],body[1]);
jointSetBallAnchor(joint,anchor_x,anchor_y,anchor_z);
// make and set a AMotor
motor = dJointCreateAMotor(world,0);
dJointAttach(motor,body[0],body[1]);
dJointSetAMotorNumAxes(motor,3);
dJointSetAMotorAxis(motor,0,1,0,0,1);
dJointSetAMotorAxis(motor,1,2,0,1,0);
dJointSetAMotorAxis(motor,2,2,1,0,0);
dJointSetAMotorMode(motor,dAMotorEuler);
ã§ã‚€ã•ã‚“ ã¯ã˜ã‚ã¾ã—ã¦ï¼Žã‚³ãƒ¼ã‚¨ã‚¤ã¨ã„ã„ã¾ã™ï¼Ž
昨年暮れã‚ãŸã‚Šã‹ã‚‰ï¼Œã§ã‚€ã•ã‚“ã®ãƒ›ãƒ¼ãƒ ページをå‚考ã«ODEã®å‹‰å¼·ã‚’ã—ã¦ãã¾ã—ãŸï¼Ž
最近,実際ã«ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’行ã£ã¦ã„ã‚‹ã‚“ã§ã™ãŒï¼Œã¡ã‚‡ã£ã¨å•題ãŒç”Ÿã˜ã¾ã—ãŸã®ã§è³ªå•ã•ã›ã¦ãã ã•ã„.
・2ã¤ã®ãƒªãƒ³ã‚¯ã‚’ヒンジã§ã¤ãªãŽï¼Œãã“ã«ã‚る周期をæŒã£ãŸè§’速度を与ãˆã¦ã„ã¾ã™ï¼Žã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã—ã¦ã¿ã‚‹ã¨è§’é€Ÿåº¦ã¯æ£ã—ã入力ã•れã¦ã„ã‚‹ã®ã§ã™ãŒï¼Œè§’度ã®ã»ã†ãŒä¸€è‡´ã—ã¾ã›ã‚“.ãã“ã§ï¼Œãƒ’ンジã«è§’速度ã§ãªã角度を入力ã—よã†ã¨æ€ã„ã¾ã—ãŸãŒï¼Œã“れã¯ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’見ã¦ã‚‚書ã„ã¦ãªã„(見è½ã¨ã—?)ã®ã‚ˆã†ã§ã™ï¼Ž
何ã‹ã„ã„æ–¹æ³•ã¯ãªã„ã§ã—ょã†ã‹ï¼Ÿ
・ã¾ãŸï¼ŒAMotorã®ä½¿ç”¨æ–¹æ³•ãŒã‚ˆã分ã‹ã‚‰ãªã„ã®ã§ã™ï¼Žãƒ’ンジãªã©ã¨åŒæ§˜ã«é–¢ç¯€ã¨ã—ã¦ä½¿ç”¨ã™ã‚Œã°ã‚ˆã„ã®ã§ã—ょã†ã‹ï¼Ÿ
å¿™ã—ã„ä¸å¤§å¤‰ã ã¨æ€ã„ã¾ã™ãŒï¼Œã‚ˆã‚ã—ããŠé¡˜ã„ã—ã¾ã™ï¼Ž
KOEDAã•ん. ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
ç§ã®ã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ ã§ã¯ã‚·ãƒ³ãƒ—ルã«ã™ã‚‹ãŸã‚ã«staticを関数ã®å‰ã«ã¤ã‘ã¦ã„ãªã„å ´åˆãŒå¤šã„ã®ã§ã™ãŒï¼Œã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã‚„関数ã®å‰ã«ã¯staticを付ã‘ã¦ãれらをãã®ãƒ•ァイル内ã®ã¿ã§æœ‰åйã«ã—ã¦ãã ã•ã„.
KOEDAã§ã™ã€‚
ã”æŒ‡æ‘˜ã®ã¨ãŠã‚Šã€ è¡çªç‚¹ã®ä¸Šé™Nã«staticã‚’ã¤ã‘ãŸã‚‰ç—‡çŠ¶ã¯æ”¹å–„ã—ã¾ã—ãŸã€‚
ã§ã‚€ã•ん,ã½ã£ãŸãƒ¼ã§ã™ï¼Ž
ãŠè¿”事ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
çµå±€ï¼Œè§£æ±ºæ–¹æ³•ã¨ã—ã¦ã¯ï¼Œ
粘性摩擦係数ã¿ãŸã„ãªã‚‚ã®ã‚’è¨å®šã™ã‚‹
ãれã«å¿œã˜ãŸé€†æ–¹å‘ã®ãƒˆãƒ«ã‚¯ã‚’åŠ ãˆã‚‹
ã§ã™ã.
マニュアルã«ãªã„ã®ã§ï¼Œè‡ªåŠ›ã§è¨å®šã™ã‚‹ã®ã‹ï¼Œãれã¨ã‚‚見è½ã¨ã—ãªã®ã‹æ°—ã«ãªã£ã¦è³ªå•ã—ã¾ã—ãŸï¼Ž
ã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸï¼Ž
ペンギンã•ん.ã¯ã˜ã‚ã¾ã—ã¦ï¼Žã€€ãƒšãƒ³ã‚®ãƒ³ã¨ã„ã†ã“ã¨ã¯Linux使ã„ã§ã™ã‹ï¼Ÿ
ã•ã¦ï¼Œå‰›ä½“振りåã®å‘¨æœŸãŒç†è«–値ã¨1/100ãšã‚Œã‚‹ã¨ã„ã†ã“ã¨ã§ã™ãŒï¼Œã“れã ã‘ã§ã¯æƒ…å ±ãŒå°‘ãªãã¦ã‚ˆãã‚ã‹ã‚Šã¾ã›ã‚“.
ERP=1.0, CFM=0.0ã«è¨å®šã—ã¦ãƒ†ã‚¹ãƒˆãŠé¡˜ã„ã—ã¾ã™ï¼Ž
ã¯ãšã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒé«˜ã„ã§ã™ãŒï¼ŒCFMãŒ0.0ã§ãªã„ã¨å‰›ä½“ã§ã¯ãªã„ã®ã§ï¼Œã“れãŒåŽŸå› ã ã¨ã‚ˆã„ã®ã§ã™ãŒï¼Ž
çµæžœã‚’æ•™ãˆã¦ãã ã•ã„.
ãƒãƒƒã‚¿ãƒ¼ã•ん.
粘性摩擦をè¨å®šã§ãã‚‹ã‹ã¨ã„ã†ã“ã¨ã§ã™ãŒï¼ŒAPIã«ã¯ãã®ã‚‚ã®ã‚ºãƒãƒªã¯ãªã„ã¨æ€ã„ã¾ã™ï¼Ž
自分ã§ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹ã‹ï¼Œé–¢ç¯€ã®å›žè»¢æ–¹å‘ã¨ã¯é€†ã«ãŠæœ›ã¿ã®ãƒˆãƒ«ã‚¯ã‚’ã‹ã‘る方法ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ï¼Žã“ã®æ–¹æ³•ã§ã¯ã ã‚ã§ã™ã‹ï¼Ÿ
ã¯ã˜ã‚ã¾ã—ã¦ã€‚
自分もODEを使ã£ã¦éŠã‚“ã§ã„ã¾ã™ã€‚
ãã“ã§è³ªå•ã§ã™ã€‚
剛体振りåを作ã£ã¦ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã—ãŸã®ã§ã™ãŒã€å‘¨æœŸãŒç†è«–値ã¨ã¯1/100精度ã§ãšã‚Œã¦ã§ã¦ãã¾ã™ã€‚シミュレーションã®ã‚¹ãƒ†ãƒƒãƒ—サイズを変ãˆã¦ã‚‚ãšã‚ŒãŒèµ·ã“りã¾ã™ã€‚ã“れã¯ãªãœãªã®ã§ã—ょã†ã‹ï¼Ÿ
ã§ã‚€ã•ん,ã“ã‚“ã«ã¡ã‚.ã½ã£ãŸãƒ¼ã§ã™ï¼Ž
説明ã®è¶³ã‚Šãªã„質å•ã‚’ã—ã¦ã™ã¿ã¾ã›ã‚“.
質å•ã®å†…容ã¯ï¼Œ
例ãˆã°2リンクã®ã‚¢ãƒ¼ãƒ を作るã¨ã—ã¦ï¼Œãƒªãƒ³ã‚¯åŒå£«ã‚’接続ã™ã‚‹é–¢ç¯€ã¨ã—ã¦Hingeジョイントをè¨å®šã—ãŸã¨ã—ã¾ã™ï¼Ž
ã“ã®ã¨ãã®é–¢ç¯€ã«ç²˜æ€§æ‘©æ“¦ã‚’è¨å®šã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã—ょã†ã‹ï¼Ÿ
KOEDAã•ん.ã¯ã˜ã‚ã¾ã—ã¦ï¼Ž
è²´é‡ãªã‚³ãƒ¡ãƒ³ãƒˆã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
ç§ã®ç’°å¢ƒã§ã¯sample3ã§ãã®ã‚ˆã†ãªç—‡çжã¯ã§ã¾ã›ã‚“ã§ã—ãŸãŒï¼Œåˆ¥ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã§ã¯KOEDAã•ã‚“ã¨åŒã˜ã‚ˆã†ãªç—‡çжãŒã§ã¾ã—ãŸï¼Ž
nearCallbacké–¢æ•°ã®æŽ¥è§¦ç‚¹æ•°ã®è¡Œã«ä»¥ä¸‹ã®ã‚ˆã†ã«staticを付ã‘ã¦ã¿ã¦ãã ã•ã„.
static const int N = 10;  // 接触点数ã®ä¸Šé™ã¯ï¼‘ï¼å€‹
ç§ã¯ã“れã§ç›´ã‚Šã¾ã—ãŸï¼Žã¡ãªã¿ã«sample3ã§ã¯æŽ¥è§¦ç‚¹æ•°ãŒãŸã‹ã ã‹ï¼‘個ãªã®ã§ï¼‘ï¼å€‹ã‚‚å¿…è¦ã‚りã¾ã›ã‚“ã§ã—ãŸï¼Ž
KOEDAã•ん,ã™ã¿ã¾ã›ã‚“ãŒstaticを付ã‘ã¦ç—‡çŠ¶ãŒæ”¹å–„ã™ã‚‹ã‹æ•™ãˆã¦é ‚ã‘ã¾ã›ã‚“ã‹ï¼Ÿã“ã¡ã‚‰ã§ã¯ç—‡çжãŒã§ãªã„ã®ã§ã‚ˆã‚ã—ããŠé¡˜ã„ã—ã¾ã™ï¼Ž
ç§ã‚‚最近勉強を始ã‚ã¾ã—ãŸã€‚
ã†ã‚Šã¼ã†ã•ã‚“ã¨åŒæ§˜ã«
å発係数を変ãˆã¦ã‚‚ãƒã‚¦ãƒ³ãƒ‰ã—ã¾ã›ã‚“ã§ã—ãŸãŒã€
è¡çªç‚¹æ•°Nã®æ•°ã‚’減らã—ã¦ã¿ãŸã‚‰
ãƒã‚¦ãƒ³ãƒ‰ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚
環境ã¯ã§ã‚€å…ˆç”Ÿã¨åŒã˜
CYGWIN_NT5.1+Windows XP,
gcc 3.4.4,ODE0.5
ã§ã™ã€‚
ãƒãƒƒã‚¿ãƒ¼ã•ん ã“ã‚“ã«ã¡ã¯ï¼Ž
Hingeジョイントã«ãŠã„ã¦ç‰©ä½“é–“ã®æ‘©æ“¦ã¨ã¯ã©ã®ã‚ˆã†ãªæ„味ã§ã™ã‹ï¼Ÿã€€ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã¯ï¼¯ï¼¤ï¼¥ã§ã¯å®Ÿä½“ã®ãªã„拘æŸã§ã™ï¼Žã“ã®ç‰©ä½“é–“ã¨ã¯ï¼Œã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã«ã‚ˆã£ã¦æŽ¥ç¶šã•れã¦ã„るリンクåŒå£«ã®ã“ã¨ã§ã™ã‹ï¼Ÿã€€ãれã¨ã‚‚ジョイントã«ãƒãƒã¨ãƒ€ãƒ³ãƒ‘を組ã¿è¾¼ã¿ãŸã„ã¨ã„ã†ã“ã¨ã§ã—ょã†ã‹ï¼Ÿ
ã‚‚ã†å°‘ã—,具体的ã«èª¬æ˜Žã‚’ãŠé¡˜ã„ã—ã¾ã™ï¼Ž
ã§ã‚€ã•ん,ã¾ãŸã¾ãŸODEã§ã¤ã¾ã¥ã„ãŸã®ã§åŠ©ã‘ã¦ãã ã•ã„.
質å•ã§ã™ãŒï¼Œä¾‹ãˆã°Hingeジョイントã«ãŠã„ã¦ï¼Œ
ç‰©ä½“é–“ã®æ‘©æ“¦ãªã©ã‚’è¨å®šã—ãŸã„å ´åˆã¯
ã©ã®ã‚ˆã†ã«ã—ãŸã‚‰ã„ã„ã§ã—ょã†ã‹ï¼Ÿ
マニュアルを見ãŸã¨ã“ã‚,Contactジョイントã¯
è¨å®šãŒã‚りãã†ã§ã™ãŒï¼Œãã®ä»–ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã«ã¤ã„ã¦
分ã‹ã‚‰ãªã„ã®ã§æ•™ãˆã¦ãã ã•ã„.
MR2ã§ã™ã€‚
ãŠè¿”事ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
質å•ã—ãŸã“ã¨ã¨ã¯åˆ¥ã®ã¨ã“ã‚ã§ã¤ã¾ã¥ã„ã¦ã—ã¾ã„ã¾ã—ã¦ã€
ã¾ã ã©ã¡ã‚‰ã®ã“ã¨ã‚‚試ã›ã¦ã„ã¾ã›ã‚“ãŒã€
ãªã‚‹ã¹ãè¿‘ã„ã†ã¡ã«è©¦ãã†ã¨æ€ã£ã¦ã„ã¾ã™ã€‚
今回ã¯ä¸å¯§ãªãŠè¿”事ã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸã€‚
ã¾ãŸè³ªå•ãŒã§ããŸã¨ãã«ã¯ã”相談ã«ã®ã£ã¦ã„ãŸã ã‘ã‚‹ã¨ã†ã‚Œã—ã„ã§ã™ã€‚
ã§ã‚€æ§˜
ã”å›žç”æœ‰é›£ã†å¾¡åº§ã„ã¾ã—ãŸã€‚
ODEã®ãƒ•ォーラムãªã©ã‚’見ã¦ã‚‚ã€åŒã˜ã‚ˆã†ãªè³ªå•ã‚’ã—ã¦ã„ã‚‹æ–¹ãŒã„らã£ã—ゃã£ãŸã®ã§ã™ãŒã€
明確ãªå›žç”ãŒãªã„ã¾ã¾ã«ãªã£ã¦ã„ã¾ã—ãŸã€‚
Trimeshã«ã¤ã„ã¦è©³ã—ãæŠŠæ¡ã—ã¦ã„ã‚‹æ–¹ã¯ã‚ã¾ã‚Šã„らã£ã—ゃらãªã„よã†ã§ã™ã€‚
ç¾åœ¨ç§ãŒå–り組んã§ã„ã‚‹ã‚‚ã®ã¯æ—©æ€¥ã«ä»•上ã’ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã®ã§ã€
ã”回ç”ã‚’ãŠå¾…ã¡ã™ã‚‹ã®ã¨ä¸¦è¡Œã—ã¦ã€
別ã®ç‰©ç†å¦ãƒ©ã‚¤ãƒ–ラリPhysXã«å–り組んã§ã„ã¾ã—ãŸã€‚
ç¾åœ¨ã®ä½œæ¥ãŒè½ã¡ç€ã次第ã€MLã«è³ªå•ã—ãŸã‚Šã€è‡ªåˆ†ã§ã‚½ãƒ¼ã‚¹ã‚’見ã¦ã¿ãŸã‚Šã—ã¦ã¿ãŸã„ã¨æ€ã„ã¾ã™ã€‚
ä½•ã‹æœ‰ç›Šãªã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã—ãŸã‚‰ã€
ã¾ãŸã“ã¡ã‚‰ã«æ›¸ãè¾¼ã¾ã›ã¦é ‚ããŸã„ã¨æ€ã„ã¾ã™ã€‚
ã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸã€‚
KKã•ん. Trimeshè¡çªã®è³ªå•ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
Trimeshã®è¡çªã«é–¢ã—ã¦ã¯è©³ã—ãã‚りã¾ã›ã‚“ã§ã®å›žç”ã§ãã¾ã›ã‚“.ODEã®mailing listã«ã§ã‚‚èžã„ã¦ã¿ã‚Œã°ã„ã‹ãŒã§ã—ょã†ã‹ï¼Ÿ
ã”ã‚ã‚“ãªã•ã„.
MR2ã•ん.質å•ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Žæ™®æ®µï¼Œã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã§ã¯ã‚ã¾ã‚Šæ‹˜æŸã¯ã‹ã‘ãªã„ã®ã§å‹‰å¼·ã«ãªã‚Šã¾ã™ï¼Ž
1.ボディã¨static environmentã¨ã‚’ジョイントã§çµåˆã™ã‚‹æ–¹æ³•ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ï¼Žå…·ä½“çš„ã«ã¯dJointAttach(jointID, body1, 0);ã¨ã—ã¾ã™ï¼Ž0ã¯static environmentを指ã—ã¾ã™ï¼Ž
効果ã¨ã—ã¦ã¯ï¼Œanchorã®ä½ç½®ã§ãƒœãƒ‡ã‚£ãŒãã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã¨çµåˆã•れるã®ã§ï¼Œç©ºä¸ã§å††æŸ±ã‚’回転ã•ã›ã‚‹ã“ã¨ãªã©ãŒã§ãã¾ã™ï¼Ž
2. ãã†ã§ã™ã.ã§ã¯ï¼Œè§’速度をåŒã˜ã«è¨å®šã™ã‚Œã°ã‚ˆã„ã®ã§ã¯ãªã„ã§ã™ã‹ï¼Žãã®å ´åˆï¼Œå„軸ã«AMotorã‚’è¨å®šã—ã¦ãã ã•ã„.AMotorã‚’è¨å®šã™ã‚‹ã¨æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ç›®æ¨™è§’速度ã«è¨å®šã•れã¾ã™ã®ã§ãŠæœ›ã¿ã®ã“ã¨ãŒã§ãã‚‹ã‹ã¨æ€ã„ã¾ã™ï¼Ž
ã”å‚考ã«ãªã‚Œã°å¹¸ã„ã§ã™ï¼Ž
MR2ã§ã™ã€‚
ãŠå¿™ã—ã„ã¨ã„ã†ã®ã«
迅速ã§ä¸å¯§ãªãŠè¿”事ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
>1番目ã®ã”質å•ã¯å…·ä½“çš„ã«ã©ã®ã‚ˆã†ãªæ‹˜æŸã‚’ã‹ã‘ã‚‹ã‹æ•™ãˆã¦ãã ã•ã„。
マニピュレータã§ã‚‚ã®ã‚’ã¤ã‹ã‚“ã り離ã—ãŸã‚Šã¨ã„ã†ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’行ã†å ´åˆã«ã€
エンドエフェクタã¨å¯¾è±¡ç‰©ä½“ãŒè¿‘ã¥ã„ãŸã¨ãã«ã€
ã“れらを拘æŸã™ã‚‹ã¨ã„ã£ãŸæ„Ÿã˜ã§ã™ã€‚
é•·ã„円柱をæŒã¤ï¼ˆå††æŸ±ã®ä¸å¿ƒè»¸ã¾ã‚りã®å›žè»¢ã¯è¨±ã™ï¼‰å¯èƒ½æ€§ã‚‚ã‚ã‚‹ã®ã§ã€
å®Œå…¨ãªæ‹˜æŸã ã‘ã§ã¯ãªãã€ã§ãれã°ãƒ’ンジジョイントã§ã‚‚ã¤ãªãŽãŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚
>2.4ã¤ã®ã‚¿ã‚¤ãƒ¤ã®è»¸ã«åŒã˜ãƒˆãƒ«ã‚¯ã‚’ã‹ã‘ã‚‹
確èªãªã®ã§ã™ãŒã€ã“ã¡ã‚‰ã®æ–¹æ³•ã¯ãれãžã‚Œã®è»Šè¼ªã®æŽ¥åœ°çŠ¶æ…‹ã«ã‚ˆã£ã¦ã¯
回転数ã¯åŒã˜ã«ã¯ãªã‚‰ãªã„ã§ã™ã‚ˆã?
時間ãŒç©ºã„ãŸã¨ãã§ã„ã„ã§ã™ã®ã§
ã©ã†ãžã‚ˆã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ã€‚
ã§ã‚€æ§˜
ã¯ã˜ã‚ã¾ã—ã¦ã€‚
ODEを勉強ã—å§‹ã‚ã¦ã€ï¼’,3週間ã»ã©çµŒã¡ã¾ã™ãŒã€
ã“ã¡ã‚‰ã®ãƒšãƒ¼ã‚¸ã‚’æ‹è¦‹ã•ã›ã¦é ‚ã„ã¦ã€ãŠè”様ã§å¤§åˆ†è‰²ã€…ã¨ã§ãるよã†ã«ãªã£ã¦ãã¾ã—ãŸã€‚
ã—ã‹ã—ã€æœ€è¿‘Trimeshを扱ã„å§‹ã‚ã¦ã€åˆ†ã‹ã‚‰ãªã„部分ãŒã§ã¦ãã¾ã—ãŸã®ã§ã€
質å•ã‚’ã•ã›ã¦ä¸‹ã•ã„。
Trimeshã¨åŸºæœ¬å½¢ï¼ˆçƒã€é•·æ–¹å½¢ã€å††æŸ±ã€ã‚ャップã¤ã円柱)ã¨ã®è¡çªåˆ¤å®šã¯å•題ãªã„ã®ã§ã™ãŒã€
TrimeshåŒå£«ã®è¡çªã¯å¤‰ãªå‹•ãã‚’ã—ã¾ã™ã€‚
例ãˆã°ã€Trimeshã§ä»»æ„ã®å½¢çŠ¶ã‚’ä½œæˆã—ã€åºŠï¼ˆå¹³é¢ï¼‰ã«ç½®ã„ã¦ãŠãã€
ãã“ã«åˆ¥ã®Trimeshã‚’è½ã¨ã—ã¦è¡çªã•ã›ã‚‹ã¨ã€
床ã«ç½®ã„ãŸTrimeshã«ãã£ã¤ã„ã¦ã—ã¾ã†ç¾è±¡ãŒãŠãã¾ã™ã€‚
ã“れã¯ã‚µãƒ³ãƒ—ルã®Test_MovingTrimeshã§ã‚‚åŒã˜ç¾è±¡ãŒèµ·ãã€
ã†ã•ãŽãƒ¢ãƒ‡ãƒ«ã®ä¸Šã«ã†ã•ãŽãƒ¢ãƒ‡ãƒ«ã‚’è½ã¨ã™ã¨ã€
ã¨ã¦ã‚‚ãƒãƒ©ãƒ³ã‚¹ãŒã¨ã‚Œã¦ã„ã‚‹ã¨ã¯æ€ãˆãªã„çŠ¶æ…‹ã§æ¢ã¾ã£ã¦ã—ã¾ã£ãŸã‚Šã—ã¾ã™ã€‚
ã“ã®ä»¶ã«é–¢ã—ã¦è‰²ã€…ã¨èª¿ã¹ã¦ã„ã‚‹ã¨ã€ODE Forumã§ã€
collision_trimesh_trimesh.cppã®229行ã‚ãŸã‚Šã®
SUB( e1, v2[1], v2[0] );
SUB( e2, v2[2], v2[0] ); をã€
SUB( e2, v2[1], v2[0] );
SUB( e1, v2[2], v2[0] );
ã¨æ›¸ãæ›ãˆã‚‹ã¨ã†ã¾ãå‹•ãã¨æ›¸ã‹ã‚Œã¦ã„ã¾ã—ãŸã®ã§ã€ã“れを試ã—ã¦ã¿ã¾ã—ãŸã€‚
ãã†ã™ã‚‹ã¨ã€ã‚µãƒ³ãƒ—ルã®Test_MovingTrimeshã§ã¯ã€ãã£ã¤ã„ã¦ã—ã¾ã†ã¨ã„ã†ç¾è±¡ãŒãªããªã‚Šã€
割りã¨ã†ã¾ãå‹•ãよã†ã«ãªã‚Šã¾ã—ãŸã€‚
ã—ã‹ã—ã€Test_MovingTrimeshã®ãƒ¢ãƒ‡ãƒ«ãƒ‡ãƒ¼ã‚¿ã‚’自作ã®ãƒ¢ãƒ‡ãƒ«ãƒ‡ãƒ¼ã‚¿ã«å¤‰æ›´ã™ã‚‹ã¨ã€
ãã£ã¤ã„ã¦ã—ã¾ã†ç¾è±¡ãŒãŠããŸã‚Šã€ãã£ã¤ã„ã¦ã„る状態ã‹ã‚‰çªç„¶å¹ã£é£›ã‚“ã§ã—ã¾ã£ãŸã‚Šã—ã¾ã™ã€‚
ç¾è±¡ã‚’言葉ã§èª¬æ˜Žã™ã‚‹ã®ã¯ãªã‹ãªã‹é›£ã—ãã€
状æ³ã‚’ãŠåˆ†ã‹ã‚Šé ‚ã‘ãŸã‹åˆ†ã‹ã‚Šã¾ã›ã‚“ãŒã€
ã‚‚ã—ã€ãŠæ™‚é–“ãŒã‚るよã†ã§ã—ãŸã‚‰ã€ã”回ç”é ‚ã‘ã¾ã™ã§ã—ょã†ã‹ï¼Ÿ
よã‚ã—ããŠé¡˜ã„致ã—ã¾ã™ã€‚
ã†ã‚Šã¼ã†ã•ん。ã“ã‚“ã«ã¡ã¯ã€‚コメントã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
1番目ã®ã”質å•ã§ã™ãŒï¼“6行目ã ã‘ã‚’
contact[i].surface.bounce = 0.5;
ã«å¤‰æ›´ã™ã‚‹ã¨ç§ã®ç’°å¢ƒCYGWIN_NT5.1+Windows XP,gcc 3.4.4,ODE0.5ã§ã¯ãƒã‚¦ãƒ³ãƒ‰ã—ã¾ã—ãŸã€‚æœ¬æ—¥ç¢ºèªæ¸ˆã¿ã§ã™ã€‚
開発環境を教ãˆã¦ãã ã•ã„。cygwinã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã§ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã¨æ•™ãˆã¦ãれã¾ã™ã€‚
$uname -a
$gcc -v
2番目ã®ã”質å•ã¯ã€ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ãªãã¦ã‚‚å†ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³å¯èƒ½ã§ã™ã€‚ジョイントグループã€ãƒœãƒ‡ã‚£ã€ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’ç ´å£Šã—ã€å†åº¦ç”Ÿæˆã™ã‚Œã°ï¼¯ï¼«ã§ã™ã€‚ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’command関数内ã«è¨˜è¿°ã™ã‚Œã°ã‚ーを押ã™ãŸã³ã«ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†å®Ÿè¡Œã—ã¦ãれã¾ã™ã€‚ODEã¯ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ãªã¨ã“ã‚も売りã®ã²ã¨ã¤ã§ã™ã€‚
以上ã§ã™ã€‚
ã¯ã˜ã‚ã¾ã—ã¦ã€‚最近ODEを勉強ã—å§‹ã‚ãŸè€…ã§ã™ã€‚
éžå¸¸ã«åˆæ©çš„ãªè³ªå•ã§ç”³ã—訳ãªã„ã®ã§ã™ãŒã€
よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚
â‘
講座6ã®èª²é¡Œã§ã€å発係数(0.0→0.5)を変更ã—ã€makeã—ãªãŠã—ã€å®Ÿè¡Œã—ãŸã®ã§ã™ãŒã€
相変ã‚らãšå¼µã‚Šä»˜ã„ãŸã¾ã¾è·³ãè¿”ã£ã¦ãれã¾ã›ã‚“。
ã©ã“ã‹é–“é•ã£ã¦ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
②シミュレーションをもã†ä¸€åº¦æœ€åˆã‹ã‚‰å†ç”Ÿã—ãŸã„å ´åˆã€
一度ウィンドウを閉ã˜ã¦å†å®Ÿè¡Œã™ã‚‹ã—ã‹ãªã„ã®ã§ã—ょã†ã‹ï¼Ÿ
よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚
ï¼ï¼²ï¼’ã•ん 質å•ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
ODEã¯ä»–ã®å‹•力å¦è¨ˆç®—ã‚¨ãƒ³ã‚¸ãƒ³ã¨æ¯”ã¹ã¦æ•·å±…ãŒä½Žã„ã¨æ€ã„ã¾ã™ã€‚å°‘ãªãã¨ã‚‚Open HPRより㯅
ã¾ãšã€ï¼’番目ã®ã”質å•ã‹ã‚‰å›žç”ã—ã¾ã™ã€‚
dBodyAddForce(dBodyID, fx, fy, fz)を使ã†ã¨å¯èƒ½ã§ã™ã€‚
指定ã—ãŸã„物体ã®ãƒœãƒ‡ã‚£ï¼©ï¼¤ã‚’1番目ã®å¼•æ•°ã€åŠ ãˆãŸã„力ã®x,y,zæˆåˆ†ã‚’ãれãžã‚Œï¼’番目以é™ã®å¼•æ•°ã«ã„れã¦ãã ã•ã„。
3番目ã®å¾¡è³ªå•ã¯ã€ã„ã‚ã„ã‚ãªå®Ÿç¾æ–¹æ³•ãŒå¯èƒ½ã§ã™ã€‚
1. シミュレータ上ã§ç‰©ç†çš„ã«ãã®ã‚ˆã†ãªæ©Ÿæ§‹ã‚’作る
2.4ã¤ã®ã‚¿ã‚¤ãƒ¤ã®è»¸ã«åŒã˜ãƒˆãƒ«ã‚¯ã‚’ã‹ã‘ã‚‹
  ODEã®ãƒ†ã‚¹ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ test_buggy.cppã‚’ã”å‚考ã«ãªã‚Œã°ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚ã‹ã‚Šã¾ã™ã€‚
1番目ã®ã”質å•ã¯å…·ä½“çš„ã«ã©ã®ã‚ˆã†ãªæ‹˜æŸã‚’ã‹ã‘ã‚‹ã‹æ•™ãˆã¦ãã ã•ã„。ã“れã ã‘ã§ã¯ï¼¯ï¼¤ï¼¥ã®ï¼¡ï¼°ï¼©ã§ç°¡å˜ã«å®Ÿç¾ã§ãã‚‹ã‹ã‚ˆãã‚ã‹ã‚Šã¾ã›ã‚“ã®ã§ã€‚
以上ã§ã™ã€‚
ã§ã‚€ã•ん,ã“ã¡ã‚‰ã®ä¸æ‰‹éš›ã§ä½•度もåŒã˜è³ªå•ã‚’ã®ã›ã¦ã™ã¿ã¾ã›ã‚“ã§ã—ãŸï¼Žï¼Žï¼Ž
回ç”ã®ã»ã†ã§ã™ãŒï¼Œå¤§å¤‰å‚考ã«ãªã‚Šã¾ã—ãŸï¼Ž
ã²ã¨ã¤ã²ã¨ã¤å›žç”ã—ã¦ã„ãŸã ã„ã¦ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼Ž
ã“ã‚Œã§æ¬¡ã®æ®µéšŽã«ã‚¹ãƒ†ãƒƒãƒ—アップã§ãã‚‹ã‹ãªï½žï¼Ÿï¼Ÿ
ã¾ãŸODEã§ã¤ã¾ã¥ã„ãŸã¨ãã«è³ªå•ã•ã›ã¦ã„ãŸã ãã¾ã™ï¼Ž
ã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸï¼Ž
ã¯ã˜ã‚ã¾ã—ã¦ã€‚
ODEã¯ãªã‹ãªã‹æ‰‹ã‚’ã¤ã‘られãªã„ã§ã„ãŸã®ã§ã™ãŒã€
ã“ã®ã‚µã‚¤ãƒˆã®ãŠã‹ã’ã§ã¯ã˜ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚
éžå¸¸ã«å‚考ã«ãªã‚ŠåŠ©ã‹ã£ã¦ãŠã‚Šã¾ã™ã€‚
本ã®å‡ºç‰ˆã‚‚楽ã—ã¿ã«ã—ã¦ã„ã¾ã™ã€‚
ã„ãã¤ã‹è³ªå•ã‚’ã•ã›ã¦ãã ã•ã„。
ãƒ»ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®æœ€ä¸ã«ã€é€”ä¸ã‹ã‚‰æ‹˜æŸã‚’ã‚‚ã†ã‘ãŸã‚Šã€é€†ã«å¤–ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã§ã—ょã†ã‹ï¼Ÿ
・特定ã®ç‰©ä½“ã«ã ã‘(ãŸã¨ãˆã°ã€ç®±ãŒè¤‡æ•°ã‚ã£ãŸã¨ãã«ã€ãã®ã†ã¡ã®ã²ã¨ã¤ã«ã ã‘)ã«å¤–力(~[N]ã§ãŠã™ã€ãªã©ï¼‰ã‚’åŠ ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã§ã—ょã†ã‹ï¼Ÿ
・ãŸã¨ãˆã°ã€4輪車ã®å‰å¾Œè¼ªã®å‹•ãã‚’ã¤ãªã„ã§ã²ã¨ã¤ã®ãƒˆãƒ«ã‚¯ã§é§†å‹•(モータã¯ï¼‘ã¤ã§ã€ï¼”ã¤ã®è»Šè¼ªãŒæ¯è»Šç‰ã§ã¤ãªãŒã£ã¦ã„るよã†ãªã‚¤ãƒ¡ãƒ¼ã‚¸ï¼‰ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã§ã—ょã†ã‹ï¼Ÿ
ãれãžã‚Œã€ã§ãã‚‹ãªã‚‰ã°ã€ã©ã®ã‚ˆã†ãªæ„Ÿã˜ã«
プãƒã‚°ãƒ©ãƒ を組ã‚ã°ã‚ˆã„ã‹ãƒ’ントを教ãˆã¦ãã ã•ã„。
ãŠå¿™ã—ã„ã¨ã¯æ€ã„ã¾ã™ãŒã€
ãŠè¿”事をã„ãŸã ã‘れã°å¹¸ã„ã§ã™ã€‚
ã©ã†ãžã‚ˆã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ã€‚
ã†ãˆã®ã•ã‚“ãŠã²ã•ã—ã¶ã‚Šï¼
ã•ã¦ã€ã“ã®æ‰‹ã®è³ªå•ã¯å®Ÿéš›ã«ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’ã¿ãªã„ã¨ã‚ã‹ã‚‰ãªã„ケースãŒã»ã¨ã‚“ã©ã§ã™ãŒã€è€ƒãˆã‚‰ã‚Œã‚‹ã“ã¨ã‚’回ç”ã—ã¾ã™ã€‚
「トライメッシュãŒã‚¸ã‚ªãƒ¡ãƒˆãƒªãƒ¼ï¼ˆãƒœãƒ‡ã‚£ãƒ¼ãŒãªã„)ã§ã€
トライメッシュã¨è¡çªã•ã›ã‚‹ç‰©ä½“(例ãˆã°ãƒœãƒƒã‚¯ã‚¹ï¼‰ãŒãƒœãƒ‡ã‚£ãƒ¼ã‚りã€ãªã®ã§ã¯ï¼Ÿã¨ç–‘ã£ã¦ã¿ã¾ã—ãŸãŒã€
ã©ã†ã‚‚ãã†ã˜ã‚ƒãªã„よã†ã§ã™ã€‚ã€
トライメッシュã«ã‚‚ボディをã¤ã‘ã¦ã‚ã’ãªã„ã¨ï¼¯ï¼¤ï¼¥ã«å‹•力å¦è¨ˆç®—ã‚’ã—ã¦ã‚‚らãˆã¾ã›ã‚“。ã¾ãŸã€è¡çªåˆ¤å®šã¯ã‚¸ã‚ªãƒ¡ãƒˆãƒªåŒå£«ã ã‘ã§ã™ã€‚è¡çªåˆ¤å®šã™ã‚‹å¿…è¦ã®ãªã„ボディã«ã¯ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’è¨å®šã™ã‚‹ã‚‚ã‚りã¾ã›ã‚“。
è‚心ã®ãƒˆãƒ©ã‚¤ãƒ¡ãƒƒã‚·ãƒ¥ã®è¡çªåˆ¤å®šãŒã§ããªã„部分ã§ã™ãŒã€è¡çªåˆ¤å®šã‚’ã™ã‚‹nearCallback関数ã®ä¸ã«è¡çªç‚¹ã®æœ€å¤§æ•°MAX_CONTACTSを大ããã—ã¦ãã ã•ã„。
ã“ã®é–¢æ•°åã¯test_moving_trimesh.cppã¨åŒã˜ã§ã™ã€‚ã‚ã¨ã¯ã€test_moving_trimesh.cppã¨ã‚‚ã†ä¸€åº¦æ¯”較ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
ã“ã®ã‚³ãƒ¡ãƒ³ãƒˆãŒå‚考ã«ãªã‚Œã°è‰¯ã„ã®ã§ã™ãŒã€‚
ãƒãƒƒã‚¿ãƒ¼ã•ã‚“ã®ã”質å•ã«å›žç”ã—ã¾ã™ã€‚
1.dWorldStepã®ã‚¹ãƒ†ãƒƒãƒ—サイズã¯ä½•?
数値ç©åˆ†ã®æ™‚é–“å¹…ã§ã™ã€‚ã“ã®ã‚µã‚¤ã‚ºã®åˆ†ã ã‘æ™‚é–“ãŒé€²ã¿ã¾ã™ã€‚å°ã•ãã™ã‚‹ã¨ç²¾åº¦ãŒå‘上ã—ã¾ã™ãŒé…ããªã‚Šã€å¤§ããã™ã‚‹ã¨ç²¾åº¦ãŒæ‚ªããªã‚Šã¾ã™ãŒé€Ÿããªã‚Šã¾ã™ã€‚シミュレータã§ã®æŒ™å‹•ã‚’è¦‹ã¦æ±ºã‚ã¦ãã ã•ã„。ãŸã ã—ã€ï¼¯ï¼¤ï¼¥ã®ç©åˆ†å™¨ã¯ç²¾åº¦ãŒæ‚ªã„ã®ã§ã€éžå¸¸ã«æ£ç¢ºãªè¨ˆç®—ãŒæ±‚ã‚られる用途ã«ã¯å‘ãã¾ã›ã‚“。
2.ODEウインドウã®å¤§ãã•を変更ã™ã‚‹ã¨å‹•作ãŒé…ããªã‚‹ã®ã§ã™ãŒâ€¦
テストプãƒã‚°ãƒ©ãƒ ãªã©ã§ã¯è¡¨ç¤ºãŒçµ‚ã‚らãªã„ã¨ã€æ¬¡ã®å‹•力å¦è¨ˆç®—ã‚„è¡çªè¨ˆç®—ã‚’ã—ãªã„ã®ã§ã€ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ãŒå¤§ãããªã‚‹ã¨å‹•作ãŒé…ããªã‚Šã¾ã™ã€‚
高速ã«è¨ˆç®—ã—ãŸã„å ´åˆã¯ã€è¡¨ç¤ºã‚’æ¢ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
以上ã§ã™ã€‚ã”å‚考ã«ãªã‚Šã¾ã—ãŸã‹ï¼Ÿ
ãƒãƒƒã‚¿ãƒ¼ã•ん コメントã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚ã§ã‚‚ã€å…ˆç”Ÿã¯ã‚„ã‚ã¦ãã ã•ã„。
1. ODEã®å˜ä½ç³»
å˜ä½ç³»ã¯ãŠå¥½ããªã‚‚ã®ã‚’使ãˆã¾ã™ãŒã€å›½éš›(SI)å˜ä½ç³»ï¼ˆé•·ã•ã¯ï½ã€é‡ã•ã¯ï½‹ï½‡ã€â€¦ï¼‰ã¨ã—ãŸæ–¹ãŒã‚ã‹ã‚Šã‚„ã™ã„ã¨è€ƒãˆã¾ã™ã€‚ãŸã ã—ã€è§’度ã¯ï¼¯ï¼¤ï¼¥ã®ï¼¡ï¼°ï¼©ã§radianを使ã£ã¦ã„ã¾ã™ã®ã§åº¦ã¯ãã®ã¾ã¾ä½¿ãˆã¾ã›ã‚“。
2.dWorldStepã®è³ªå•
ã¯ã„。動力å¦è¨ˆç®—ã¯ãã®ã‚¹ãƒ†ãƒƒãƒ—ã‚µã‚¤ã‚ºæ¯Žã«æ›´æ–°ã—ã€è¡çªè¨ˆç®—ã¯å‹•力å¦è¨ˆç®—ã¨åŒã˜ãƒ«ãƒ¼ãƒ—ã§å›žã£ã¦ã„ã¾ã™ã®ã§ãƒãƒƒã‚¿ãƒ¼ã•ã‚“ã®ã„ã†ã¨ãŠã‚Šã ã¨æ€ã„ã¾ã™ã€‚
3.テã‚ストã®è¡¨ç¤ºã®è³ªå•
ODEã®ãƒ†ã‚¹ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ ã®æç”»ã¯drawstuffライブラリã§å‡¦ç†ã—ã¦ãŠã‚Šã€ãれã¯OpenGLを使ã£ãŸã‚·ãƒ³ãƒ—ルãªã‚‚ã®ã§ã™ã€‚ãŸã ã—ã€ãƒ†ã‚ストを表示ã™ã‚‹ï¼¡ï¼°ï¼©ãŒãªã„ã®ã§è‡ªåˆ†ã§ä½œã‚‹ã—ã‹ã‚りã¾ã›ã‚“。
printfã‚„coutを使ã£ã¦æ¨™æº–出力(ターミナル)ã«å‡ºåŠ›ã•ã›ã‚‹æ–¹æ³•ãŒæ¥½ã§ã™ã€‚
本ã¯åŽŸç¨¿ãŒã§ããªã„ã¨ã„ã¤ã¾ã§çµŒã£ã¦ã‚‚出版ã•れã¾ã›ã‚“…
ã¯ã˜ã‚ã¾ã—ã¦ï¼Œã§ã‚€å…ˆç”Ÿï¼Ž
最近ã«ODEã®å‹‰å¼·ã‚’å§‹ã‚,ã§ã‚€å…ˆç”Ÿã®ãƒ›ãƒ¼ãƒ ページをå‚考ã«ã•ã›ã¦é ‚ã„ã¦ã„ã¾ã™ï¼Ž
質å•ã§ã™ãŒï¼ŒODEã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«ãŠã„ã¦ï¼Œ
シミュレーションã®ã‚¹ãƒ†ãƒƒãƒ—サイズを決定ã™ã‚‹ã¨ã“ã‚ãŒã‚りã¾ã™ï¼Ž
dWorldStep(world,0.05);
ã“ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®ã‚¹ãƒ†ãƒƒãƒ—サイズã¯ä½•を表ã—ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
ã¾ãŸï¼ŒODEã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®å¤§ãã•を変更ã™ã‚‹ã¨ç‰©ä½“ã®ç§»å‹•速度ãŒå¤‰åŒ–ã—ã¾ã™ï¼Ž
ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³çµæžœã«å½±éŸ¿ã¯ã‚ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ï¼Ž
ã©ã†ã‚‚ã“ã‚“ã°ã‚“ã¯ã€‚
ã‘ã£ã“ã†è³ªå•ã‚’ã•ã—ã¦ã‚‚らã£ã¦ã„ã‚‹ã†ãˆã®ã§ã™ã€‚
サイトã€ãŠä¹…ã—ã¶ã‚Šã®æ›´æ–°ã¨ã„ã†ã“ã¨ã§
ãŠå¿™ã—ã•ãŒä¼ºãˆã¾ã™ã€‚
ã“ã®å‰ã€Œãƒˆãƒ©ã‚¤ãƒ¡ãƒƒã‚·ãƒ¥è¡çªåˆ¤å®šã€ãŒã§ããªã„ã¨ãƒ¡ãƒ¼ãƒ«ã—ã¾ã—ãŸã€‚
最後ã®ãƒ¡ãƒ¼ãƒ«ã§
「トライメッシュãŒã‚¸ã‚ªãƒ¡ãƒˆãƒªãƒ¼ï¼ˆãƒœãƒ‡ã‚£ãƒ¼ãŒãªã„)ã§ã€
トライメッシュã¨è¡çªã•ã›ã‚‹ç‰©ä½“(例ãˆã°ãƒœãƒƒã‚¯ã‚¹ï¼‰ãŒãƒœãƒ‡ã‚£ãƒ¼ã‚りã€
ãªã®ã§ã¯ï¼Ÿã¨ç–‘ã£ã¦ã¿ã¾ã—ãŸãŒã€
ã©ã†ã‚‚ãã†ã˜ã‚ƒãªã„よã†ã§ã™ã€‚
(自分ã®ä¸ã§ã¯ï¼ˆï¼¾ï¼¾ï¼›ã€€ï¼‰
ã‚„ã£ã¦ã„る内容ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚
simloop内
 ・ trimeshbody ã®ã€€dbodyGetPositionã€dbodyGetRotation
 ・vertices ã® floatã‹ã‚‰ dReal計算
 ・drawtriangle
main文内
 ・bodyCreate
 ・Massセット
 ・ボディパラメーターè¨å®š(position, rotation)
 ・trimeshDataã®ä½œæˆ
 ・trimeshGeometoryã®ä½œæˆ
 ・dGeomSetBody
ã¨ã„ã†ã‚ˆã†ãªå†…容ã§ã™ã€‚(ã‚ã¡ã‚ƒãã¡ã‚ƒå¤§ã¾ã‹ãªãªã„よã†ã§ã™ãŒï¼‰
é †ç•ªã‚‚ã“ã®ã¾ã¾ã§ã€3.10節ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚³ãƒ¼ãƒ‰ã¨
åŒã˜é †åºã ã¨æ€ã†ã®ã§ã™ãŒãªãœã‹ä½œã£ãŸ
トライメッシュクラスã¯è¡çªåˆ¤å®šã‚’ã—ã¦ãれã¾ã›ã‚“。
御教授願ã„ã¾ã™ãƒ»ãƒ»ãƒ»ï½ï¼ˆï¼¿ï¼¿ï¼‰ï½
ã¯ã˜ã‚ã¾ã—ã¦ï¼Œã§ã‚€å…ˆç”Ÿï¼Ž
最近ODEã®å‹‰å¼·ã‚’å§‹ã‚ã¦ï¼Œã§ã‚€å…ˆç”Ÿã®ãƒ›ãƒ¼ãƒ ページをå‚考ã«ã•ã›ã¦ã„ãŸã ã„ã¦ã„ã¾ã™ï¼Ž
質å•ã§ã™ãŒï¼Œ
1.ODEã®å˜ä½ç³»ã¯ã©ã†ãªã£ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
角度ã¯ãƒ©ã‚¸ã‚¢ãƒ³ã«ãªã£ã¦ã„るよã†ã§ã™ãŒï¼Œé‡ã•ã‚„é•·ã•ã«ã¤ã„ã¦ã¯ã©ã†ãªã£ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
2.ã§ã‚€å…ˆç”Ÿã®HelloWorldã®ãƒ—ãƒã‚°ãƒ©ãƒ ã§ï¼Œ
dWorldStep(world,0.05);  // シミュレーションã®ã‚¹ãƒ†ãƒƒãƒ—サイズを決ã‚ã‚‹
ã¨ã‚りã¾ã™ãŒï¼Œã“ã®ã‚¹ãƒ†ãƒƒãƒ—サイズã¯ä½•ã‚’è¨å®šã—ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
3.シミュレーションä¸ã«ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®ã‚µã‚¤ã‚ºã‚’変更ã™ã‚‹ã¨ç‰©ä½“ã®å‹•ããŒæ—©ããªã‚Šã¾ã™ãŒï¼Œã“れã¯çµæžœã«å½±éŸ¿ã™ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
ODEã®æœ¬ã®å‡ºç‰ˆï¼Œã¨ã¦ã‚‚楽ã—ã¿ã«ã—ã¦ã¾ã™ï¼Ž
よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ï¼Ž
ã¯ã˜ã‚ã¾ã—ã¦ï¼Ž
ã“ã®ãƒ›ãƒ¼ãƒ ページをå‚考ã«ï¼Œæœ€è¿‘ODEã®å‹‰å¼·ã‚’å§‹ã‚ã¾ã—ãŸãŒï¼Œãªã‹ãªã‹ã†ã¾ãã„ã‹ãšå››è‹¦å…«è‹¦ã—ã¦ã„ã¾ã™ï¼Ž
ã•ã£ãã質å•ãªã‚“ã§ã™ãŒï¼Œ
1.ODEã®å˜ä½ç³»ã¯ã©ã†ãªã£ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿè§’度ã¯ãƒ©ã‚¸ã‚¢ãƒ³ãªã®ã¯ç¢ºèªã—ã¾ã—ãŸãŒï¼Œé•·ã•ã‚„é‡ã•ã«ã¤ã„ã¦ã¯ã©ã†ãªã£ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
2.ã§ã‚€å…ˆç”Ÿã®HelloWorldã®ä¸ã«ï¼Œ
dWorldStep(world,0.05);  // シミュレーションã®ã‚¹ãƒ†ãƒƒãƒ—サイズを決ã‚ã‚‹
ã¨ã‚りã¾ã™ãŒï¼Œã“ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®ã‚¹ãƒ†ãƒƒãƒ—サイズã¨ã„ã†ã®ã¯ï¼Œ0.05ç§’ã”ã¨ã«è¡çªãªã©ã®è§£æžã‚’行ã†ã®ã§ã—ょã†ã‹ï¼Ÿ
3.ODEã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã«ï¼Œç‰©ä½“ã®ä½ç½®ã‚’表示ã—ãŸã‚Šï¼Œã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³æ™‚é–“ã®è¡¨ç¤ºã‚’ã™ã‚‹ã«ã¯ã©ã†ã—ãŸã‚‰ã‚ˆã„ã®ã§ã—ょã†ã‹ï¼Ÿ
ODEã®æœ¬ã¯ã„ã¤é ƒå‡ºç‰ˆã•れるã®ã§ã—ょã†ã‹ï¼Ÿ
出版楽ã—ã¿ã«ã—ã¦ã¾ã™ï¼Ž