わけがわからない [Mindstorm]
NXCにはOnFwdSyncという2つのモーターを同期させて回転させる命令がある。ロボットを直進させたいときは便利な命令だ。どのくらい正確かは、その回転角を測る命令 MotorRotationCount を使って調べることができる。
手元にあるNXTで、高本高頼氏の書籍のプログラム
task main()
{
TextOut(20,52,"OnFwd test");
string ct;
OnFwdSync(OUT_AC,75,0);
while(FirstTick()+3000>CurrentTick())
{
ct = NumToStr(MotorRotationCount(OUT_A));
TextOut(0,32,StrCat(" OUT_A : ", ct));
ct = NumToStr(MotorRotationCount(OUT_C));
TextOut(0,16,StrCat(" OUT_C : ", ct));
Wait(100);
}
Off(OUT_AC);
Wait(5000);
}
を動かすと、A が 1684 , C が 1685 の表示なので違いはほとんどなく、走らせてもまっすぐ走る。
ちなみに、OnFwdSync を OnFwd に書き換えると、A が 1740 , C が 1869 だから違いが大きく、走らせてもまっすぐは走らない。
それはいい。
しかし、
#define r_turn90 OnFwd(OUT_C,50);OnRev(OUT_A,50);Wait(500);Off(OUT_AC);
task main()
{
SetSensorTouch(IN_1);
int i = 1 ;
while(i<4)
{
OnFwdSync(OUT_AC,50,0);
if(SENSOR_1==1)
{
r_turn90;
i++;
}
}
Off(OUT_AC);
}
こういう使い方をするとまっすぐには走ってくれない。理由がわからない。
しかし、OnFwd の時よりも OnFwdSync の方がモーター音がうるさい。回転数制御のための余計な不可がかかっているのかもしれない。
手元にあるNXTで、高本高頼氏の書籍のプログラム
task main()
{
TextOut(20,52,"OnFwd test");
string ct;
OnFwdSync(OUT_AC,75,0);
while(FirstTick()+3000>CurrentTick())
{
ct = NumToStr(MotorRotationCount(OUT_A));
TextOut(0,32,StrCat(" OUT_A : ", ct));
ct = NumToStr(MotorRotationCount(OUT_C));
TextOut(0,16,StrCat(" OUT_C : ", ct));
Wait(100);
}
Off(OUT_AC);
Wait(5000);
}
を動かすと、A が 1684 , C が 1685 の表示なので違いはほとんどなく、走らせてもまっすぐ走る。
ちなみに、OnFwdSync を OnFwd に書き換えると、A が 1740 , C が 1869 だから違いが大きく、走らせてもまっすぐは走らない。
それはいい。
しかし、
#define r_turn90 OnFwd(OUT_C,50);OnRev(OUT_A,50);Wait(500);Off(OUT_AC);
task main()
{
SetSensorTouch(IN_1);
int i = 1 ;
while(i<4)
{
OnFwdSync(OUT_AC,50,0);
if(SENSOR_1==1)
{
r_turn90;
i++;
}
}
Off(OUT_AC);
}
こういう使い方をするとまっすぐには走ってくれない。理由がわからない。
しかし、OnFwd の時よりも OnFwdSync の方がモーター音がうるさい。回転数制御のための余計な不可がかかっているのかもしれない。
コメント 0