http://yakushi.shinshu-u.ac.jp/robotics/?2011a%2F%A5%ED%A5%DC%A5%B3%A5%F3
全体像です。
この部分が回転することにより、ボールが発射されます。
この空洞にボールを納めます。
ここからボールを入れます。
ボールの移動。
このアームが伸びて、ボールを押し出します。
アームが伸びる仕組み。
歯によって、アームを動かします。
define THRESHOLD2 50 int move_time ; int turn_time ; int lMax_1 = 0; //センサー1の一番高い値 int tMax_1 = 0; //センサー1が一番高い値を見た時間 int lMax_3 = 0; //センサー3の一番高い値 int tMax_3 = 0; //センサー3が一番高い値を見た時間
sub light() //ゴール探知 { Off(OUT_A+OUT_C); lMax_1 = 0; OnFwd(OUT_C); ClearTimer(0); while(FastTimer(0) < turn_time) //約360°回す { OnRev(OUT_A); //一番明るい方向を探知して、時間を記録する if(SENSOR_1 > lMax_1) {lMax_1 = SENSOR_1; tMax_1 = FastTimer(0);} } Off(OUT_A+OUT_C); lMax_3 = 0; OnFwd(OUT_C); ClearTimer(0); while(FastTimer(0) < turn_time) //約360°回す { OnRev(OUT_A); //一番明るい方向を探知して、時間を記録する if(SENSOR_3 > lMax_3) {lMax_3 = SENSOR_3; tMax_3 = FastTimer(0);} } OnFwd(OUT_A); OnRev(OUT_C); Wait(tMax_1-tMax_3); //ゴールの方向に回転 }
sub ball_shot() //ボールショット { OnFwd(OUT_A); //左右に揺らす OnRev(OUT_C); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnFwd(OUT_C); OnRev(OUT_A); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnFwd(OUT_A); OnRev(OUT_C); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnFwd(OUT_C); OnRev(OUT_A); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnFwd(OUT_A); //前後に揺らす OnFwd(OUT_C); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnRev(OUT_A); OnRev(OUT_C); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnFwd(OUT_A); OnFwd(OUT_C); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnRev(OUT_A); OnRev(OUT_C); Wait(2); Off(OUT_A+OUT_C); Wait(10); OnFwd(OUT_B); //アームを前後に揺らす Wait(1); OnRev(OUT_B); Wait(1); OnFwd(OUT_B); Wait(1); OnRev(OUT_B); Wait(1); Off(OUT_B); Wait(20); OnFwd(OUT_B); //投げる Wait(20); Off(OUT_B); Wait(20); OnRev(OUT_B); //アームを戻す Wait(20); Off(OUT_B); Wait(20); }
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //それぞれの光センサーを設定 SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetPower(OUT_A+OUT_C,1); //パワーの設定 move_time = 80 ; turn_time = 238 ; OnRev(OUT_A+OUT_C); //黒(円)まで後退 until(SENSOR_2 < THRESHOLD2); OnRev(OUT_C); //白まで回転 Off(OUT_A); until(SENSOR_2 > THRESHOLD2); OnRev(OUT_A+OUT_C); //黒(線)まで後退 until(SENSOR_2 < THRESHOLD2); ClearTimer(0); // Timer(0) をリセット while ( Timer(0) <= move_time ) { if (SENSOR_2 < THRESHOLD2) { //センサーが黒のとき右に旋回 OnRev(OUT_C); Off(OUT_A); } else { //センサーが白のとき左に旋回 OnRev(OUT_A); Off(OUT_C); } } OnRev(OUT_C); //約90°回転 Off(OUT_A); Wait(turn_time/4); OnRev(OUT_A+OUT_C); //前進 Wait(50); Off(OUT_A+OUT_C); //積み込み時間 Wait(600); OnFwd(OUT_A+OUT_C); //前進 Wait(5); OnFwd(OUT_C); //回転 OnRev(OUT_A); Wait(20); OnFwd(OUT_A+OUT_C); //黒まで前進 until(SENSOR_2 < THRESHOLD2); OnFwd(OUT_A+OUT_C); //白まで前進 until(SENSOR_2 > THRESHOLD2); move_time =30 ; ClearTimer(0); // Timer(0) をリセット while ( Timer(0) <= move_time ) { if (SENSOR_2 < THRESHOLD2) { //センサーが黒のとき左に旋回 OnFwd(OUT_C); Off(OUT_A); } else { //センサーが白のとき右に旋回 OnFwd(OUT_C); Off(OUT_A); } } OnFwd(OUT_C); //回転 OnRev(OUT_A); Wait(20); OnFwd(OUT_A+OUT_C); //黒まで前進 until(SENSOR_2 < THRESHOLD2); OnFwd(OUT_A+OUT_C); //白まで前進 until(SENSOR_2 > THRESHOLD2); OnFwd(OUT_A+OUT_C); //前進 Wait(20); light(); //ゴール探知 ball_shot(); //発射 OnFwd(OUT_A); //位置をずらす OnRev(OUT_C); Wait(2); ball_shot(); //発射 OnFwd(OUT_C); //位置をずらす OnRev(OUT_A); Wait(4); ball_shot(); //発射 OnFwd(OUT_A); //位置をずらす OnRev(OUT_C); Wait(2); ball_shot(); //発射 OnFwd(OUT_A); //位置をずらす OnRev(OUT_C); Wait(2); Off(OUT_A+OUT_C); //停止 }
task main() { OnRev(OUT_A+OUT_C); //ラインまでさがる Wait(150); OnFwd(OUT_C); //回転する Wait(66); OnRev(OUT_C); //ボールの元へいく Wait(215); OnFwd(OUT_C); //ボールを囲む壁の間に二号機のアームが入るようにする Wait(62); OnFwd(OUT_A); Wait(30); OnRev(OUT_A); Wait(115); OnFwd(OUT_A); Wait(180); Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_B); //アームを出し一号機にボールを搭載させる Wait(100); Off(OUT_B); }