2013b/Member/michaegon/Mission2
¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¤·¤ÆºîÀ®
[
¥È¥Ã¥×
] [
¿·µ¬
|
°ìÍ÷
|
¸¡º÷
|
ºÇ½ª¹¹¿·
|
¥Ø¥ë¥×
|
¥í¥°¥¤¥ó
]
³«»Ï¹Ô:
Ìܼ¡
#contents
*²ÝÂê2ÆâÍÆ [#vb71dca6]
>2Âæ¤Î¥í¥Ü¥Ã¥È¤Ç¶õ¤´Ì¤ò¼ý½¸¤·¡¢¥´¡¼¥ë¤Ë¶õ¤´Ì¤Ë¤Ê¤ë¤Ù¤¯¹â¤¯ÀѤ߾夲¤ë
>
>´ðËܥ롼¥ë
>¶¥µ»»þ´Ö¤Ï¿³È½¤¬Â³¹ÔÉÔǽ¤ÈȽÃǤ¹¤ë¤Þ¤Ç¡¢¤¢¤ë¤¤¤Ï¥ê¥¿¥¤¥¢¤¹¤ë¤Þ¤Ç¡£
>¿Þ¤Îº¸²¼¤Î¶ù¤«¤é¥¹¥¿¡¼¥È¤¹¤ë¡£¥í¥Ü¥Ã¥È¤¬»æ¤«¤é¤Ï¤ß½Ð¤Ê¤¤ÈϰϤDzÄǽ¤Ê¸Â¤ê¤Ë¶ù¤ËÇÛÃÖ¤¹¤ë¡£
>¶õ¤´Ì¤ò½¸¤á¤Æ¿Þ¤Î¡Ö¥´¡¼¥ë¡×¤È½ñ¤«¤ì¤¿±ß¸Ì¤ÈľÀþ¤Ç°Ï¤Þ¤ì¤ëÎΰè¤Ë¶õ¤´Ì¤ò±¿¤Ö
>¤Ê¤ë¤Ù¤¯¹â¤¯¶õ¤´Ì¤òÀѤ߾夲¤ë
>±¿¤Ó½ª¤ï¤Ã¤¿¸å¡¢¤¢¤ë¤¤¤ÏÀѤ߾夲¤¿¸å¤Ï¥í¥Ü¥Ã¥È¤Ï¥´¡¼¥ë¤ÎÎΰ褫¤é³°¤Ë½Ð¤ë¤³¤È¡£¤Þ¤¿¶õ¤´Ì¤ÈÀÜ¿¨¤·¤Æ¤¤¤¿¤Ï¤¤¤±¤Ê¤¤¡£
>³«»Ï¤Î¹ç¿Þ¤«¤é£µÉÃ°ÊÆâ¤Ë¥¹¥¿¡¼¥È¥Ü¥¿¥ó¤ò²¡¤¹ºî¶È¤ò´°Î»¤¹¤ë¤³¤È¡£
>¶¥µ»¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¡¢¥í¥Ü¥Ã¥È¤Ë¿¨¤Ã¤¿¤ê¿Í´Ö¤¬±ó³Ö¤ÇÁàºî¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
>ÅÓÃæ¤Ç¤¦¤Þ¤¯Æ°¤«¤Ê¤¯¤Ê¤Ã¤¿¾ì¹ç¡¢£±²ó¸Â¤êºÆ¥¹¥¿¡¼¥È¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡ÊºÆ¥¹¥¿¡¼¥È¤ÎºÝ¤ËÊÌ¥×¥í¥°¥é¥à¤Çµ¯Æ°¤·¤Æ¤è¤¤¡Ë¡£
°Ê¾å[[2013b/Mission2]]¤è¤ê°úÍÑ
&aname(map);
¥³¡¼¥¹¿Þ
#ref(robocon2013b.png);
*¥á¥ó¥Ð¡¼ [#zab397a9]
[[dyuma>2013b/Member/dyuma/Mission2]]~
¥í¥Ü¥Ã¥ÈÀ½ºî¡Ê+¥í¥Ü¥Ã¥È´ÉÍý¡Ë¡¦¥×¥í¥°¥é¥ß¥ó¥°¤È¤É¤Á¤é¤â¤³¤Ê¤·¤Æ¤¤¤ëÃæ´Ö´ÉÍý¿¦¡£
[[pepo>2013b/Member/pepo/Mission2]]~
¥í¥Ü¥Ã¥È¤òÁȤޤ»¤¿¤éÈà¤Î±¦¤Ë½Ð¤ë¤â¤Î¤Ï¤¤¤Ê¤¤¡£¡Ê¤¿¤À¤·¾ðÊ󹩳زʡË
michaegon~
¤³¤Î¥Ú¡¼¥¸¤ÎÃø¼Ô~
¥×¥í¥°¥é¥à¤ÎÊý¤ò¤ä¤Ã¤Æ¤Þ¤¹¡£
*¥í¥Ü¥Ã¥È³µÍ× [#t8caacae]
º£²ó»ÈÍѤ·¤¿¥í¥Ü¥Ã¥È¤Ç¤¹¡£Æ¹ÂΤ¬¤«¤Ê¤êŤ¤¤Ç¤¹¡£
#ref(robo2.jpg);
ƹÂÎÃæ±û¤Î¥ì¡¼¥ë¤Ë´Ì¤¬£´ËÜ¤Þ¤ÇÆþ¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
#ref(robo2-1.jpg);
´Ì¤ò¤³¤ÎÏӤDz¥¤Ã¤Æ¥ì¡¼¥ë¤ËÆþ¤ì¤ë»ÅÁȤߤǤ¹¡£
#ref(robo2-2.jpg);
#ref(robo2-3.jpg);
#ref(robo2-4.jpg);
´Ì¤ò´¶ÃΤ¹¤ë¤Î¤Ë¤Ï¤³¤ÎͲ»ÇÈ¥»¥ó¥µ¡¼¤ò»È¤¤¤Þ¤¹¡£
#ref(robo2-7.jpg);
¥ì¡¼¥ë¤Î¸å¤í¤«¤é´Ì¤¬Ï³¤ì¤Ê¤¤¤è¤¦¤Ë¥¹¥È¥Ã¥Ñ¡¼·¯¤¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£
#ref(robo2-8.jpg);
´Ì¤ò¥ì¡¼¥ë¤ËµÍ¤á¹þ¤ó¤À¤é¡¢´Ì¤òÍÞ¤¨¤ë¤¿¤á¤ÎÏӤǴ̤òÍÞ¤¨¤Ê¤¬¤é¥ì¡¼¥ë¼«¿È¤òΩ¤Á¾å¤²¤Þ¤¹¡£
#ref(robo2-5.jpg);
#ref(robo2-6.jpg);
*¥×¥í¥°¥é¥à³µÍ× [#u38c8111]
** ¥é¥¤¥ó¥È¥ì¡¼¥¹Éôʬ¤Î»ÅÍÍ [#bea8657d]
º£²ó¤âPIDÀ©¸æ¤òÍøÍѤ·¤¿¥é¥¤¥ó¥È¥ì¡¼¥¹¥×¥í¥°¥é¥à¤òÁȤó¤Ç¤ß¤Þ¤·¤¿¡£~
Á°²ó¤ÎÈ¿¾Ê¤òÀ¸¤«¤·¤Æ¤è¤ê°ÂÄꤷ¤ÆÀ®¸ù¤Ç¤¤ë¤â¤Î¤Ë²þÎɤ·¤Þ¤·¤¿¡£
PIDÀ©¸æ¤Ë¤Ä¤¤¤Æ¤Ï[[Á°²ó>2013b/Member/michaegon/Mission1]]¤Î¥Ú¡¼¥¸¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
***¸òº¹ÅÀ¡¦µÞ¥«¡¼¥ÖȽÄê [#dd382873]
´ðËÜŪ¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹¤Î¥×¥í¥°¥é¥à¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£
#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À©¸æ¤ò»È¤Ã¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤·¤Æ¤¤¤Þ¤¹¡£~
Á°²ó¤Ï¡¢¥³¡¼¥¹¤Î·Á¾õ¤òÍøÍѤ·¤ÆÎϵ»¤Ç¸òº¹ÅÀ¤òÆÍÇˤ¹¤ë¥×¥í¥°¥é¥à¤À¤Ã¤¿¤»¤¤¤Ç¡¢¤º¤¤¤Ö¤ó¥³¡¼¥¹£±¼þ²ó¤ê¤¤ì¤ë³ÎΨ¤¬Ä㤤¤Î¤¬·èÄêŪ¤Ê·çÅÀ¤Ç¤·¤¿¡£~
¤½¤³¤Ç¡¢º£²ó¤Ï¤â¤Ã¤ÈÀ®¸ùΨ¤¬¹â¤¤¸òº¹ÅÀÄ̲áÊýË¡¤ò¹Í¤¨¤Þ¤·¤¿¡£~
#ref(cross.png);
º£²ó¤ÏïçÃͤò¥é¥¤¥ó¤Î¶³¦¾å¤È¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²Ãʳ¬¤ËÀßÄꤷ¤Þ¤·¤¿¡Ê¥é¥¤¥ó¤ÎÃæ±û¤Ë¹Ô¤¯¤Û¤É¸÷¥»¥ó¥µ¡¼¤ÎÃͤϾ®¤µ¤¯¤Ê¤ê¤Þ¤¹¡Ë¡£~
ľÀþ¤ä¥«¡¼¥Ö¤Î³°Â¦¡¢´Ë¤ä¤«¤Ê¥«¡¼¥Ö¤ÎÆâ¦¤òÁö¤Ã¤Æ¤¤¤ë¤È¤¤Ï¡¢¥é¥¤¥ó¤Î¶³¦¾åÉÕ¶á¤òÁö¹Ô¤·¤Æ¤¤¤Þ¤¹¤¬¡¢µÞ¥«¡¼¥Ö¤ÎÆâ¦¤ä¸òº¹ÅÀ¤Ëº¹¤·³Ý¤«¤ë¤È¡¢¥í¥Ü¥Ã¥È¤¬¥³¡¼¥¹¤ÎÊѲ½¤ËÄɤ¤¤Ä¤±¤º¤Ë¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²¤ÄÌܤÎïçÃͤò±Û¤¨¤Æ¤¤Þ¤¹¡£~
¤¹¤ë¤È¡¢go_xsideÆâ¤Îifʸ¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
if (SENSOR_1<THRESHOLD2) {
OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn); // Ä̾ï¤È¤ÏµÕ¸þ¤¤Ø¶Ê¤¬¤ë
Wait(CT);
break;
}
¤³¤Îifʸ¤Ç¤ÏÄ̾ï¥é¥¤¥óÆâ¤Ë¥í¥Ü¥Ã¥È¤¬Æþ¤Ã¤¿¤È¤¡¢¥é¥¤¥ó³°¤Ø¸þ¤±¤Æ¶Ê¤¬¤ê¤À¤¹¤È¤³¤í¤òCT¥ß¥êÉô֤À¤±¥é¥¤¥ó¤ÎÆâ¦¤Ë¸þ¤±¤ÆÁö¤ê¤Þ¤¹¡£~
¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢¥é¥¤¥óÃæ±û¤ò¼Ð¤á¤Ë²£Àڤäƥ饤¥ó¤ÎÈ¿ÂЦ¡Ê¥«¡¼¥ÖÃæ¤Ê¤é¥«¡¼¥Ö¤Î³°Â¦¡¢¸òº¹ÅÀ¤Ê¤é¸òº¹ÅÀÃæ±û¡Ë¤Ø°Üư¤·¤Þ¤¹¡£~
¤³¤Î¤è¤¦¤Ë¡¢¸òº¹ÅÀ¤ò¼Ð¤á¤Ë²£ÀڤäƤ錄¤ê¤¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£~
¤³¤ÎÊýË¡¤Ç¤Ï¡¢Á°²ó¤ÎÎϵ»Ä̲á¤è¤ê¤âKI¤Ê¤É¤ÎÃͤäÅÅÃÓ»ÄÎ̤ʤɤËÀ®¸ùΨ¤¬º¸±¦¤µ¤ì¤º¤Ë°ÂÄꤷ¤¿Áö¹Ô¤ò¼Â¸½¤Ç¤¤ë¤¦¤¨¡¢¤É¤Ã¤Á¼þ¤ê¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ¤â£±¼þ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¢°Ê¾å¤òÍøÍѤ·¤Æ¡¢º£²ó¤Î¤¿¤á¤Ëºî¤Ã¤¿¥×¥í¥°¥é¥à¤Ç¤¹¡£
*** TIRE_main.nxc [#e1f19394]
¥¿¥¤¥ä¤òÀ©¸æ¤·¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£~
#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();
}
¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï²¼¤Î¤è¤¦¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ´Ì¤ò£´¤Ä½¸¤á¤Æ¤Ï¥´¡¼¥ë¤Ë¸þ¤«¤¤¡¢·ú¤Æ½ª¤ï¤ì¤Ð¤Þ¤¿£´¤Ä½¸¤á¤Æ¥´¡¼¥ë¤Ë¸þ¤«¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£
#ref(map2.png);
¤Þ¤º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¤Ç¤Ï¡¢·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤¤è¤¦¤Ë¡¢½½Ê¬²¼¤¬¤Ã¤¿¤¢¤È¡¢Àû²ó¸å¡¢Ä¾¿Ê¤·¥³¡¼¥¹¤«¤éΥæ¤·¤Æ½ªÎ»¤·¤Þ¤¹¡£
** ´Ì¤òư¤«¤¹Éôʬ¤Î»ÅÍÍ [#bd227f2c]
*** ARM_main.nxc [#gc20b1f4]
¥¢¡¼¥àÀ©¸æ¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£~
¥Þ¥¹¥¿¡¼¤Ç¤¢¤ë¾å¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë¥×¥í¥°¥é¥à¤Ç¤¢¤ë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¤Ç¤Ï¥¢¡¼¥à¤Ç´Ì¤òÅݤ·¤¿¸å¤½¤Î¤Þ¤Þ¥ì¡¼¥ë¤Ë½³¤ê¤¤¤ì¤Þ¤¹¡£
#ref(robo2-4.jpg);
´Ì¤ò·ú¤Æ¤ëÃʳ¬¤Ë¤Ê¤ë¤È¡¢¥Þ¥¹¥¿¡¼¤ÎÊý¤«¤é»Ø¼¨¤¬Á÷¤é¤ì¤Æ¤¤Æ¡¢´Ì¤ò·ú¤Æ¤ëºî¶È¤ò¤¹¤ë´Ø¿ôbuild¤òư¤«¤·¤Þ¤¹¡£~
´Ø¿ôbuild¤Ç¤Ï¡¢·ú¤Æ¤ë¤È¤¤Ë¥¿¥ï¡¼¤Î²¼¤ÎÊý¤ò»Ù¤¨¤ë¤¿¤á¤ÎÏÓ¤òư¤«¤·¤Æ´Ì¤¬Åݤì¤Ê¤¤¤è¤¦¤Ë¤·¤¿¸å¡¢¥ì¡¼¥ë¼«ÂΤò·ú¤Æ¤Æ´Ì¤ò·ú¤Æ¤Þ¤¹¡£~
#ref(robo2-6.jpg);
´Ì¤ò·ú¤Æ½ª¤¨¤¿¤é¥Þ¥¹¥¿¡¼¤ÎÊý¤Ë»Ø¼¨¤òÁ÷¤ê¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¼è¤Ã¤¿¥Þ¥¹¥¿¡¼Â¦¤Ï¡¢¥ì¡¼¥ë¤ä¥¢¡¼¥à¤ò³ÊǼ¤·¤¿¤È¤¤Ë·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤ÄøÅ٤˲¼¤¬¤Ã¤¿¸å¡¢¥¹¥ì¡¼¥Ö¦¤Ë¥¢¡¼¥à¤Ê¤É¤Î³ÊǼ¤Î»Ù»ý¤òÁ÷¤Ã¤Æ¤¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¤¿¥¹¥ì¡¼¥Ö¦¤Ï³ÊǼºî¶È¤ò¤·¤Þ¤¹¡£~
³ÊǼºî¶È¤¬½ª¤ï¤ë¤È¡¢¥Þ¥¹¥¿¡¼Â¦¤Ë»Ø¼¨¤ò½Ð¤·¤Æ¡¢ºÆ¤Ó´Ì½¸¤á¤Îºî¶È¤Ê¤É¤ËÌá¤ê¤Þ¤¹¡£
*¼ÂºÝ¤Ëư¤«¤·¤Æ¤ß¤¿... [#x7f1c2ad]
¾å¤Ç¤Ï¤º¤¤¤Ö¤ó¥¹¥à¡¼¥º¤Ë´Û¤ò·ú¤Æ¤ëºî¶È¤Þ¤Ç¤¤¤±¤ë¤è¤¦¤Ê¤³¤È¤ò½ñ¤¤¤Æ¤Þ¤¹¤¬¡¢¼ÂºÝ¤ä¤Ã¤Æ¤ß¤ë¤È¤Þ¤Ã¤¿¤¯¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
´Ì¤ò½³¤ê¤¤¤ì¤Æ´Ì¤ò½¸¤á¤ëºî¶È¤ÏͽÁ۰ʾå¤Ë¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¡£¤¿¤À¤·¡¢ËÜÂΤ¬¤ä¤¿¤é¤ÈŤ¤¤Î¤Ç¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤ÎºÇÃæ¤Ë¥«¡¼¥Ö¤ò¶Ê¤¬¤Ã¤¿¤ê¤·¤Æ¤¤¤ë¤È¡¢¤½¤ÎŤ¤ËÜÂΤǥ³¡¼¥¹¾å¤Î´Ì¤ò¤Ê¤®Åݤ·¤Æ¤·¤Þ¤¤´Ì¤¬¼è¤ì¤Ê¤¤¾õ¶·¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£
¤Þ¤¿¡¢ËÜÂΤ¬½Å¤¹¤®¤Æ¸åÎØ¤¬³ê¤é¤«¤Ëư¤«¤º¤Ë¤½¤â¤½¤â¤¦¤Þ¤¯¿Ê¤ß¤Þ¤»¤ó¤Ç¤·¤¿¡£¤³¤Î¤»¤¤¤Ç¥é¥¤¥ó¥È¥ì¡¼¥¹¤¬ÉÔ°ÂÄê¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¡¢¥´¡¼¥ë¤Ë¤¿¤É¤êÃ失¤Þ¤»¤ó¤Ç¤·¤¿¡£
´Ì¤ò·ú¤Æ¤ëºî¶È¤Ë¤Ä¤¤¤Æ¤â¡¢´Ì¤òÅݤµ¤Ê¤¤¤è¤¦¤Ë¤æ¤Ã¤¯¤ê¤È¥ì¡¼¥ë¤ò·ú¤Æ¤ëͽÄê¤Ç¤·¤¿¤¬¡¢¤æ¤Ã¤¯¤ê¾å¤²¤ë¤¿¤á¤Ë¥â¡¼¥¿¡¼¤Î¥Ñ¥ï¡¼¤ò¤«¤Ê¤êÄã¤á¤Ë¤·¤Æ¥ì¡¼¥ë¤ò·ú¤Æ¤è¤¦¤È¤¹¤ë¤È¡¢¥ì¡¼¥ë¤È´Ì¤Î½Å¤µ¤Ç¤¦¤Þ¤¯¾å¤¬¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£¤À¤«¤é¤È¤¤¤Ã¤Æ¡¢¤¢¤Þ¤ê¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤ÈÀª¤¤¤¬¤Ä¤¤¹¤®¤Æ´Ì¤¬ÅÝ¤ì¤Æ¤·¤Þ¤¦¿´ÇÛ¤¬¤¢¤Ã¤¿¤Î¤Ç¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
*È¿¾ÊÅÀ¡¦²þÁ±ÅÀ [#p4525d91]
**¥í¥Ü¥Ã¥È¤Ë¤Ä¤¤¤Æ [#r5322306]
¼ÂºÝ¤Ëư¤«¤·¤Æ¤ß¤ë¤ÈÁ´Á³¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£~
¤³¤ì¤ò²þÁ±¤¹¤ë¤Ë¤Ï¡¢¤Þ¤º¥í¥Ü¥Ã¥È¤ò¤â¤Ã¤È;͵¤Î¤¢¤ëÀ߷פˤ¹¤ë¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£~
¤¿¤È¤¨¤Ð¡¢¸åÎØ¤ò¤â¤Ã¤È¶¯²½¤·¤Æ¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤Ë»Ù¾ã¤¬½Ð¤Ê¤¤¤è¤¦¤Ë½ÐÍè¤ì¤Ð¤è¤«¤Ã¤¿¤Ç¤¹¡£~
¤Þ¤¿¡¢´Ì¤ò·ú¤Æ¤ë¤È¤¤Ë¥ì¡¼¥ë¤ò¾å¤²¤ë¤¿¤áưÎϤȤ·¤Æ¥â¡¼¥¿¡¼¤ò»È¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¥ì¡¼¥ë¤È¥â¡¼¥¿¡¼¤Î´Ö¤Ë¤â¤Ã¤È¥®¥¢¤òÉÕ¤±¤Æ¥â¡¼¥¿¡¼¤ò¤¿¤¯¤µ¤ó²ó¤·¤Æ¤â¾¯¤·¤º¤Ä¤·¤«¥ì¡¼¥ë¤¬Æ°¤«¤Ê¤¤¤è¤¦¤Ë¤¹¤ì¤Ð¡¢´Ì¤¬Åݤ줿¤ê¡¢¥ì¡¼¥ë¤¬»ý¤Á¾å¤¬¤é¤Ê¤¤¤È¤¤¤Ã¤¿¿´ÇÛ¤¬²ò¾Ã¤Ç¤¤¿¤È»×¤¤¤Þ¤¹¡£
**¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ [#nbbe1536]
¥é¥¤¥ó¥È¥ì¡¼¥¹Éôʬ¤Ë¤Ä¤¤¤Æ¤Ï¡¢Á°²ó¤Î²ÝÂê¤Î»þ¤è¤ê¤â¤è¤ê°ÂÄꤷ¤¿»ÅÁȤߤˤ·¤¿¤Ä¤â¤ê¤Ç¤·¤¿¤¬¡¢Â礤¤Æ¹ÂΤΥí¥Ü¥Ã¥ÈÍѤËÄ´À°¤¬¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£¤ä¤Ï¤êPIDÀ©¸æ¤Ï³Æ¼ï¥²¥¤¥ó¤ÎÃͤÎÎɤ¤Ä´À°ÊýË¡¤ò³ÎΩ¤·¤Ê¤¤¤ÈÆñ¤·¤«¤Ã¤¿¤Ç¤¹¡£
´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ë¤Ä¤¤¤Æ¤â¡¢·ë¹½Â绨ÇÄ¤ÊÆ°ºî¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤È»×¤¤¤Þ¤¹¡£´Ì¤ò½³¤ê¤¤¤ì¤ëÉôʬ¤Ï¥í¥Ü¥Ã¥È¤ÎÊý¤¬¤¦¤Þ¤¯ºî¤ì¤Æ¤¤¤¿¤Î¤Ç¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¤¬¡¢´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ï¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤â²þÁ±¤¹¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£¥ì¡¼¥ë¤ò¾å¤²¤ëºî¶È¤Ç¤Ï¡¢¥Ñ¥ï¡¼¤ò²¼¤²¤¹¤®¤Æ¤â¾å¤¬¤é¤Ê¤¤¤·¡¢¥Ñ¥ï¡¼¤ò¾å¤²¤¹¤®¤Æ¤â´Ì¤¬ÅÝ¤ì¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤âŬÀڤʥѥĴÀ°¤ò¤¹¤ë¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£
½ªÎ»¹Ô:
Ìܼ¡
#contents
*²ÝÂê2ÆâÍÆ [#vb71dca6]
>2Âæ¤Î¥í¥Ü¥Ã¥È¤Ç¶õ¤´Ì¤ò¼ý½¸¤·¡¢¥´¡¼¥ë¤Ë¶õ¤´Ì¤Ë¤Ê¤ë¤Ù¤¯¹â¤¯ÀѤ߾夲¤ë
>
>´ðËܥ롼¥ë
>¶¥µ»»þ´Ö¤Ï¿³È½¤¬Â³¹ÔÉÔǽ¤ÈȽÃǤ¹¤ë¤Þ¤Ç¡¢¤¢¤ë¤¤¤Ï¥ê¥¿¥¤¥¢¤¹¤ë¤Þ¤Ç¡£
>¿Þ¤Îº¸²¼¤Î¶ù¤«¤é¥¹¥¿¡¼¥È¤¹¤ë¡£¥í¥Ü¥Ã¥È¤¬»æ¤«¤é¤Ï¤ß½Ð¤Ê¤¤ÈϰϤDzÄǽ¤Ê¸Â¤ê¤Ë¶ù¤ËÇÛÃÖ¤¹¤ë¡£
>¶õ¤´Ì¤ò½¸¤á¤Æ¿Þ¤Î¡Ö¥´¡¼¥ë¡×¤È½ñ¤«¤ì¤¿±ß¸Ì¤ÈľÀþ¤Ç°Ï¤Þ¤ì¤ëÎΰè¤Ë¶õ¤´Ì¤ò±¿¤Ö
>¤Ê¤ë¤Ù¤¯¹â¤¯¶õ¤´Ì¤òÀѤ߾夲¤ë
>±¿¤Ó½ª¤ï¤Ã¤¿¸å¡¢¤¢¤ë¤¤¤ÏÀѤ߾夲¤¿¸å¤Ï¥í¥Ü¥Ã¥È¤Ï¥´¡¼¥ë¤ÎÎΰ褫¤é³°¤Ë½Ð¤ë¤³¤È¡£¤Þ¤¿¶õ¤´Ì¤ÈÀÜ¿¨¤·¤Æ¤¤¤¿¤Ï¤¤¤±¤Ê¤¤¡£
>³«»Ï¤Î¹ç¿Þ¤«¤é£µÉÃ°ÊÆâ¤Ë¥¹¥¿¡¼¥È¥Ü¥¿¥ó¤ò²¡¤¹ºî¶È¤ò´°Î»¤¹¤ë¤³¤È¡£
>¶¥µ»¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¡¢¥í¥Ü¥Ã¥È¤Ë¿¨¤Ã¤¿¤ê¿Í´Ö¤¬±ó³Ö¤ÇÁàºî¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
>ÅÓÃæ¤Ç¤¦¤Þ¤¯Æ°¤«¤Ê¤¯¤Ê¤Ã¤¿¾ì¹ç¡¢£±²ó¸Â¤êºÆ¥¹¥¿¡¼¥È¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡ÊºÆ¥¹¥¿¡¼¥È¤ÎºÝ¤ËÊÌ¥×¥í¥°¥é¥à¤Çµ¯Æ°¤·¤Æ¤è¤¤¡Ë¡£
°Ê¾å[[2013b/Mission2]]¤è¤ê°úÍÑ
&aname(map);
¥³¡¼¥¹¿Þ
#ref(robocon2013b.png);
*¥á¥ó¥Ð¡¼ [#zab397a9]
[[dyuma>2013b/Member/dyuma/Mission2]]~
¥í¥Ü¥Ã¥ÈÀ½ºî¡Ê+¥í¥Ü¥Ã¥È´ÉÍý¡Ë¡¦¥×¥í¥°¥é¥ß¥ó¥°¤È¤É¤Á¤é¤â¤³¤Ê¤·¤Æ¤¤¤ëÃæ´Ö´ÉÍý¿¦¡£
[[pepo>2013b/Member/pepo/Mission2]]~
¥í¥Ü¥Ã¥È¤òÁȤޤ»¤¿¤éÈà¤Î±¦¤Ë½Ð¤ë¤â¤Î¤Ï¤¤¤Ê¤¤¡£¡Ê¤¿¤À¤·¾ðÊ󹩳زʡË
michaegon~
¤³¤Î¥Ú¡¼¥¸¤ÎÃø¼Ô~
¥×¥í¥°¥é¥à¤ÎÊý¤ò¤ä¤Ã¤Æ¤Þ¤¹¡£
*¥í¥Ü¥Ã¥È³µÍ× [#t8caacae]
º£²ó»ÈÍѤ·¤¿¥í¥Ü¥Ã¥È¤Ç¤¹¡£Æ¹ÂΤ¬¤«¤Ê¤êŤ¤¤Ç¤¹¡£
#ref(robo2.jpg);
ƹÂÎÃæ±û¤Î¥ì¡¼¥ë¤Ë´Ì¤¬£´ËÜ¤Þ¤ÇÆþ¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
#ref(robo2-1.jpg);
´Ì¤ò¤³¤ÎÏӤDz¥¤Ã¤Æ¥ì¡¼¥ë¤ËÆþ¤ì¤ë»ÅÁȤߤǤ¹¡£
#ref(robo2-2.jpg);
#ref(robo2-3.jpg);
#ref(robo2-4.jpg);
´Ì¤ò´¶ÃΤ¹¤ë¤Î¤Ë¤Ï¤³¤ÎͲ»ÇÈ¥»¥ó¥µ¡¼¤ò»È¤¤¤Þ¤¹¡£
#ref(robo2-7.jpg);
¥ì¡¼¥ë¤Î¸å¤í¤«¤é´Ì¤¬Ï³¤ì¤Ê¤¤¤è¤¦¤Ë¥¹¥È¥Ã¥Ñ¡¼·¯¤¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£
#ref(robo2-8.jpg);
´Ì¤ò¥ì¡¼¥ë¤ËµÍ¤á¹þ¤ó¤À¤é¡¢´Ì¤òÍÞ¤¨¤ë¤¿¤á¤ÎÏӤǴ̤òÍÞ¤¨¤Ê¤¬¤é¥ì¡¼¥ë¼«¿È¤òΩ¤Á¾å¤²¤Þ¤¹¡£
#ref(robo2-5.jpg);
#ref(robo2-6.jpg);
*¥×¥í¥°¥é¥à³µÍ× [#u38c8111]
** ¥é¥¤¥ó¥È¥ì¡¼¥¹Éôʬ¤Î»ÅÍÍ [#bea8657d]
º£²ó¤âPIDÀ©¸æ¤òÍøÍѤ·¤¿¥é¥¤¥ó¥È¥ì¡¼¥¹¥×¥í¥°¥é¥à¤òÁȤó¤Ç¤ß¤Þ¤·¤¿¡£~
Á°²ó¤ÎÈ¿¾Ê¤òÀ¸¤«¤·¤Æ¤è¤ê°ÂÄꤷ¤ÆÀ®¸ù¤Ç¤¤ë¤â¤Î¤Ë²þÎɤ·¤Þ¤·¤¿¡£
PIDÀ©¸æ¤Ë¤Ä¤¤¤Æ¤Ï[[Á°²ó>2013b/Member/michaegon/Mission1]]¤Î¥Ú¡¼¥¸¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
***¸òº¹ÅÀ¡¦µÞ¥«¡¼¥ÖȽÄê [#dd382873]
´ðËÜŪ¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹¤Î¥×¥í¥°¥é¥à¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£
#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À©¸æ¤ò»È¤Ã¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤·¤Æ¤¤¤Þ¤¹¡£~
Á°²ó¤Ï¡¢¥³¡¼¥¹¤Î·Á¾õ¤òÍøÍѤ·¤ÆÎϵ»¤Ç¸òº¹ÅÀ¤òÆÍÇˤ¹¤ë¥×¥í¥°¥é¥à¤À¤Ã¤¿¤»¤¤¤Ç¡¢¤º¤¤¤Ö¤ó¥³¡¼¥¹£±¼þ²ó¤ê¤¤ì¤ë³ÎΨ¤¬Ä㤤¤Î¤¬·èÄêŪ¤Ê·çÅÀ¤Ç¤·¤¿¡£~
¤½¤³¤Ç¡¢º£²ó¤Ï¤â¤Ã¤ÈÀ®¸ùΨ¤¬¹â¤¤¸òº¹ÅÀÄ̲áÊýË¡¤ò¹Í¤¨¤Þ¤·¤¿¡£~
#ref(cross.png);
º£²ó¤ÏïçÃͤò¥é¥¤¥ó¤Î¶³¦¾å¤È¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²Ãʳ¬¤ËÀßÄꤷ¤Þ¤·¤¿¡Ê¥é¥¤¥ó¤ÎÃæ±û¤Ë¹Ô¤¯¤Û¤É¸÷¥»¥ó¥µ¡¼¤ÎÃͤϾ®¤µ¤¯¤Ê¤ê¤Þ¤¹¡Ë¡£~
ľÀþ¤ä¥«¡¼¥Ö¤Î³°Â¦¡¢´Ë¤ä¤«¤Ê¥«¡¼¥Ö¤ÎÆâ¦¤òÁö¤Ã¤Æ¤¤¤ë¤È¤¤Ï¡¢¥é¥¤¥ó¤Î¶³¦¾åÉÕ¶á¤òÁö¹Ô¤·¤Æ¤¤¤Þ¤¹¤¬¡¢µÞ¥«¡¼¥Ö¤ÎÆâ¦¤ä¸òº¹ÅÀ¤Ëº¹¤·³Ý¤«¤ë¤È¡¢¥í¥Ü¥Ã¥È¤¬¥³¡¼¥¹¤ÎÊѲ½¤ËÄɤ¤¤Ä¤±¤º¤Ë¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²¤ÄÌܤÎïçÃͤò±Û¤¨¤Æ¤¤Þ¤¹¡£~
¤¹¤ë¤È¡¢go_xsideÆâ¤Îifʸ¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
if (SENSOR_1<THRESHOLD2) {
OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn); // Ä̾ï¤È¤ÏµÕ¸þ¤¤Ø¶Ê¤¬¤ë
Wait(CT);
break;
}
¤³¤Îifʸ¤Ç¤ÏÄ̾ï¥é¥¤¥óÆâ¤Ë¥í¥Ü¥Ã¥È¤¬Æþ¤Ã¤¿¤È¤¡¢¥é¥¤¥ó³°¤Ø¸þ¤±¤Æ¶Ê¤¬¤ê¤À¤¹¤È¤³¤í¤òCT¥ß¥êÉô֤À¤±¥é¥¤¥ó¤ÎÆâ¦¤Ë¸þ¤±¤ÆÁö¤ê¤Þ¤¹¡£~
¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢¥é¥¤¥óÃæ±û¤ò¼Ð¤á¤Ë²£Àڤäƥ饤¥ó¤ÎÈ¿ÂЦ¡Ê¥«¡¼¥ÖÃæ¤Ê¤é¥«¡¼¥Ö¤Î³°Â¦¡¢¸òº¹ÅÀ¤Ê¤é¸òº¹ÅÀÃæ±û¡Ë¤Ø°Üư¤·¤Þ¤¹¡£~
¤³¤Î¤è¤¦¤Ë¡¢¸òº¹ÅÀ¤ò¼Ð¤á¤Ë²£ÀڤäƤ錄¤ê¤¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£~
¤³¤ÎÊýË¡¤Ç¤Ï¡¢Á°²ó¤ÎÎϵ»Ä̲á¤è¤ê¤âKI¤Ê¤É¤ÎÃͤäÅÅÃÓ»ÄÎ̤ʤɤËÀ®¸ùΨ¤¬º¸±¦¤µ¤ì¤º¤Ë°ÂÄꤷ¤¿Áö¹Ô¤ò¼Â¸½¤Ç¤¤ë¤¦¤¨¡¢¤É¤Ã¤Á¼þ¤ê¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ¤â£±¼þ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¢°Ê¾å¤òÍøÍѤ·¤Æ¡¢º£²ó¤Î¤¿¤á¤Ëºî¤Ã¤¿¥×¥í¥°¥é¥à¤Ç¤¹¡£
*** TIRE_main.nxc [#e1f19394]
¥¿¥¤¥ä¤òÀ©¸æ¤·¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£~
#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();
}
¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï²¼¤Î¤è¤¦¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ´Ì¤ò£´¤Ä½¸¤á¤Æ¤Ï¥´¡¼¥ë¤Ë¸þ¤«¤¤¡¢·ú¤Æ½ª¤ï¤ì¤Ð¤Þ¤¿£´¤Ä½¸¤á¤Æ¥´¡¼¥ë¤Ë¸þ¤«¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£
#ref(map2.png);
¤Þ¤º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¤Ç¤Ï¡¢·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤¤è¤¦¤Ë¡¢½½Ê¬²¼¤¬¤Ã¤¿¤¢¤È¡¢Àû²ó¸å¡¢Ä¾¿Ê¤·¥³¡¼¥¹¤«¤éΥæ¤·¤Æ½ªÎ»¤·¤Þ¤¹¡£
** ´Ì¤òư¤«¤¹Éôʬ¤Î»ÅÍÍ [#bd227f2c]
*** ARM_main.nxc [#gc20b1f4]
¥¢¡¼¥àÀ©¸æ¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£~
¥Þ¥¹¥¿¡¼¤Ç¤¢¤ë¾å¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë¥×¥í¥°¥é¥à¤Ç¤¢¤ë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¤Ç¤Ï¥¢¡¼¥à¤Ç´Ì¤òÅݤ·¤¿¸å¤½¤Î¤Þ¤Þ¥ì¡¼¥ë¤Ë½³¤ê¤¤¤ì¤Þ¤¹¡£
#ref(robo2-4.jpg);
´Ì¤ò·ú¤Æ¤ëÃʳ¬¤Ë¤Ê¤ë¤È¡¢¥Þ¥¹¥¿¡¼¤ÎÊý¤«¤é»Ø¼¨¤¬Á÷¤é¤ì¤Æ¤¤Æ¡¢´Ì¤ò·ú¤Æ¤ëºî¶È¤ò¤¹¤ë´Ø¿ôbuild¤òư¤«¤·¤Þ¤¹¡£~
´Ø¿ôbuild¤Ç¤Ï¡¢·ú¤Æ¤ë¤È¤¤Ë¥¿¥ï¡¼¤Î²¼¤ÎÊý¤ò»Ù¤¨¤ë¤¿¤á¤ÎÏÓ¤òư¤«¤·¤Æ´Ì¤¬Åݤì¤Ê¤¤¤è¤¦¤Ë¤·¤¿¸å¡¢¥ì¡¼¥ë¼«ÂΤò·ú¤Æ¤Æ´Ì¤ò·ú¤Æ¤Þ¤¹¡£~
#ref(robo2-6.jpg);
´Ì¤ò·ú¤Æ½ª¤¨¤¿¤é¥Þ¥¹¥¿¡¼¤ÎÊý¤Ë»Ø¼¨¤òÁ÷¤ê¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¼è¤Ã¤¿¥Þ¥¹¥¿¡¼Â¦¤Ï¡¢¥ì¡¼¥ë¤ä¥¢¡¼¥à¤ò³ÊǼ¤·¤¿¤È¤¤Ë·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤ÄøÅ٤˲¼¤¬¤Ã¤¿¸å¡¢¥¹¥ì¡¼¥Ö¦¤Ë¥¢¡¼¥à¤Ê¤É¤Î³ÊǼ¤Î»Ù»ý¤òÁ÷¤Ã¤Æ¤¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¤¿¥¹¥ì¡¼¥Ö¦¤Ï³ÊǼºî¶È¤ò¤·¤Þ¤¹¡£~
³ÊǼºî¶È¤¬½ª¤ï¤ë¤È¡¢¥Þ¥¹¥¿¡¼Â¦¤Ë»Ø¼¨¤ò½Ð¤·¤Æ¡¢ºÆ¤Ó´Ì½¸¤á¤Îºî¶È¤Ê¤É¤ËÌá¤ê¤Þ¤¹¡£
*¼ÂºÝ¤Ëư¤«¤·¤Æ¤ß¤¿... [#x7f1c2ad]
¾å¤Ç¤Ï¤º¤¤¤Ö¤ó¥¹¥à¡¼¥º¤Ë´Û¤ò·ú¤Æ¤ëºî¶È¤Þ¤Ç¤¤¤±¤ë¤è¤¦¤Ê¤³¤È¤ò½ñ¤¤¤Æ¤Þ¤¹¤¬¡¢¼ÂºÝ¤ä¤Ã¤Æ¤ß¤ë¤È¤Þ¤Ã¤¿¤¯¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
´Ì¤ò½³¤ê¤¤¤ì¤Æ´Ì¤ò½¸¤á¤ëºî¶È¤ÏͽÁ۰ʾå¤Ë¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¡£¤¿¤À¤·¡¢ËÜÂΤ¬¤ä¤¿¤é¤ÈŤ¤¤Î¤Ç¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤ÎºÇÃæ¤Ë¥«¡¼¥Ö¤ò¶Ê¤¬¤Ã¤¿¤ê¤·¤Æ¤¤¤ë¤È¡¢¤½¤ÎŤ¤ËÜÂΤǥ³¡¼¥¹¾å¤Î´Ì¤ò¤Ê¤®Åݤ·¤Æ¤·¤Þ¤¤´Ì¤¬¼è¤ì¤Ê¤¤¾õ¶·¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£
¤Þ¤¿¡¢ËÜÂΤ¬½Å¤¹¤®¤Æ¸åÎØ¤¬³ê¤é¤«¤Ëư¤«¤º¤Ë¤½¤â¤½¤â¤¦¤Þ¤¯¿Ê¤ß¤Þ¤»¤ó¤Ç¤·¤¿¡£¤³¤Î¤»¤¤¤Ç¥é¥¤¥ó¥È¥ì¡¼¥¹¤¬ÉÔ°ÂÄê¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¡¢¥´¡¼¥ë¤Ë¤¿¤É¤êÃ失¤Þ¤»¤ó¤Ç¤·¤¿¡£
´Ì¤ò·ú¤Æ¤ëºî¶È¤Ë¤Ä¤¤¤Æ¤â¡¢´Ì¤òÅݤµ¤Ê¤¤¤è¤¦¤Ë¤æ¤Ã¤¯¤ê¤È¥ì¡¼¥ë¤ò·ú¤Æ¤ëͽÄê¤Ç¤·¤¿¤¬¡¢¤æ¤Ã¤¯¤ê¾å¤²¤ë¤¿¤á¤Ë¥â¡¼¥¿¡¼¤Î¥Ñ¥ï¡¼¤ò¤«¤Ê¤êÄã¤á¤Ë¤·¤Æ¥ì¡¼¥ë¤ò·ú¤Æ¤è¤¦¤È¤¹¤ë¤È¡¢¥ì¡¼¥ë¤È´Ì¤Î½Å¤µ¤Ç¤¦¤Þ¤¯¾å¤¬¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£¤À¤«¤é¤È¤¤¤Ã¤Æ¡¢¤¢¤Þ¤ê¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤ÈÀª¤¤¤¬¤Ä¤¤¹¤®¤Æ´Ì¤¬ÅÝ¤ì¤Æ¤·¤Þ¤¦¿´ÇÛ¤¬¤¢¤Ã¤¿¤Î¤Ç¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
*È¿¾ÊÅÀ¡¦²þÁ±ÅÀ [#p4525d91]
**¥í¥Ü¥Ã¥È¤Ë¤Ä¤¤¤Æ [#r5322306]
¼ÂºÝ¤Ëư¤«¤·¤Æ¤ß¤ë¤ÈÁ´Á³¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£~
¤³¤ì¤ò²þÁ±¤¹¤ë¤Ë¤Ï¡¢¤Þ¤º¥í¥Ü¥Ã¥È¤ò¤â¤Ã¤È;͵¤Î¤¢¤ëÀ߷פˤ¹¤ë¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£~
¤¿¤È¤¨¤Ð¡¢¸åÎØ¤ò¤â¤Ã¤È¶¯²½¤·¤Æ¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤Ë»Ù¾ã¤¬½Ð¤Ê¤¤¤è¤¦¤Ë½ÐÍè¤ì¤Ð¤è¤«¤Ã¤¿¤Ç¤¹¡£~
¤Þ¤¿¡¢´Ì¤ò·ú¤Æ¤ë¤È¤¤Ë¥ì¡¼¥ë¤ò¾å¤²¤ë¤¿¤áưÎϤȤ·¤Æ¥â¡¼¥¿¡¼¤ò»È¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¥ì¡¼¥ë¤È¥â¡¼¥¿¡¼¤Î´Ö¤Ë¤â¤Ã¤È¥®¥¢¤òÉÕ¤±¤Æ¥â¡¼¥¿¡¼¤ò¤¿¤¯¤µ¤ó²ó¤·¤Æ¤â¾¯¤·¤º¤Ä¤·¤«¥ì¡¼¥ë¤¬Æ°¤«¤Ê¤¤¤è¤¦¤Ë¤¹¤ì¤Ð¡¢´Ì¤¬Åݤ줿¤ê¡¢¥ì¡¼¥ë¤¬»ý¤Á¾å¤¬¤é¤Ê¤¤¤È¤¤¤Ã¤¿¿´ÇÛ¤¬²ò¾Ã¤Ç¤¤¿¤È»×¤¤¤Þ¤¹¡£
**¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ [#nbbe1536]
¥é¥¤¥ó¥È¥ì¡¼¥¹Éôʬ¤Ë¤Ä¤¤¤Æ¤Ï¡¢Á°²ó¤Î²ÝÂê¤Î»þ¤è¤ê¤â¤è¤ê°ÂÄꤷ¤¿»ÅÁȤߤˤ·¤¿¤Ä¤â¤ê¤Ç¤·¤¿¤¬¡¢Â礤¤Æ¹ÂΤΥí¥Ü¥Ã¥ÈÍѤËÄ´À°¤¬¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£¤ä¤Ï¤êPIDÀ©¸æ¤Ï³Æ¼ï¥²¥¤¥ó¤ÎÃͤÎÎɤ¤Ä´À°ÊýË¡¤ò³ÎΩ¤·¤Ê¤¤¤ÈÆñ¤·¤«¤Ã¤¿¤Ç¤¹¡£
´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ë¤Ä¤¤¤Æ¤â¡¢·ë¹½Â绨ÇÄ¤ÊÆ°ºî¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤È»×¤¤¤Þ¤¹¡£´Ì¤ò½³¤ê¤¤¤ì¤ëÉôʬ¤Ï¥í¥Ü¥Ã¥È¤ÎÊý¤¬¤¦¤Þ¤¯ºî¤ì¤Æ¤¤¤¿¤Î¤Ç¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¤¬¡¢´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ï¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤â²þÁ±¤¹¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£¥ì¡¼¥ë¤ò¾å¤²¤ëºî¶È¤Ç¤Ï¡¢¥Ñ¥ï¡¼¤ò²¼¤²¤¹¤®¤Æ¤â¾å¤¬¤é¤Ê¤¤¤·¡¢¥Ñ¥ï¡¼¤ò¾å¤²¤¹¤®¤Æ¤â´Ì¤¬ÅÝ¤ì¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤âŬÀڤʥѥĴÀ°¤ò¤¹¤ë¤Ù¤¤À¤È»×¤¤¤Þ¤·¤¿¡£
¥Ú¡¼¥¸Ì¾: