Ìܼ¡
2Âæ¤Î¥í¥Ü¥Ã¥È¤Ç¶õ¤´Ì¤ò¼ý½¸¤·¡¢¥´¡¼¥ë¤Ë¶õ¤´Ì¤Ë¤Ê¤ë¤Ù¤¯¹â¤¯ÀѤ߾夲¤ë
´ðËܥ롼¥ë
¶¥µ»»þ´Ö¤Ï¿³È½¤¬Â³¹ÔÉÔǽ¤ÈȽÃǤ¹¤ë¤Þ¤Ç¡¢¤¢¤ë¤¤¤Ï¥ê¥¿¥¤¥¢¤¹¤ë¤Þ¤Ç¡£
¿Þ¤Îº¸²¼¤Î¶ù¤«¤é¥¹¥¿¡¼¥È¤¹¤ë¡£¥í¥Ü¥Ã¥È¤¬»æ¤«¤é¤Ï¤ß½Ð¤Ê¤¤ÈϰϤDzÄǽ¤Ê¸Â¤ê¤Ë¶ù¤ËÇÛÃÖ¤¹¤ë¡£
¶õ¤´Ì¤ò½¸¤á¤Æ¿Þ¤Î¡Ö¥´¡¼¥ë¡×¤È½ñ¤«¤ì¤¿±ß¸Ì¤ÈľÀþ¤Ç°Ï¤Þ¤ì¤ëÎΰè¤Ë¶õ¤´Ì¤ò±¿¤Ö
¤Ê¤ë¤Ù¤¯¹â¤¯¶õ¤´Ì¤òÀѤ߾夲¤ë
±¿¤Ó½ª¤ï¤Ã¤¿¸å¡¢¤¢¤ë¤¤¤ÏÀѤ߾夲¤¿¸å¤Ï¥í¥Ü¥Ã¥È¤Ï¥´¡¼¥ë¤ÎÎΰ褫¤é³°¤Ë½Ð¤ë¤³¤È¡£¤Þ¤¿¶õ¤´Ì¤ÈÀÜ¿¨¤·¤Æ¤¤¤¿¤Ï¤¤¤±¤Ê¤¤¡£
³«»Ï¤Î¹ç¿Þ¤«¤é£µÉðÊÆâ¤Ë¥¹¥¿¡¼¥È¥Ü¥¿¥ó¤ò²¡¤¹ºî¶È¤ò´°Î»¤¹¤ë¤³¤È¡£
¶¥µ»¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¡¢¥í¥Ü¥Ã¥È¤Ë¿¨¤Ã¤¿¤ê¿Í´Ö¤¬±ó³Ö¤ÇÁàºî¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
ÅÓÃæ¤Ç¤¦¤Þ¤¯Æ°¤«¤Ê¤¯¤Ê¤Ã¤¿¾ì¹ç¡¢£±²ó¸Â¤êºÆ¥¹¥¿¡¼¥È¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡ÊºÆ¥¹¥¿¡¼¥È¤ÎºÝ¤ËÊÌ¥×¥í¥°¥é¥à¤Çµ¯Æ°¤·¤Æ¤è¤¤¡Ë¡£
°Ê¾å2013b/Mission2¤è¤ê°úÍÑ
dyuma
¥í¥Ü¥Ã¥ÈÀ½ºî¡Ê+¥í¥Ü¥Ã¥È´ÉÍý¡Ë¡¦¥×¥í¥°¥é¥ß¥ó¥°¤È¤É¤Á¤é¤â¤³¤Ê¤·¤Æ¤¤¤ëÃæ´Ö´ÉÍý¿¦¡£
pepo
¥í¥Ü¥Ã¥È¤òÁȤޤ»¤¿¤éÈà¤Î±¦¤Ë½Ð¤ë¤â¤Î¤Ï¤¤¤Ê¤¤¡£¡Ê¤¿¤À¤·¾ðÊ󹩳زʡË
michaegon
¤³¤Î¥Ú¡¼¥¸¤ÎÃø¼Ô
¥×¥í¥°¥é¥à¤ÎÊý¤ò¤ä¤Ã¤Æ¤Þ¤¹¡£
º£²ó»ÈÍѤ·¤¿¥í¥Ü¥Ã¥È¤Ç¤¹¡£Æ¹ÂΤ¬¤«¤Ê¤êŤ¤¤Ç¤¹¡£
ƹÂÎÃæ±û¤Î¥ì¡¼¥ë¤Ë´Ì¤¬£´ËܤޤÇÆþ¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
´Ì¤ò¤³¤ÎÏӤDz¥¤Ã¤Æ¥ì¡¼¥ë¤ËÆþ¤ì¤ë»ÅÁȤߤǤ¹¡£
´Ì¤ò´¶ÃΤ¹¤ë¤Î¤Ë¤Ï¤³¤ÎĶ²»ÇÈ¥»¥ó¥µ¡¼¤ò»È¤¤¤Þ¤¹¡£
¥ì¡¼¥ë¤Î¸å¤í¤«¤é´Ì¤¬Ï³¤ì¤Ê¤¤¤è¤¦¤Ë¥¹¥È¥Ã¥Ñ¡¼·¯¤¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£
´Ì¤ò¥ì¡¼¥ë¤ËµÍ¤á¹þ¤ó¤À¤é¡¢´Ì¤òÍÞ¤¨¤ë¤¿¤á¤ÎÏӤǴ̤òÍÞ¤¨¤Ê¤¬¤é¥ì¡¼¥ë¼«¿È¤òΩ¤Á¾å¤²¤Þ¤¹¡£
º£²ó¤âPIDÀ©¸æ¤òÍøÍѤ·¤¿¥é¥¤¥ó¥È¥ì¡¼¥¹¥×¥í¥°¥é¥à¤òÁȤó¤Ç¤ß¤Þ¤·¤¿¡£
Á°²ó¤ÎÈ¿¾Ê¤òÀ¸¤«¤·¤Æ¤è¤ê°ÂÄꤷ¤ÆÀ®¸ù¤Ç¤¤ë¤â¤Î¤Ë²þÎɤ·¤Þ¤·¤¿¡£
PIDÀ©¸æ¤Ë¤Ä¤¤¤Æ¤ÏÁ°²ó¤Î¥Ú¡¼¥¸¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
´ðËÜŪ¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹¤Î¥×¥í¥°¥é¥à¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£
#define SPEED 32 #define KP 1.6 #define KI 0.00002 #define KD 0.8 #define THRESHOLD 50 #define THRESHOLD2 32 #define RIGHT 1 #define LEFT -1 #define DT 1 #define CT 250 int dev[2]; // Êк¹ float integral; // ÁàºîÎ̤òÊÖ¤¹´Ø¿ô inline int ope_amount() { float pid; int result; dev[0]=dev[1]; // ²áµî¤ÎÊк¹ dev[1]=SENSOR_1-THRESHOLD; // ¸½ºß¤ÎÊк¹ if (dev[0]==dev[1]) { // ÉÔÍפˤʤ俤éintegral¥ê¥»¥Ã¥È integral=0; } integral+=(dev[1]+dev[0])*DT/2; // ÀÑʬ·×»» pid=KP*dev[1]+KI*integral+KD*(dev[1]-dev[0])/DT; // PID result=pid; // int·¿¤ËÊÑ´¹ /*¥·¥ó¥¯¥íΨ¤ÎÈϰϤˤª¤µ¤á¤ë*/ if (result>100) { result=100; } else if (result<-100) { result=-100; } return result; } /* ¹õÀþ¤Î¡¢¤È¤¢¤ë¦¤òÁö¹Ô¤¹¤ë´Ø¿ô¡Ê¼ÖÀþÊѹ¹¤Ä¤¡Ë */ inline void go_xside(int sgn) { while (true) { OnFwdSync(OUT_BC,SPEED,ope_amount()*sgn); Wait(DT); if (SENSOR_1<THRESHOLD2) { OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn); Wait(CT); break; } } } task main() { while (true) { go_xside(RIGHT); go_xside(LEFT); } }
¤³¤Î¥×¥í¥°¥é¥à¤ÏÁ°²óƱÍÍ¡¢PIDÀ©¸æ¤ò»È¤Ã¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤·¤Æ¤¤¤Þ¤¹¡£
Á°²ó¤Ï¡¢¥³¡¼¥¹¤Î·Á¾õ¤òÍøÍѤ·¤ÆÎϵ»¤Ç¸òº¹ÅÀ¤òÆÍÇˤ¹¤ë¥×¥í¥°¥é¥à¤À¤Ã¤¿¤»¤¤¤Ç¡¢¤º¤¤¤Ö¤ó¥³¡¼¥¹£±¼þ²ó¤ê¤¤ì¤ë³ÎΨ¤¬Ä㤤¤Î¤¬·èÄêŪ¤Ê·çÅÀ¤Ç¤·¤¿¡£
¤½¤³¤Ç¡¢º£²ó¤Ï¤â¤Ã¤ÈÀ®¸ùΨ¤¬¹â¤¤¸òº¹ÅÀÄ̲áÊýË¡¤ò¹Í¤¨¤Þ¤·¤¿¡£
º£²ó¤ÏïçÃͤò¥é¥¤¥ó¤Î¶³¦¾å¤È¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²Ãʳ¬¤ËÀßÄꤷ¤Þ¤·¤¿¡Ê¥é¥¤¥ó¤ÎÃæ±û¤Ë¹Ô¤¯¤Û¤É¸÷¥»¥ó¥µ¡¼¤ÎÃͤϾ®¤µ¤¯¤Ê¤ê¤Þ¤¹¡Ë¡£
ľÀþ¤ä¥«¡¼¥Ö¤Î³°Â¦¡¢´Ë¤ä¤«¤Ê¥«¡¼¥Ö¤ÎÆ⦤òÁö¤Ã¤Æ¤¤¤ë¤È¤¤Ï¡¢¥é¥¤¥ó¤Î¶³¦¾åÉÕ¶á¤òÁö¹Ô¤·¤Æ¤¤¤Þ¤¹¤¬¡¢µÞ¥«¡¼¥Ö¤ÎÆ⦤ä¸òº¹ÅÀ¤Ëº¹¤·³Ý¤«¤ë¤È¡¢¥í¥Ü¥Ã¥È¤¬¥³¡¼¥¹¤ÎÊѲ½¤ËÄɤ¤¤Ä¤±¤º¤Ë¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²¤ÄÌܤÎïçÃͤò±Û¤¨¤Æ¤¤Þ¤¹¡£
¤¹¤ë¤È¡¢go_xsideÆâ¤Îifʸ¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
if (SENSOR_1<THRESHOLD2) { OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn); // Ä̾ï¤È¤ÏµÕ¸þ¤¤Ø¶Ê¤¬¤ë Wait(CT); break; }
¤³¤Îifʸ¤Ç¤ÏÄ̾ï¥é¥¤¥óÆâ¤Ë¥í¥Ü¥Ã¥È¤¬Æþ¤Ã¤¿¤È¤¡¢¥é¥¤¥ó³°¤Ø¸þ¤±¤Æ¶Ê¤¬¤ê¤À¤¹¤È¤³¤í¤òCT¥ß¥êÉô֤À¤±¥é¥¤¥ó¤ÎÆ⦤˸þ¤±¤ÆÁö¤ê¤Þ¤¹¡£
¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢¥é¥¤¥óÃæ±û¤ò¼Ð¤á¤Ë²£Àڤäƥ饤¥ó¤ÎÈ¿ÂЦ¡Ê¥«¡¼¥ÖÃæ¤Ê¤é¥«¡¼¥Ö¤Î³°Â¦¡¢¸òº¹ÅÀ¤Ê¤é¸òº¹ÅÀÃæ±û¡Ë¤Ø°ÜÆ°¤·¤Þ¤¹¡£
¤³¤Î¤è¤¦¤Ë¡¢¸òº¹ÅÀ¤ò¼Ð¤á¤Ë²£ÀڤäƤ錄¤ê¤¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
¤³¤ÎÊýË¡¤Ç¤Ï¡¢Á°²ó¤ÎÎϵ»Ä̲á¤è¤ê¤âKI¤Ê¤É¤ÎÃͤäÅÅÃÓ»ÄÎ̤ʤɤËÀ®¸ùΨ¤¬º¸±¦¤µ¤ì¤º¤Ë°ÂÄꤷ¤¿Áö¹Ô¤ò¼Â¸½¤Ç¤¤ë¤¦¤¨¡¢¤É¤Ã¤Á¼þ¤ê¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ¤â£±¼þ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¢°Ê¾å¤òÍøÍѤ·¤Æ¡¢º£²ó¤Î¤¿¤á¤Ëºî¤Ã¤¿¥×¥í¥°¥é¥à¤Ç¤¹¡£
¥¿¥¤¥ä¤òÀ©¸æ¤·¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£
#define SPEED 33 #define SPEED2 20 #define KP 7 #define KI 0.002 #define KD 1.8 #define THRESHOLD 20 #define THRESHOLD2 10 #define RIGHT 1 #define LEFT -1 #define DT 1 #define CT 1200 #define ARM 1 #define FIRST_T 5000 void turn_right() { OnFwd(OUT_C,SPEED2); OnFwd(OUT_B,-SPEED2); } void turn_left() { OnFwd(OUT_B,SPEED2); OnFwd(OUT_C,-SPEED2); } void start_action() { // BluetoothÀܳ¤Î³Îǧ until (BluetoothStatus(ARM)==NO_ERR); PlaySound(SOUND_UP); // ¥¹¥¿¡¼¥ÈÃÏÅÀ¤«¤é¥³¡¼¥¹¤Ë¾è¤ë¤Þ¤Çľ¿Ê OnFwdSync(OUT_BC,SPEED,0); until (SENSOR_1<THRESHOLD); Off(OUT_BC); } void can_build2() { // ¿Þ¤Î±¦¤«¤é¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÆþ¤ë¤È¤¹¤ë turn_right(); Wait(CT); Off(OUT_BC); // ÀѤ߾夲»ØÎá¤òÁ÷¤ë SendRemoteNumber(ARM,MAILBOX3,1); // ÀѤ߾夲´°Î»¤Î¹ç¿Þ¤òÂÔ¤Ä int msg; do { msg=0; ReceiveRemoteNumber(MAILBOX4,true,msg); } while (!msg); } void can_build1() { // ¿Þ¤Î±¦¤«¤é¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÆþ¤ë¤È¤¹¤ë turn_left(); Wait(CT*4); Off(OUT_BC); // ¥´¡¼¥ë±ü¤Ø°ÜÆ° OnFwd(OUT_BC,SPEED); Wait(CT*4); Off(OUT_BC); // ÀѤ߾夲»ØÎá¤òÁ÷¤ë SendRemoteNumber(ARM,MAILBOX3,1); // ÀѤ߾夲´°Î»¤Î¹ç¿Þ¤òÂÔ¤Ä int msg; do { msg=0; ReceiveRemoteNumber(MAILBOX4,true,msg); } while (!msg); // ¥Ð¥Ã¥¯¤Ç¸òº¹ÅÀ¤Þ¤ÇÌá¤Ã¤Æ»ß¤Þ¤ë OnFwd(OUT_BC,-SPEED); Wait(CT*5); Off(OUT_BC); SendRemoteNumber(ARM,MAILBOX5,1); } void end_action() { // ¤«¤Ê¤ê¸å¤í¤Ë²¼¤¬¤ë OnFwd(OUT_BC,-SPEED); Wait(FIRST_T); turn_right(); Wait(CT); // ¥³¡¼¥¹³°¤ØΥæ OnFwd(OUT_BC,100); Wait(FIRST_T*2); PlaySound(SOUND_UP); } // ´Ì¤¬¤¢¤ë¤«¤É¤¦¤«È½Äꤹ¤ë´Ø¿ô int iscan() { if (SensorUS(S2)<=10) { // Ķ²»ÇÈ¥»¥ó¥µ¡¼¤¬10cm°ÊÆâ¤ò´¶ÃÎ return 1; } else { return 0; } } // ´Ì¤Î½³¤ê¾å¤²¤òÌ¿Î᤹¤ë´Ø¿ô void kick() { OnFwdSync(OUT_BC,SPEED,0); Wait(CT); Float(OUT_BC); // Bluetooth¤ÇÄÌ¿®¤·¤Æ½³¤ê¾å¤²¤ò¼Â¹Ô SendRemoteNumber(ARM,MAILBOX1,1); int msg=0; do { ReceiveRemoteNumber(MAILBOX2,true,msg); } while (!msg); } int dev[2]; int flag,count; float integral; inline int ope_amount() { float pid; int result; dev[0]=dev[1]; // ²áµî¤ÎÊк¹ dev[1]=SENSOR_1-THRESHOLD; // ¸½ºß¤ÎÊк¹ if (dev[0]==dev[1]) { // ÉÔÍפˤʤ俤éintegral¥ê¥»¥Ã¥È integral=0; } integral+=(dev[1]+dev[0])*DT/2; // ÀÑʬ·×»» pid=KP*dev[1]+KI*integral+KD*(dev[1]-dev[0])/DT; // PID result=pid; // int·¿¤ËÊÑ´¹ /*¥·¥ó¥¯¥íΨ¤ÎÈϰϤˤª¤µ¤á¤ë*/ if (result>100) { result=100; } else if (result<-100) { result=-100; } return result; } inline void go_xside(int sgn,int change) { while (true) { OnFwdSync(OUT_BC,SPEED,ope_amount()*sgn); Wait(DT); if (SENSOR_1<THRESHOLD2) { OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn); Wait(CT); PlaySound(SOUND_UP); break; } if (iscan()) { kick(); count++; if (count==change) { flag++; break; } } } } inline void go_xside2(int sgn) { while (true) { OnFwdSync(OUT_BC,SPEED,ope_amount()*sgn); Wait(DT); if (SENSOR_1<THRESHOLD2) { count++; OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn); Wait(CT); PlaySound(SOUND_UP); break; } } } inline void go_xside3(int sgn) { while (true) { OnFwdSync(OUT_BC,SPEED2,ope_amount()*sgn); Wait(DT); if (SENSOR_1<THRESHOLD2) { count++; OnFwdSync(OUT_BC,SPEED2,-ope_amount()*sgn); Wait(CT); PlaySound(SOUND_UP); break; } } } // £±²óÌÜ // ´Ì¤ò4¤Ä½¸¤á¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÅþ㤹¤ë¤Þ¤Ç void phase1() { count=0; flag=0; while (true) { go_xside(LEFT,4); if (flag) { break; } go_xside(RIGHT,4); if (flag) { break; } } count=0; flag=0; while (true) { go_xside2(LEFT); if (count==3){ break; } go_xside2(RIGHT); if (count==3){ break; } } Off(OUT_BC); } // £²²óÌÜ // ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤«¤é¥¹¥¿¡¼¥È¤·¡¢ // ´Ì¤ò4¤Ä½¸¤á¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤Þ¤ÇÌá¤Ã¤Æ¤¯¤ë¤È¤³¤í¤Þ¤Ç void phase2() { turn_right(); Wait(CT*4); count=0; // ¥Ø¥¢¥Ô¥ó¤Þ¤Ç while (true) { go_xside2(LEFT); if (count==2) { break; } go_xside2(RIGHT); if (count==2) { break; } } // ¸þ¤³¤¦´ß¤Ø°ÜÆ° Wait(CT*4); OnFwd(OUT_BC,SPEED); Wait(FIRST_T); count=0; flag=0; // ´Ì½¸¤á while (true) { go_xside(LEFT,4); if (flag) { break; } go_xside(RIGHT,4); if (flag) { break; } } count=0; // ¥Þ¥Ã¥×°ÜÆ° while (true) { go_xside3(LEFT); if (count==2) { break; } go_xside3(RIGHT); if (count==2) { break; } } Wait(CT); count=0; while (true) { go_xside2(LEFT); if (count==3) { break; } go_xside2(RIGHT); if (count==3) { break; } } Off(OUT_BC); } // ¥é¥¤¥ó¥È¥ì¡¼¥¹ÍÑ¥¿¥¤¥äÀ©¸æ¦¥×¥í¥°¥é¥à(MASTER) //mainÉôʬ task main() { SetSensorLight(S1); SetSensorLowspeed(S2); // ¥¹¥¿¡¼¥ÈÃÏÅÀ¤«¤é¥³¡¼¥¹¤Ë¾è¤ë¤Þ¤Ç¤Î¹ÔÆ° start_action(); // ´Ì½¸¤á¤È´Ì·ú¤Æ¤½¤ì¤¾¤ì2²ó¤º¤Ä phase1(); can_build1(); phase2(); can_build2(); // ¥³¡¼¥¹³°¤Ø¤ÎΥæ¤òÄêµÁ end_action(); }
¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï²¼¤Î¤è¤¦¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ´Ì¤ò£´¤Ä½¸¤á¤Æ¤Ï¥´¡¼¥ë¤Ë¸þ¤«¤¤¡¢·ú¤Æ½ª¤ï¤ì¤Ð¤Þ¤¿£´¤Ä½¸¤á¤Æ¥´¡¼¥ë¤Ë¸þ¤«¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£
¤Þ¤ºphase1()¤Ç¤Ï¾å¿Þ¤Î¡¡ÊÀÖ¡Ë¡¢¢¡ÊÎСˤΤ褦¤Ë¿Ê¤ó¤Ç¤¤¤¤Þ¤¹¡£¥é¥¤¥ó¥È¥ì¡¼¥¹¤Î¤¿¤á¤Ë¥¤¥ó¥é¥¤¥ó´Ø¿ôgo_xside¤¬Æ¯¤¤¤Æ¤¤¤Þ¤¹¡£¤³¤ÎºÇÃæ¡¢´Ì¤ò´¶ÃΤ¹¤ëiscan´Ø¿ô¤¬Æ°¤¤¤Æ¤¤¤Æ¡¢´Ì¤¬¤¢¤ì¤Ð¥¢¡¼¥à¤¬Æ°¤¤¤Æ´Ì¤ò¤±¤ê¾å¤²¤Æ¥ì¡¼¥ë¤ËÆþ¤ì¤ëÆ°ºî¤ò»Ø¼¨¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£´Ì¤òÆþ¤ì¤ëÆ°ºî¤ÎÊý¤ÏARM_main.nxc¤ÎÊý¤Ë½ñ¤«¤ì¤Æ¤¤¤Æ¡¢¥¹¥ì¡¼¥Ö¦¤¬¹Ô¤¤¤Þ¤¹¡£
´Ì¤ò£´¤Ä½¸¤á½ª¤ï¤ë¤Ègo_xside2¤ËÀÚ¤êÂؤï¤ê¤Þ¤¹¡£¤³¤Î´Ø¿ô¤Ç¤Ï¸÷¥»¥ó¥µ¡¼¤¬THRESHOLD2°Ê²¼¡¢¤Ä¤Þ¤ê¸òº¹ÅÀ¡¢µÞ¥«¡¼¥ÖȽÄê¤ò¤·¤¿²ó¿ô¤¬¹ç·×£³²ó¡Ê£´¤ÄÌܤδ̤ò¸«¤Ä¤±¤¿¸å¤Ë¥´¡¼¥ë¤Þ¤Ç¤ËǧÃΤ¹¤ë¿ô¡Ë¤Ë¤Ê¤ë¤È´Ì¤ò·ú¤Æ¤ë¤¿¤á¤Î°ÜÆ°ºî¶Ècan_build1¤¬»Ï¤Þ¤ê¤Þ¤¹¡£
can_build1¤Ç¤Ï¤Þ¤º¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤Ç£´£µÅÙ±¦¤ËÀû²ó¤·¤Æ¤½¤Î¸åľ¿Ê¤·¤Æ¥´¡¼¥ëÃæ±ü¤Ë°ÜÆ°¤·¤Æ´Ì¤ò·ú¤Æ¤ëºî¶È¤ò¤¹¤ë¤è¤¦¤Ë¥¹¥ì¡¼¥Ö¤Ë»Ø¼¨¤òÁ÷¤ê¤Þ¤¹¡£
·ú¤Æ½ª¤ï¤Ã¤¿¤È¤¤¤¦»Ø¼¨¤ò¼õ¤±¼è¤ë¤È¡¢¥Ð¥Ã¥¯¤·¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÌá¤ê¤Þ¤¹¡£
¤³¤Î¤¢¤È¡¢£²²óÌܤδ̽¸¤á¤Î¤¿¤á¤Ëphase2¤Ë°Ü¤ê¤Þ¤¹¡£
phase2¤Ç¤Ï¾å¿Þ¤Î£¡ÊÀġˤΤ褦¤Ë¿Ê¤ó¤Ç¤¤¤¤Þ¤¹¡£
go_xside´Ø¿ô¤¬Æ¯¤¤¤Æ¤¤¤Æ¡¢¥´¡¼¥ë¤«¤é½Ðȯ¤·¤¿¸å¡¢¥Ø¥¢¥Ô¥ó¥«¡¼¥Ö¤Î¤È¤³¤í¤«¤éľ¿Ê¤·¤ÆÎ٤Υ³¡¼¥¹¤Ø°ÜÆ°¤·¤Æ¡¢´Ì¤ò½¸¤á¤Æ¤¤Þ¤¹¡£½¸¤á½ª¤ï¤Ã¤¿¤égo_xside3¤¬Æ¯¤¤¤Æ£²¤Ä¤Î¥³¡¼¥¹¤Î¤Ä¤Ê¤®Ìܤò°ÜÆ°¤·¤Þ¤¹¡£¤½¤Î¸å¡¢go_xside2¤ò»È¤Ã¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤Þ¤Ç°ÜÆ°¡¢¤½¤Î¸å¡¢´Ì¤ò·ú¤Æ¤ë¤¿¤á¤Îcan_build2¤Ë°Ü¤ê¤Þ¤¹¡£
can_build2¤Ç¤Ï¡¢¸òº¹ÅÀ¤Ç±¦£´£µÅÙ¤ËÀû²ó¤·¤¿¤¢¤È¡¢¤½¤Î¾ì¤Ç´Ì¤ò·ú¤Æ¤ë¤è¤¦¤Ë¥¹¥ì¡¼¥Ö¦¤Ë»Ø¼¨¤ò½Ð¤·¤Þ¤¹¡£´Ì¤ò·ú¤Æ½ª¤ï¤Ã¤¿¤È¤¤¤¦»Ø¼¨¤ò¼õ¤±¼è¤ë¤È¡¢¥³¡¼¥¹¤òΥ椷¤Æ½ªÎ»¤¹¤ë¤¿¤á¤Îend_action´Ø¿ô¤Ë°Ü¤ê¤Þ¤¹¡£
end_action¤Ç¤Ï¡¢·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤¤è¤¦¤Ë¡¢½½Ê¬²¼¤¬¤Ã¤¿¤¢¤È¡¢Àû²ó¸å¡¢Ä¾¿Ê¤·¥³¡¼¥¹¤«¤éΥ椷¤Æ½ªÎ»¤·¤Þ¤¹¡£
¥¢¡¼¥àÀ©¸æ¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£
¥Þ¥¹¥¿¡¼¤Ç¤¢¤ë¾å¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë¥×¥í¥°¥é¥à¤Ç¤¢¤ëTIRE_main.nxc¤«¤é¤Î»Ø¼¨¤ò¼õ¤±¼è¤Ã¤Æ´Ì¤ò²ó¼ý¤·¤¿¤ê¡¢´Ì¤ò·ú¤Æ¤¿¤ê¤È¤¤¤Ã¤¿¹ÔÆ°¤ò¤·¤Þ¤¹¡£
#define DT 1 #define CT 250 // ½³¤ê¾å¤² void hit() { // ½³¤ê RotateMotor(OUT_A,100,270); Wait(3000); Off(OUT_A); Wait(DT); // Ìᤷ RotateMotor(OUT_A,-20,270); Wait(3000); Off(OUT_A); Wait(DT); SendResponseNumber(MAILBOX2,1); PlaySound(SOUND_UP); } void build() { // ÍÞ¤¨¥¢¡¼¥à¤òÆ°¤«¤¹ RotateMotor(OUT_C,20,120); Wait(CT); Off(OUT_C); // ¾å¤²¤ë ResetTachoCount(OUT_B); while (MotorTachoCount(OUT_B)>-20) { OnFwdReg(OUT_B,-15,OUT_REGMODE_SPEED); PlaySound(SOUND_UP); } Off(OUT_B); // ÍÞ¤¨³°¤¹ RotateMotor(OUT_C,-20,120); Wait(CT); Off(OUT_C); // ·ú¤Æ½ª¤ï¤ê¤Î¹ç¿Þ SendResponseNumber(MAILBOX4,1); // ¼ýǼ¹ç¿Þ¤òÂÔ¤Ä int ord=0; do { ReceiveRemoteNumber(MAILBOX5,true,ord); } while (!ord); // ¼ýǼ ResetTachoCount(OUT_B); while (MotorTachoCount(OUT_B)<30) { OnFwdReg(OUT_B,1,OUT_REGMODE_SPEED); PlaySound(SOUND_DOWN); } Off(OUT_B); Wait(DT); } // ¥¢¡¼¥àÉômain task main() { int msg; while (true) { msg=0; // ½³¤ê¾å¤²¤ò»ØÎá¤ò³Îǧ ReceiveRemoteNumber(MAILBOX1,true,msg); if (msg) { msg=0; hit(); } // ´Ì·ú¤Æ¤Î»ØÎá¤ò³Îǧ ReceiveRemoteNumber(MAILBOX3,true,msg); if (msg) { msg=0; build(); } } }
´Ì¤ò½¸¤á¤ëÃʳ¬¤Ç¤Ï¡¢¥Þ¥¹¥¿¡¼¤ÎÊý¤¬´Ì¤ò¸«¤Ä¤±¤ë¤È¡¢´Ì¤ò¥ì¡¼¥ë¤Ë½³¤ê¤¤¤ì¤ëhit´Ø¿ô¤òÆ°¤«¤¹¤è¤¦¤Ë»Ø¼¨¤¬Á÷¤é¤ì¤Æ¤¤Þ¤¹¡£´Ø¿ôhit¤Ç¤Ï¥¢¡¼¥à¤Ç´Ì¤òÅݤ·¤¿¸å¤½¤Î¤Þ¤Þ¥ì¡¼¥ë¤Ë½³¤ê¤¤¤ì¤Þ¤¹¡£
´Ì¤ò·ú¤Æ¤ëÃʳ¬¤Ë¤Ê¤ë¤È¡¢¥Þ¥¹¥¿¡¼¤ÎÊý¤«¤é»Ø¼¨¤¬Á÷¤é¤ì¤Æ¤¤Æ¡¢´Ì¤ò·ú¤Æ¤ëºî¶È¤ò¤¹¤ë´Ø¿ôbuild¤òÆ°¤«¤·¤Þ¤¹¡£
´Ø¿ôbuild¤Ç¤Ï¡¢·ú¤Æ¤ë¤È¤¤Ë¥¿¥ï¡¼¤Î²¼¤ÎÊý¤ò»Ù¤¨¤ë¤¿¤á¤ÎÏÓ¤òÆ°¤«¤·¤Æ´Ì¤¬Åݤì¤Ê¤¤¤è¤¦¤Ë¤·¤¿¸å¡¢¥ì¡¼¥ë¼«ÂΤò·ú¤Æ¤Æ´Ì¤ò·ú¤Æ¤Þ¤¹¡£
´Ì¤ò·ú¤Æ½ª¤¨¤¿¤é¥Þ¥¹¥¿¡¼¤ÎÊý¤Ë»Ø¼¨¤òÁ÷¤ê¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¼è¤Ã¤¿¥Þ¥¹¥¿¡¼Â¦¤Ï¡¢¥ì¡¼¥ë¤ä¥¢¡¼¥à¤ò³ÊǼ¤·¤¿¤È¤¤Ë·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤ÄøÅ٤˲¼¤¬¤Ã¤¿¸å¡¢¥¹¥ì¡¼¥Ö¦¤Ë¥¢¡¼¥à¤Ê¤É¤Î³ÊǼ¤Î»Ù»ý¤òÁ÷¤Ã¤Æ¤¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¤¿¥¹¥ì¡¼¥Ö¦¤Ï³ÊǼºî¶È¤ò¤·¤Þ¤¹¡£
³ÊǼºî¶È¤¬½ª¤ï¤ë¤È¡¢¥Þ¥¹¥¿¡¼Â¦¤Ë»Ø¼¨¤ò½Ð¤·¤Æ¡¢ºÆ¤Ó´Ì½¸¤á¤Îºî¶È¤Ê¤É¤ËÌá¤ê¤Þ¤¹¡£
¾å¤Ç¤Ï¤º¤¤¤Ö¤ó¥¹¥à¡¼¥º¤Ë´Û¤ò·ú¤Æ¤ëºî¶È¤Þ¤Ç¤¤¤±¤ë¤è¤¦¤Ê¤³¤È¤ò½ñ¤¤¤Æ¤Þ¤¹¤¬¡¢¼ÂºÝ¤ä¤Ã¤Æ¤ß¤ë¤È¤Þ¤Ã¤¿¤¯¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
´Ì¤ò½³¤ê¤¤¤ì¤Æ´Ì¤ò½¸¤á¤ëºî¶È¤ÏͽÁ۰ʾå¤Ë¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¡£¤¿¤À¤·¡¢ËÜÂΤ¬¤ä¤¿¤é¤ÈŤ¤¤Î¤Ç¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤ÎºÇÃæ¤Ë¥«¡¼¥Ö¤ò¶Ê¤¬¤Ã¤¿¤ê¤·¤Æ¤¤¤ë¤È¡¢¤½¤ÎŤ¤ËÜÂΤǥ³¡¼¥¹¾å¤Î´Ì¤ò¤Ê¤®Åݤ·¤Æ¤·¤Þ¤¤´Ì¤¬¼è¤ì¤Ê¤¤¾õ¶·¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£
¤Þ¤¿¡¢ËÜÂΤ¬½Å¤¹¤®¤Æ¸åÎؤ¬³ê¤é¤«¤ËÆ°¤«¤º¤Ë¤½¤â¤½¤â¤¦¤Þ¤¯¿Ê¤ß¤Þ¤»¤ó¤Ç¤·¤¿¡£¤³¤Î¤»¤¤¤Ç¥é¥¤¥ó¥È¥ì¡¼¥¹¤¬ÉÔ°ÂÄê¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¡¢¥´¡¼¥ë¤Ë¤¿¤É¤êÃ失¤Þ¤»¤ó¤Ç¤·¤¿¡£
´Ì¤ò·ú¤Æ¤ëºî¶È¤Ë¤Ä¤¤¤Æ¤â¡¢´Ì¤òÅݤµ¤Ê¤¤¤è¤¦¤Ë¤æ¤Ã¤¯¤ê¤È¥ì¡¼¥ë¤ò·ú¤Æ¤ëͽÄê¤Ç¤·¤¿¤¬¡¢¤æ¤Ã¤¯¤ê¾å¤²¤ë¤¿¤á¤Ë¥â¡¼¥¿¡¼¤Î¥Ñ¥ï¡¼¤ò¤«¤Ê¤êÄã¤á¤Ë¤·¤Æ¥ì¡¼¥ë¤ò·ú¤Æ¤è¤¦¤È¤¹¤ë¤È¡¢¥ì¡¼¥ë¤È´Ì¤Î½Å¤µ¤Ç¤¦¤Þ¤¯¾å¤¬¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£¤À¤«¤é¤È¤¤¤Ã¤Æ¡¢¤¢¤Þ¤ê¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤ÈÀª¤¤¤¬¤Ä¤¤¹¤®¤Æ´Ì¤¬Åݤì¤Æ¤·¤Þ¤¦¿´ÇÛ¤¬¤¢¤Ã¤¿¤Î¤Ç¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
¼ÂºÝ¤ËÆ°¤«¤·¤Æ¤ß¤ë¤ÈÁ´Á³¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
¤³¤ì¤ò²þÁ±¤¹¤ë¤Ë¤Ï¡¢¤Þ¤º¥í¥Ü¥Ã¥È¤ò¤â¤Ã¤È;͵¤Î¤¢¤ëÀ߷פˤ¹¤ë¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£
¤¿¤È¤¨¤Ð¡¢¸åÎؤò¤â¤Ã¤È¶¯²½¤·¤Æ¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤Ë»Ù¾ã¤¬½Ð¤Ê¤¤¤è¤¦¤Ë½ÐÍè¤ì¤Ð¤è¤«¤Ã¤¿¤Ç¤¹¡£
¤Þ¤¿¡¢´Ì¤ò·ú¤Æ¤ë¤È¤¤Ë¥ì¡¼¥ë¤ò¾å¤²¤ë¤¿¤áÆ°ÎϤȤ·¤Æ¥â¡¼¥¿¡¼¤ò»È¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¥ì¡¼¥ë¤È¥â¡¼¥¿¡¼¤Î´Ö¤Ë¤â¤Ã¤È¥®¥¢¤òÉÕ¤±¤Æ¥â¡¼¥¿¡¼¤ò¤¿¤¯¤µ¤ó²ó¤·¤Æ¤â¾¯¤·¤º¤Ä¤·¤«¥ì¡¼¥ë¤¬Æ°¤«¤Ê¤¤¤è¤¦¤Ë¤¹¤ì¤Ð¡¢´Ì¤¬Åݤ줿¤ê¡¢¥ì¡¼¥ë¤¬»ý¤Á¾å¤¬¤é¤Ê¤¤¤È¤¤¤Ã¤¿¿´ÇÛ¤¬²ò¾Ã¤Ç¤¤¿¤È»×¤¤¤Þ¤¹¡£
¥é¥¤¥ó¥È¥ì¡¼¥¹Éôʬ¤Ë¤Ä¤¤¤Æ¤Ï¡¢Á°²ó¤Î²ÝÂê¤Î»þ¤è¤ê¤â¤è¤ê°ÂÄꤷ¤¿»ÅÁȤߤˤ·¤¿¤Ä¤â¤ê¤Ç¤·¤¿¤¬¡¢Â礤¤Æ¹ÂΤΥí¥Ü¥Ã¥ÈÍѤËÄ´À°¤¬¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£¤ä¤Ï¤êPIDÀ©¸æ¤Ï³Æ¼ï¥²¥¤¥ó¤ÎÃͤÎÎɤ¤Ä´À°ÊýË¡¤ò³ÎΩ¤·¤Ê¤¤¤ÈÆñ¤·¤«¤Ã¤¿¤Ç¤¹¡£
´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ë¤Ä¤¤¤Æ¤â¡¢·ë¹½Â绨ÇĤÊÆ°ºî¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤È»×¤¤¤Þ¤¹¡£´Ì¤ò½³¤ê¤¤¤ì¤ëÉôʬ¤Ï¥í¥Ü¥Ã¥È¤ÎÊý¤¬¤¦¤Þ¤¯ºî¤ì¤Æ¤¤¤¿¤Î¤Ç¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¤¬¡¢´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ï¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤â²þÁ±¤¹¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£¥ì¡¼¥ë¤ò¾å¤²¤ëºî¶È¤Ç¤Ï¡¢¥Ñ¥ï¡¼¤ò²¼¤²¤¹¤®¤Æ¤â¾å¤¬¤é¤Ê¤¤¤·¡¢¥Ñ¥ï¡¼¤ò¾å¤²¤¹¤®¤Æ¤â´Ì¤¬Åݤì¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤âŬÀڤʥѥĴÀ°¤ò¤¹¤ë¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£