2013b/Member/yunagi/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*今回の課題 [#tabfec7c]
今回の課題は、黒いライン上にある障害物(ここでは缶)を避...
#ref(2013b/Member/yunagi/Mission1/コース1.jpg,70%,コース)
1〜7の順番でプログラムを作成しました。7の部分で缶をひと...
*ロボットの紹介 [#waf8cfa3]
ロボットを作る時に一番考えたのは、光センサーの位置と缶...
缶を掴むアームはただ挟む感じではなく、片方にのみアーム...
また、缶を認識するタッチセンサーはバンパーに凹凸をつけ...
#ref(2013b/Member/yunagi/Mission1/DSC_0076.jpg,10%,アーム)
アームは左サイドにのみ取り付けました。結構重いです…。後...
#ref(2013b/Member/yunagi/Mission1/DSC_0075.jpg,10%,バンパ...
タッチセンサーにバンパーを取り付けました。左右違う長さ...
***こだわりポイント [#q01c7f03]
-タイヤ
-アーム
-(目と羽‼)
目と羽がつくととても可愛く……(どこか虫の様に見える気が...
#ref(2013b/Member/yunagi/Mission1/DSC_0072.jpg,10%,目と羽)
**難点 [#pd526189]
アームが若干重くなってしまって、重心が前になってしまい...
*プログラムの説明 [#d44d2d26]
私が担当したのは、コースを反時計回りで動くプログラム。...
プログラムの冒頭に定数を決めておく。
***定数 [#be9dacec]
#define THRESHOLD 43 //しきい値
#define HIPOWER 4 //モーターのパワー
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC); //直進
#define turn_left1 set_power_L; OnFwd(OUT_C); Off(OUT_A)...
#define turn_left0 set_power_L; OnFwd(OUT_C); OnRev(OUT_...
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT...
#define STEP 1 //1回の判断で動作させる時間
#define nMAX 6 //交差点とカーブを判断する繰り返しの最大値
#define short_break Off(OUT_AC); Wait(50); //小休止
#define CROSS_TIME 30 //交差点を渡る時間
#define cross_line OnFwd(OUT_AC); Wait(CROSS_TIME); shor...
#define time0 1000 //?にかかる時間
#define time1 200 //?にかかる時間
#define time2 600 //?にかかる時間
#define time3 800 //???にかかる時間
#define time4 3000 //?にかかる時間
サブルーチンを使ってプログラムをコンパクトにする。
***交差点のない場合 [#vc761a10]
sub line_race() //通常のライントレース
{
if (SENSOR_2 < THRESHOLD -5) { turn_right1; }
else if (SENSOR_2 < THRESHOLD -3) { turn_right0; }
else if (SENSOR_2 < THRESHOLD +2) { go_forward; }
else if (SENSOR_2 < THRESHOLD +5) { turn_left1; }
else { turn_left0; }
}
***交差点の付近&交差点 [#eb995b68]
sub line_cross()
{
int nOnline=0; //続けて黒になった回数 始めを0とする
while (nOnline < nMAX){ //続けて黒になった回数がMAX...
if (SENSOR_2 < THRESHOLD -5) { turn_right1; nOnline++;...
else
{ if (SENSOR_2 < THRESHOLD -3) { turn_right0; }
else if (SENSOR_2 < THRESHOLD +3) { go_forward; }
else if (SENSOR_2 < THRESHOLD +7) { turn_left0; }
else { turn_left1; }
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; PlaySound(SOUND_DOWN); //小休止、音で知ら...
turn_left0; Wait(nMAX*STEP); //方向修正
cross_line; //交差点を渡る
nOnline=0; //カウンタをリセット
}
交差点は今回一番悩み、苦労した点です。最初は、カウンタ...
***缶を移動 [#qae3914c]
sub line_can()
{
OnFwd(OUT_B); //アームでつかむ
Wait(7);
OnFwd(OUT_AC); //前進
Wait(130);
OnFwd(OUT_C); OnRev(OUT_A); Off(OUT_B); //左旋回
Wait(180);
Off(OUT_AC); //停止
Wait(50);
OnRev(OUT_B); //缶を離す
Wait(10);
OnRev(OUT_AC); //後進
Wait(180);
OnFwd(OUT_A); OnRev(OUT_C); Off(OUT_B); ...
Wait(70);
OnFwd(OUT_AC);
Wait(100);
Off(OUT_ABC);
}
缶をつかむプログラムは移動に結構スペースを取るため、も...
***全体のプログラム [#s699b2ff]
task main()
{
SetSensor(SENSOR_3, SENSOR_TOUCH); //センサー3はタッチ...
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサー2は光セン...
int nOnline=0;
ClearTimer(0); //0番目のタイマーをリセットする
while (FastTimer(0) <= time0) { line_race(); } //?のプ...
PlaySound(SOUND_UP); //サウンド
ClearTimer(0);
while (FastTimer(0) <= time1) { line_cross(); } //?のプ...
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
while (FastTimer(0) <= time2) { line_race(); } //?のプ...
PlaySound(SOUND_UP);
ClearTimer(0);
while (FastTimer(0) <= time3) { line_cross(); } //???の...
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
while (FastTimer(0) <= time4) {
line_race(); //?のプログラム
if(SENSOR_3 == 1) { line_can(); } //缶がタッチセン...
}
PlaySound(SOUND_UP);
Float(OUT_AC); //停止
}
サブルーチンを使用したことでコンパクトにすることが出来...
*感想と反省点 [#ba97e6d1]
***ロボットについて [#v90114b2]
缶を動かすアームを包み込んで動かす仕組みにしたのがなか...
目と羽を付けたことで、ロボットが可愛く?なった(笑)余談...
***プログラムについて [#tb44dcdf]
コースを反時計回りにするプログラミングをしたが、ロボッ...
**全体を通して [#jd7232d5]
今回、初めてロボットのプログラミングをしてみて分からな...
終了行:
#contents
*今回の課題 [#tabfec7c]
今回の課題は、黒いライン上にある障害物(ここでは缶)を避...
#ref(2013b/Member/yunagi/Mission1/コース1.jpg,70%,コース)
1〜7の順番でプログラムを作成しました。7の部分で缶をひと...
*ロボットの紹介 [#waf8cfa3]
ロボットを作る時に一番考えたのは、光センサーの位置と缶...
缶を掴むアームはただ挟む感じではなく、片方にのみアーム...
また、缶を認識するタッチセンサーはバンパーに凹凸をつけ...
#ref(2013b/Member/yunagi/Mission1/DSC_0076.jpg,10%,アーム)
アームは左サイドにのみ取り付けました。結構重いです…。後...
#ref(2013b/Member/yunagi/Mission1/DSC_0075.jpg,10%,バンパ...
タッチセンサーにバンパーを取り付けました。左右違う長さ...
***こだわりポイント [#q01c7f03]
-タイヤ
-アーム
-(目と羽‼)
目と羽がつくととても可愛く……(どこか虫の様に見える気が...
#ref(2013b/Member/yunagi/Mission1/DSC_0072.jpg,10%,目と羽)
**難点 [#pd526189]
アームが若干重くなってしまって、重心が前になってしまい...
*プログラムの説明 [#d44d2d26]
私が担当したのは、コースを反時計回りで動くプログラム。...
プログラムの冒頭に定数を決めておく。
***定数 [#be9dacec]
#define THRESHOLD 43 //しきい値
#define HIPOWER 4 //モーターのパワー
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC); //直進
#define turn_left1 set_power_L; OnFwd(OUT_C); Off(OUT_A)...
#define turn_left0 set_power_L; OnFwd(OUT_C); OnRev(OUT_...
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT...
#define STEP 1 //1回の判断で動作させる時間
#define nMAX 6 //交差点とカーブを判断する繰り返しの最大値
#define short_break Off(OUT_AC); Wait(50); //小休止
#define CROSS_TIME 30 //交差点を渡る時間
#define cross_line OnFwd(OUT_AC); Wait(CROSS_TIME); shor...
#define time0 1000 //?にかかる時間
#define time1 200 //?にかかる時間
#define time2 600 //?にかかる時間
#define time3 800 //???にかかる時間
#define time4 3000 //?にかかる時間
サブルーチンを使ってプログラムをコンパクトにする。
***交差点のない場合 [#vc761a10]
sub line_race() //通常のライントレース
{
if (SENSOR_2 < THRESHOLD -5) { turn_right1; }
else if (SENSOR_2 < THRESHOLD -3) { turn_right0; }
else if (SENSOR_2 < THRESHOLD +2) { go_forward; }
else if (SENSOR_2 < THRESHOLD +5) { turn_left1; }
else { turn_left0; }
}
***交差点の付近&交差点 [#eb995b68]
sub line_cross()
{
int nOnline=0; //続けて黒になった回数 始めを0とする
while (nOnline < nMAX){ //続けて黒になった回数がMAX...
if (SENSOR_2 < THRESHOLD -5) { turn_right1; nOnline++;...
else
{ if (SENSOR_2 < THRESHOLD -3) { turn_right0; }
else if (SENSOR_2 < THRESHOLD +3) { go_forward; }
else if (SENSOR_2 < THRESHOLD +7) { turn_left0; }
else { turn_left1; }
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; PlaySound(SOUND_DOWN); //小休止、音で知ら...
turn_left0; Wait(nMAX*STEP); //方向修正
cross_line; //交差点を渡る
nOnline=0; //カウンタをリセット
}
交差点は今回一番悩み、苦労した点です。最初は、カウンタ...
***缶を移動 [#qae3914c]
sub line_can()
{
OnFwd(OUT_B); //アームでつかむ
Wait(7);
OnFwd(OUT_AC); //前進
Wait(130);
OnFwd(OUT_C); OnRev(OUT_A); Off(OUT_B); //左旋回
Wait(180);
Off(OUT_AC); //停止
Wait(50);
OnRev(OUT_B); //缶を離す
Wait(10);
OnRev(OUT_AC); //後進
Wait(180);
OnFwd(OUT_A); OnRev(OUT_C); Off(OUT_B); ...
Wait(70);
OnFwd(OUT_AC);
Wait(100);
Off(OUT_ABC);
}
缶をつかむプログラムは移動に結構スペースを取るため、も...
***全体のプログラム [#s699b2ff]
task main()
{
SetSensor(SENSOR_3, SENSOR_TOUCH); //センサー3はタッチ...
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサー2は光セン...
int nOnline=0;
ClearTimer(0); //0番目のタイマーをリセットする
while (FastTimer(0) <= time0) { line_race(); } //?のプ...
PlaySound(SOUND_UP); //サウンド
ClearTimer(0);
while (FastTimer(0) <= time1) { line_cross(); } //?のプ...
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
while (FastTimer(0) <= time2) { line_race(); } //?のプ...
PlaySound(SOUND_UP);
ClearTimer(0);
while (FastTimer(0) <= time3) { line_cross(); } //???の...
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
while (FastTimer(0) <= time4) {
line_race(); //?のプログラム
if(SENSOR_3 == 1) { line_can(); } //缶がタッチセン...
}
PlaySound(SOUND_UP);
Float(OUT_AC); //停止
}
サブルーチンを使用したことでコンパクトにすることが出来...
*感想と反省点 [#ba97e6d1]
***ロボットについて [#v90114b2]
缶を動かすアームを包み込んで動かす仕組みにしたのがなか...
目と羽を付けたことで、ロボットが可愛く?なった(笑)余談...
***プログラムについて [#tb44dcdf]
コースを反時計回りにするプログラミングをしたが、ロボッ...
**全体を通して [#jd7232d5]
今回、初めてロボットのプログラミングをしてみて分からな...
ページ名: