[[2019a/Member]] #contents *課題について [#lf16ad68] **コース [#s933e5c8] #ref(./IMG_5774.PNG,50%) ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。 **フィールドの説明 [#xf472ead] フィールドは課題2で使用した紙を使用する。 生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方に玉を2個入れる。 残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤやプレートの上に置いてもよい。 プラ容器には色をつけたり文字や記号を書いてもよい。 プラ容器は両面テープ等でフィールドに固定してもよい。 2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよい。 **ルール [#u4e92a81] 競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。 図のA地点または(および)A'地点からスタートする。ただし接地している部分はそれぞれの領域内に収まるものとする(線上はOK)。上空部分は領域からはみ出していてもよい。 開始の合図から5秒以内にスタートボタンを押す作業を完了すること。 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。 競技終了後、ロボットが、ゴールのプラ容器に触れていてはいけない。 競技終了後、もともと玉が入っていたプラ容器が、ゴールのプラ容器に触れていてはいけない. *ロボットについて [#y56592d9] 時間内に完成させるために箱内のボールのみを運ぶロボットを制作した 時間内に完成させるために箱内のボールのみを運ぶロボットを制作した. #ref(./IMG_E5771.JPG,50%) 箱を持ち上げるための2本のアームを取り付けた 箱を持ち上げるための2本のアームを取り付けた. また,直角まで持ち上げれるよう左右に一つずつモーターを取り付けた. #ref(./IMG_E5772.JPG,50%) 持ち上げたボールが外に飛んでいかないための受け入れ口を取り付け,さらにボールがスムーズに流れて行くようにレールを取り付けた *プログラムについて [#se64de3d] **送信側プログラム [#bcfba62a] ***#defineの設定 [#y3b5907b] #define Line 43 //ライントレースで白黒を判断する数値// #define UP 13 //アームを上げるメッセージ// #define DOWN 12 //アームを下げるメッセージ// #define STOP 11 //送信をやめるメッセージ// ***サブルーチンの設定 [#tdb19382] sub follow_line() { SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); int t; t=FastTimer(0); while(FastTimer(0)<250) { if(SENSOR_2>43 && SENSOR_3>43){OnFwd(OUT_BC); }else if(SENSOR_2<Line && SENSOR_3>Line){OnFwd(OUT_C);Off(OUT_B); }else if(SENSOR_2>Line && SENSOR_3<Line){OnFwd(OUT_B);Off(OUT_C); }else {Off(OUT_BC);} } PlaySound(SOUND_UP); Off(OUT_BC); } 2つのライトセンサーが定義した数値より小さい時に交差点と判断して止まる. ***全体のプログラム [#se15a6f7] task main() { ClearTimer(0); follow_line(); Wait(20); OnFwd(OUT_BC); //交差点から少し進む// Wait(95); Off(OUT_BC); OnFwd(OUT_C); //90度回転// OnRev(OUT_B); Wait(100); Off(OUT_BC); OnRev(OUT_BC); //少し後ろに下がる// Wait(230); Off(OUT_BC); Wait(40); SendMessage(DOWN); //アームを下ろすメッセージを送る// Wait(1); SendMessage(STOP); //メッセージ終了// OnFwd(OUT_BC); //前に進み、箱を挟む// Wait(300); Off(OUT_BC); OnFwd(OUT_B); //旋回// OnRev(OUT_C); Wait(220); Off(OUT_BC); Wait(20); OnFwd(OUT_BC); Wait(400); Off(OUT_BC); OnFwd(OUT_C); OnRev(OUT_B); Wait(120); Off(OUT_BC); OnRev(OUT_BC); SendMessage(UP); //アームを上げるメッセージを送る// Wait(200); SendMessage(STOP); //メッセージ終了// Off(OUT_BC); } **受信側プログラムについて [#p70c7078] ***#defineの設定 [#t3d7911f] #define arm_up OnFwd(OUT_AC); Wait(30); Off(OUT_AC); //アームを上げる// #define arm_down SetPower(OUT_AC,1); OnRev(OUT_AC); Wait(50); Off(OUT_AC); //アームを下げる// #define UP 13 //アームを上げるメッセージ// #define DOWN 12 //アームを下げるメッセージ// #define STOP 11 //メッセージ終了// ***全体のプログラム [#sa5744a1] task main() { ClearMessage(); while(true) { if(Message() == STOP){ Off(OUT_AC); //止まる// }else if (Message() == DOWN){ arm _down; //アームを下げる// }else if(Message() == UP){ arm_up; //アームを上げる// } } } *まとめ [#u5eb11ad] 今回は時間がなく,全てのボールキャッチすることは不可能と判断したので箱の中のボールのみをとることにした.一度ある程度完成し,いざアームをあげようとしたら本の少ししか上がらず途方にくれたが,この問題点は電池を取り換えることで解決したので良かった.自画自賛になってしまうが,ボールの受け取り口をパーツを使ってうまくつくれたと思う.ただ試行錯誤の末ようやく安定して運べるロボットができたのにも関わらず,最後の発表で失敗してしまったことは残念だった.