2015a/Member/TMHR/Mission3
¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¤·¤ÆºîÀ®
[
¥È¥Ã¥×
] [
¿·µ¬
|
°ìÍ÷
|
¸¡º÷
|
ºÇ½ª¹¹¿·
|
¥Ø¥ë¥×
|
¥í¥°¥¤¥ó
]
³«»Ï¹Ô:
[[2015a/Member]]
*Ìܼ¡ [#k8cd6539]
#contents
*²ÝÂê [#z110d2b5]
º£²ó¤Î²ÝÂê¤ÏȾ·Â1m°ÊÆâ¤Ë¤¢¤ë¶õ¤´Ì¤òõ¤·¤Æ¡¢25cm¤Îµ÷Î¥¤«¤é¥Ü¡¼¥ë¤òž¤¬¤·¡¢¤½¤Î¶õ¤´Ì¤ËÅö¤Æ¤ë¥í¥Ü¥Ã¥È¤òÀ½ºî¤¹¤ë¤³¤È¤Ç¤¹¡£
¤¿¤À¤·25cm°ÊÆâ¤Ë¶õ¤´Ì¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢30cm¤Þ¤ÇÎ¥¤ì¤ë¤³¤È¤¬¾ò·ï¤È¤Ê¤ê¤Þ¤¹¡£
*¥í¥Ü¥Ã¥È¤Ë¤Ä¤¤¤Æ [#gf73fa8d]
&ref(./1437370259375.jpg,100%);
&ref(./1437370269191.jpg,100%);
¥í¥Ü¥Ã¥È¤Ï²ÝÂꣲ¤Ç»È¤Ã¤¿¤â¤Î¤ò±þÍѤµ¤»¤Þ¤·¤¿¡£
¥·¥ç¥Ù¥ë¤ÎÉôʬ¤ËĶ²»ÇÈ¥»¥ó¥µ¡¼¤ò¼è¤êÉÕ¤±¤¿¤é¡¢¤«¤Ê¤ê½Å¤¯¤Ê¤êÆ°¤¤¬¿´ÇÛ¤À¤Ã¤¿¤Î¤Ç
¥¢¡¼¥à¼þÊդΥѡ¼¥Ä¤ò¼è¤ê½ü¤·ÚÎ̲½¤µ¤»¤Þ¤·¤¿¡£
¤Þ¤¿Á°²ó¤ÎÌäÂêÅÀ¤Ç¤â¤¢¤Ã¤¿½ÅÎ̤äÂ礤µ¤Ë¤Ä¤¤¤Æ¤âËÜÂΤ˻Ȥ¦¥Ñ¡¼¥Ä¤ò¸º¤é¤·¤Æ¡¢
°ì²ó¤ê¾®¤µ¤¯¤µ¤»¤Þ¤·¤¿¡£
*¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ [#bb4d0e05]
#define SPEED 50
#define SPEED_SLOW 30
#define down OnFwd(OUT_A,50);Wait(500);Off(OUT_A);Wait(300);
#define up OnRev(OUT_A,60);Wait(500);Off(OUT_A);Wait(300);
#define goal OnRev(OUT_BC,50);Wait(500);Off(OUT_BC);Wait(500);\
up;OnFwd(OUT_BC,100);Wait(300);Off(OUT_BC);
const float diameter=5.45;
const float track=10.35;
const float pi=3.1415;
void fwdDist(float d)¡¡¡¡¡¡¡¡//µ÷Î¥dÑÁ°¿Ê
{
long angle;
angle=d/(diameter*pi)*360.0;
RotateMotorEx(OUT_BC,SPEED_SLOW,angle,0,true,true);
}
void turnAng(long ang)¡¡¡¡¡¡//³ÑÅÙangÅ٤λþ·×²ó¤êÀû²ó
{
long angle;
angle=track/diameter*ang;
RotateMotorEx(OUT_BC,SPEED_SLOW,angle,100,true,true);
}
int searchDirection(long ang)¡¡¡¡//¸½ºß¤ÎÊý¸þ¤òÃæ¿´¤ËangÅÙ¤ÎÈϰϤÇõ¤·¾ã³²Êª¤Þ¤Ç¤Îµ÷Î¥¤òÊÖ¤¹
{
long angle,tacho_min=0,
int d_min;
d_min=300; //²¾¤ÎºÇ¾®ÃÍ
angle=(track/diameter)*ang;¡¡¡¡¡¡//Àû²ó³ÑÅÙ¤«¤é¥¿¥¤¥ä¤Î²óž¤ò·×»»
turnAng(ang/2); //»ØÄꤵ¤ì¤¿³ÑÅÙ¤ÎȾʬ¤òÀû²ó
ResetTachoCount(OUT_BC); //³ÑÅٷ׬¤ò¥ê¥»¥Ã¥È
OnFwdSync(OUT_BC,SPEED_SLOW,-100);¡¡¡¡//È¿»þ·×²ó¤êÀû²ó
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S1)<d_min){¡¡//¤½¤ì¤Þ¤Ç¤ÎºÇ¾®Ãͤè¤êÄ㤱¤ì¤Ð
d_min=SensorUS(S1);¡¡¡¡//²¾¤ÎºÇ¾®Ãͤò¹¹¿·
tacho_min=MotorTachoCount(OUT_B);¡¡¡¡//ºÇ¾®ÃͤòµÏ¿¤·¤¿°ÌÃÖ¤òµ²±¤·¤Æ¤ª¤¯
}
}
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=d_min);
Wait(14);¡¡¡¡//ÈùÄ´À°
Off(OUT_BC);Wait(500);
return d_min;¡¡//ºÇ¾®ÃͤòÊÖ¤¹
}
task main()
{
repeat(2){
SetSensorLowspeed(S1);
int d=searchDirection(360);
if(d>10){
fwdDist(d-10.0);
goal;
}
}
}
¥×¥í¥°¥é¥à¤Ï¤â¤é¤Ã¤¿¥×¥ê¥ó¥È¤ò¥Ù¡¼¥¹¤ËÁȤßΩ¤Æ¤Þ¤·¤¿¡£
°ì²ó¤Îº÷Ũ¤Ç¤ÏÀµ³Î¤ËÌÜɸ¤òõ¤»¤Ê¤«¤Ã¤¿¤Î¤ÇÆó²ó¹Ô¤¦¤³¤È¤ÇÀºÌ©À¤ò¹â¤á¤Þ¤·¤¿¡£
¤µ¤é¤Ë¥í¥Ü¥Ã¥È¤ÎÆ°¤¤¬Â翶¤ê¤Ë¤Ê¤é¤Ê¤¤¤è¤¦¡¢¥¹¥Ô¡¼¥É¤òÍÞ¤¨¤Þ¤·¤¿¡£
¥´¡¼¥ë¤Î¥×¥í¥°¥é¥à¤ÏÁ°²ó¤Î²ÝÂê¤Ç¤âÍѤ¤¤¿¤â¤Î¤Ç¤¹¤¬¡¢¥·¥ç¥Ù¥ë¤ËĶ²»ÇÈ¥»¥ó¥µ¡¼¤òÉÕ¤±¤¿·ë²Ì¡¢
¥¢¡¼¥à¤ò²¼¤í¤¹»þ¤ËÀª¤¤¤¬¶¯¤«¤Ã¤¿¤Î¤Ç¥Ñ¥ï¡¼¤ò½¤Àµ¤·¤Þ¤·¤¿¡£
*È¿¾ÊÅÀ¤È¤Þ¤È¤á [#de3d4645]
¼¡¤Î¥í¥Ü¥³¥ó¤Î½àÈ÷¤ò¤·¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤«¤Ã¤¿¤Î¤Ç¤³¤Î²ÝÂê¤Ë¼è¤êÁȤó¤Ç¤¤¤é¤ì¤ë»þ´Ö¤¬¾¯¤Ê¤¯¡¢
¥í¥Ü¥Ã¥È¤ò°ì¤«¤éÁȤßΩ¤Æ¤Æ¤¤¤¯¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¤Ç¤·¤¿¡£
¤·¤«¤·¤Ç¤¤ë¸Â¤ê¤Î²þÎɤò²Ã¤¨¤Æ¡¢¶õ¤´Ì¤Ë¥Ü¡¼¥ë¤ò¤Ö¤Ä¤±¤ë¤³¤È¤¬½ÐÍ褿¤Î¤Ï¡¢
¸Â¤é¤ì¤¿»þ´Ö¤ÎÃæ¤Ç¤è¤¯¤Ç¤¤¿¤È»×¤¤¤Þ¤¹¡£
º£²ó¤Ï¤¢¤Þ¤ê¥Á¡¼¥à¤Ç½¸¤Þ¤ì¤º¡¢¶¨ÎϤ·¤Å¤é¤«¤Ã¤¿¤Î¤Ç¼¡¤Î¥í¥Ü¥³¥ó¤Ï
¥Á¡¼¥à¤ÇÏ¢·È¤·¤ÆÄ©¤ß¤¿¤¤¤Ç¤¹¡£
½ªÎ»¹Ô:
[[2015a/Member]]
*Ìܼ¡ [#k8cd6539]
#contents
*²ÝÂê [#z110d2b5]
º£²ó¤Î²ÝÂê¤ÏȾ·Â1m°ÊÆâ¤Ë¤¢¤ë¶õ¤´Ì¤òõ¤·¤Æ¡¢25cm¤Îµ÷Î¥¤«¤é¥Ü¡¼¥ë¤òž¤¬¤·¡¢¤½¤Î¶õ¤´Ì¤ËÅö¤Æ¤ë¥í¥Ü¥Ã¥È¤òÀ½ºî¤¹¤ë¤³¤È¤Ç¤¹¡£
¤¿¤À¤·25cm°ÊÆâ¤Ë¶õ¤´Ì¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢30cm¤Þ¤ÇÎ¥¤ì¤ë¤³¤È¤¬¾ò·ï¤È¤Ê¤ê¤Þ¤¹¡£
*¥í¥Ü¥Ã¥È¤Ë¤Ä¤¤¤Æ [#gf73fa8d]
&ref(./1437370259375.jpg,100%);
&ref(./1437370269191.jpg,100%);
¥í¥Ü¥Ã¥È¤Ï²ÝÂꣲ¤Ç»È¤Ã¤¿¤â¤Î¤ò±þÍѤµ¤»¤Þ¤·¤¿¡£
¥·¥ç¥Ù¥ë¤ÎÉôʬ¤ËĶ²»ÇÈ¥»¥ó¥µ¡¼¤ò¼è¤êÉÕ¤±¤¿¤é¡¢¤«¤Ê¤ê½Å¤¯¤Ê¤êÆ°¤¤¬¿´ÇÛ¤À¤Ã¤¿¤Î¤Ç
¥¢¡¼¥à¼þÊդΥѡ¼¥Ä¤ò¼è¤ê½ü¤·ÚÎ̲½¤µ¤»¤Þ¤·¤¿¡£
¤Þ¤¿Á°²ó¤ÎÌäÂêÅÀ¤Ç¤â¤¢¤Ã¤¿½ÅÎ̤äÂ礤µ¤Ë¤Ä¤¤¤Æ¤âËÜÂΤ˻Ȥ¦¥Ñ¡¼¥Ä¤ò¸º¤é¤·¤Æ¡¢
°ì²ó¤ê¾®¤µ¤¯¤µ¤»¤Þ¤·¤¿¡£
*¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ [#bb4d0e05]
#define SPEED 50
#define SPEED_SLOW 30
#define down OnFwd(OUT_A,50);Wait(500);Off(OUT_A);Wait(300);
#define up OnRev(OUT_A,60);Wait(500);Off(OUT_A);Wait(300);
#define goal OnRev(OUT_BC,50);Wait(500);Off(OUT_BC);Wait(500);\
up;OnFwd(OUT_BC,100);Wait(300);Off(OUT_BC);
const float diameter=5.45;
const float track=10.35;
const float pi=3.1415;
void fwdDist(float d)¡¡¡¡¡¡¡¡//µ÷Î¥dÑÁ°¿Ê
{
long angle;
angle=d/(diameter*pi)*360.0;
RotateMotorEx(OUT_BC,SPEED_SLOW,angle,0,true,true);
}
void turnAng(long ang)¡¡¡¡¡¡//³ÑÅÙangÅ٤λþ·×²ó¤êÀû²ó
{
long angle;
angle=track/diameter*ang;
RotateMotorEx(OUT_BC,SPEED_SLOW,angle,100,true,true);
}
int searchDirection(long ang)¡¡¡¡//¸½ºß¤ÎÊý¸þ¤òÃæ¿´¤ËangÅÙ¤ÎÈϰϤÇõ¤·¾ã³²Êª¤Þ¤Ç¤Îµ÷Î¥¤òÊÖ¤¹
{
long angle,tacho_min=0,
int d_min;
d_min=300; //²¾¤ÎºÇ¾®ÃÍ
angle=(track/diameter)*ang;¡¡¡¡¡¡//Àû²ó³ÑÅÙ¤«¤é¥¿¥¤¥ä¤Î²óž¤ò·×»»
turnAng(ang/2); //»ØÄꤵ¤ì¤¿³ÑÅÙ¤ÎȾʬ¤òÀû²ó
ResetTachoCount(OUT_BC); //³ÑÅٷ׬¤ò¥ê¥»¥Ã¥È
OnFwdSync(OUT_BC,SPEED_SLOW,-100);¡¡¡¡//È¿»þ·×²ó¤êÀû²ó
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S1)<d_min){¡¡//¤½¤ì¤Þ¤Ç¤ÎºÇ¾®Ãͤè¤êÄ㤱¤ì¤Ð
d_min=SensorUS(S1);¡¡¡¡//²¾¤ÎºÇ¾®Ãͤò¹¹¿·
tacho_min=MotorTachoCount(OUT_B);¡¡¡¡//ºÇ¾®ÃͤòµÏ¿¤·¤¿°ÌÃÖ¤òµ²±¤·¤Æ¤ª¤¯
}
}
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=d_min);
Wait(14);¡¡¡¡//ÈùÄ´À°
Off(OUT_BC);Wait(500);
return d_min;¡¡//ºÇ¾®ÃͤòÊÖ¤¹
}
task main()
{
repeat(2){
SetSensorLowspeed(S1);
int d=searchDirection(360);
if(d>10){
fwdDist(d-10.0);
goal;
}
}
}
¥×¥í¥°¥é¥à¤Ï¤â¤é¤Ã¤¿¥×¥ê¥ó¥È¤ò¥Ù¡¼¥¹¤ËÁȤßΩ¤Æ¤Þ¤·¤¿¡£
°ì²ó¤Îº÷Ũ¤Ç¤ÏÀµ³Î¤ËÌÜɸ¤òõ¤»¤Ê¤«¤Ã¤¿¤Î¤ÇÆó²ó¹Ô¤¦¤³¤È¤ÇÀºÌ©À¤ò¹â¤á¤Þ¤·¤¿¡£
¤µ¤é¤Ë¥í¥Ü¥Ã¥È¤ÎÆ°¤¤¬Â翶¤ê¤Ë¤Ê¤é¤Ê¤¤¤è¤¦¡¢¥¹¥Ô¡¼¥É¤òÍÞ¤¨¤Þ¤·¤¿¡£
¥´¡¼¥ë¤Î¥×¥í¥°¥é¥à¤ÏÁ°²ó¤Î²ÝÂê¤Ç¤âÍѤ¤¤¿¤â¤Î¤Ç¤¹¤¬¡¢¥·¥ç¥Ù¥ë¤ËĶ²»ÇÈ¥»¥ó¥µ¡¼¤òÉÕ¤±¤¿·ë²Ì¡¢
¥¢¡¼¥à¤ò²¼¤í¤¹»þ¤ËÀª¤¤¤¬¶¯¤«¤Ã¤¿¤Î¤Ç¥Ñ¥ï¡¼¤ò½¤Àµ¤·¤Þ¤·¤¿¡£
*È¿¾ÊÅÀ¤È¤Þ¤È¤á [#de3d4645]
¼¡¤Î¥í¥Ü¥³¥ó¤Î½àÈ÷¤ò¤·¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤«¤Ã¤¿¤Î¤Ç¤³¤Î²ÝÂê¤Ë¼è¤êÁȤó¤Ç¤¤¤é¤ì¤ë»þ´Ö¤¬¾¯¤Ê¤¯¡¢
¥í¥Ü¥Ã¥È¤ò°ì¤«¤éÁȤßΩ¤Æ¤Æ¤¤¤¯¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¤Ç¤·¤¿¡£
¤·¤«¤·¤Ç¤¤ë¸Â¤ê¤Î²þÎɤò²Ã¤¨¤Æ¡¢¶õ¤´Ì¤Ë¥Ü¡¼¥ë¤ò¤Ö¤Ä¤±¤ë¤³¤È¤¬½ÐÍ褿¤Î¤Ï¡¢
¸Â¤é¤ì¤¿»þ´Ö¤ÎÃæ¤Ç¤è¤¯¤Ç¤¤¿¤È»×¤¤¤Þ¤¹¡£
º£²ó¤Ï¤¢¤Þ¤ê¥Á¡¼¥à¤Ç½¸¤Þ¤ì¤º¡¢¶¨ÎϤ·¤Å¤é¤«¤Ã¤¿¤Î¤Ç¼¡¤Î¥í¥Ü¥³¥ó¤Ï
¥Á¡¼¥à¤ÇÏ¢·È¤·¤ÆÄ©¤ß¤¿¤¤¤Ç¤¹¡£
¥Ú¡¼¥¸Ì¾: