2016a/Member/kakepon/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*課題について [#a4c9d99a]
#ref(課題?.png)
次の経路を黒い線にそって動くロボットを作成する。ただし、...
B地点 → R右折 → Q直進 → Q直進 →P右折 → S右折 → C地点
*ロボットについて [#e2ca7413]
#ref(KIMG0030.JPG)
#ref(KIMG0032.JPG)
できるだけ光センサーとタイヤとの距離を近くして、誤差が生...
また部品も最小限の量に抑え、軽量化した。
*プログラムについて [#zcee2141]
**サブルーチン [#he76347d]
***交差点直進 [#w0577773]
sub go()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnFwd(OUT_AC); //前進
Wait(10); //1秒間
ClearTimer(0); //タイマークリア
}
***交差点左折 [#nd714e68]
sub turnL()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnRev(OUT_A);
OnFwd(OUT_C); //左旋回
Wait(75); //7.5秒間
ClearTimer(0); //タイマークリア
}
***交差点右折 [#jbe825d0]
sub turnR()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnRev(OUT_C);
OnFwd(OUT_A); //右旋回
Wait(75); //7.5秒間
ClearTimer(0); //タイマークリア
}
***ゴール枠に入る [#oad06b9c]
sub goal()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnFwd(OUT_AC); //前進
Wait(10); //1秒間
Off(OUT_AC); //停止
ClearTimer(0); //タイマークリア
}
**メインプログラム [#p2cc42f1]
task main()
{
while(FastTimer(0)>300) //3秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
turnR(); //右旋回
while(FastTimer(0)>1100) //11秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
go(); //直進
while(FastTimer(0)>1300) //13秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
go(); //直進
while(FastTimer(0)>700) //7以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
turnR(); //右旋回
while(FastTimer(0)>1100) //11秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
turnR(); //右旋回
while(FastTimer(0)>1100) //11秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
goal(); //ゴール
}
**交差点の判別について [#bada25f3]
交差点から交差点の間の直線をライントレースするのにかかる...
*結果 [#ffbcae7a]
この課題の提出期限の日の時点で上記のプログラムをロボット...
自分の理解度が低いせいかそれを発見することはできなかった。
しかしその後、先生のご指摘を頂いたおかげでなんとかロボッ...
*問題点 [#bcb637f1]
・自分の理解度の低さ故か、自力で文法上のミスを発見できな...
・ライントレースが非常にぎこちない動きだった。
*思い通りに行かないと思われる原因 [#m66b15c0]
交差点から交差点の間の直線をライントレースするのにかかる...
ライントレースがスムーズに進んだり進まなかったりする可能...
また、「while(FastTimer(0)>300)」の部分だが、これでは3秒...
3秒間ライントレースをすることはできなく、このままではロ...
そして、ライントレースも白かったら右へ、黒かったら左へと...
たとえ時間通りに交差点まで到達し曲がれたとしても、曲がり...
ロボットが永遠に旋回したり、どっかに行ってしまうことにな...
最後に、このプログラムは全体的に見ると、少しでもロボット...
*感想・反省 [#nef535c3]
タイマー・サブルーチン・if文など様々なプログラミングの文...
思った以上にセンサーの値などの微調節がとても時間がかかっ...
最終的には先生のご指摘のおかげで、ロボット本体を動かすこ...
次の課題ではできるだけ文法を理解し、そして上手く使いこな...
終了行:
*課題について [#a4c9d99a]
#ref(課題?.png)
次の経路を黒い線にそって動くロボットを作成する。ただし、...
B地点 → R右折 → Q直進 → Q直進 →P右折 → S右折 → C地点
*ロボットについて [#e2ca7413]
#ref(KIMG0030.JPG)
#ref(KIMG0032.JPG)
できるだけ光センサーとタイヤとの距離を近くして、誤差が生...
また部品も最小限の量に抑え、軽量化した。
*プログラムについて [#zcee2141]
**サブルーチン [#he76347d]
***交差点直進 [#w0577773]
sub go()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnFwd(OUT_AC); //前進
Wait(10); //1秒間
ClearTimer(0); //タイマークリア
}
***交差点左折 [#nd714e68]
sub turnL()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnRev(OUT_A);
OnFwd(OUT_C); //左旋回
Wait(75); //7.5秒間
ClearTimer(0); //タイマークリア
}
***交差点右折 [#jbe825d0]
sub turnR()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnRev(OUT_C);
OnFwd(OUT_A); //右旋回
Wait(75); //7.5秒間
ClearTimer(0); //タイマークリア
}
***ゴール枠に入る [#oad06b9c]
sub goal()
{
Off(OUT_AC); //停止
Wait(100); //10秒間
OnFwd(OUT_AC); //前進
Wait(10); //1秒間
Off(OUT_AC); //停止
ClearTimer(0); //タイマークリア
}
**メインプログラム [#p2cc42f1]
task main()
{
while(FastTimer(0)>300) //3秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
turnR(); //右旋回
while(FastTimer(0)>1100) //11秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
go(); //直進
while(FastTimer(0)>1300) //13秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
go(); //直進
while(FastTimer(0)>700) //7以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
turnR(); //右旋回
while(FastTimer(0)>1100) //11秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
turnR(); //右旋回
while(FastTimer(0)>1100) //11秒以上になったら
{
if(SENSOR_2>45) //かなり白かったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_C);
OnRev(OUT_A); //右へ
}
else if(SENSOR_2>38) //間だったら
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_AC); //前進
}
else
{
SetPower(OUT_AC,2); //2の速度で
OnFwd(OUT_A);
OnRev(OUT_C); //左へ
}
}
goal(); //ゴール
}
**交差点の判別について [#bada25f3]
交差点から交差点の間の直線をライントレースするのにかかる...
*結果 [#ffbcae7a]
この課題の提出期限の日の時点で上記のプログラムをロボット...
自分の理解度が低いせいかそれを発見することはできなかった。
しかしその後、先生のご指摘を頂いたおかげでなんとかロボッ...
*問題点 [#bcb637f1]
・自分の理解度の低さ故か、自力で文法上のミスを発見できな...
・ライントレースが非常にぎこちない動きだった。
*思い通りに行かないと思われる原因 [#m66b15c0]
交差点から交差点の間の直線をライントレースするのにかかる...
ライントレースがスムーズに進んだり進まなかったりする可能...
また、「while(FastTimer(0)>300)」の部分だが、これでは3秒...
3秒間ライントレースをすることはできなく、このままではロ...
そして、ライントレースも白かったら右へ、黒かったら左へと...
たとえ時間通りに交差点まで到達し曲がれたとしても、曲がり...
ロボットが永遠に旋回したり、どっかに行ってしまうことにな...
最後に、このプログラムは全体的に見ると、少しでもロボット...
*感想・反省 [#nef535c3]
タイマー・サブルーチン・if文など様々なプログラミングの文...
思った以上にセンサーの値などの微調節がとても時間がかかっ...
最終的には先生のご指摘のおかげで、ロボット本体を動かすこ...
次の課題ではできるだけ文法を理解し、そして上手く使いこな...
ページ名: