目次

課題の説明

2014a-mission2.png

図の黄色いところに置いてある数字が書いてある紙コップを、A,B,Cと書かれた場所に置いてある同じ数字が書いてある紙コップに重ねる。
図の黄色い場所には、その数字と同じ数字が書かれた紙コップが置かれる。 またA,B,C書かれた場所にも1から3までの数字が書かれている紙コップが置かれる、 どのコップをどこに置くかは競技を始める直前にサイコロを振って決める。
またA,B,C書かれた場所にも1から3までの数字が書かれている紙コップが置かれる、 どのコップをどこに置くかは競技を始める直前にサイコロを振って決める。

ルール、得点の算出方法は2014a/Mission2を参照してください。

メンバー

藤岡芳弥 秋山和哉 岩佐暁史

 ロボット本体

全体像 new_17.jpg

コップをつかむ機構が大きさを取りすぎてしまったためRCXを高いところに置くしかなくアンバランスになってしまった。

コップをつかむ機構 

new_14.jpg

コップの上からかぶせることによりコップをつかむ。

コップをつかんだ時の写真

new_20.jpg

タイヤのゴムを上下運動させる機構

new_55.jpg ↙写真では切れていますがここにタイヤのゴムが付いています。

のギアとモーターのギアがかみ合っているので(下の写真を参照)、△離癲璽拭爾回転することによりタイヤのゴムが先端についた,上下運動して、コップをつかんだり持ち上げたりします。 new_23.jpg

コップを外す機構

24.jpg

タイヤのゴムに挟まったコップをに上げていくと、赤い突起がついた所にコップがあたりコ落ちる。

センサー

25.jpg

正面を向いている、赤いLEDが見て取れる青いブロックがコップの色を感知するためのセンサー
(何番のコップかを識別するために、コップには番号ごとに色を付けてある。)

下を向いている青いブロックがライントレイスするためのセンサー
(ラインの上を走ってコップを見つけるため)

プログラム

定義

#define HIPOWER 1   //直線用のパワー
#define LOWPOWER 3    //カーブ用のパワー
#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); OnRev(OUT_A);           //turn_left1を左に極地旋回と定義
#define turn_left0 set_power_L;\  
OnFwd(OUT_C); Off(OUT_A);         // turn_left0左に信地旋回と定義
#define turn_right0 set_power_L;\
OnFwd(OUT_A); Off(OUT_C);        //turn_right0を右に極地旋回と定義
#define turn_right1 set_power_L;\
OnFwd(OUT_A); OnRev(OUT_C);  //右折 //turn_right1を右に信地旋回と定義
#define SIGNALON 13 
#define cross set_power_H; OnFwd(OUT_AC);Wait(20); //交差点を渡る
#define c1 if (SENSOR_3 < 37) {Off(OUT_AC); SendMessage(SIGNALON);Wait(80);} //黒い紙コップを見つけたら2番のRCXにメッセージを送る。

メインタスク

task main() {

SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーセット
SetSensor(SENSOR_3,SENSOR_LIGHT);
int nl=0;//交差点を判断するために、何回連続で黒線を感知したかカウントする変数nlを定義(交差点では通常のラインよりも黒連続で感知する回数が多くなる。)
int cc=0;//交差点の数を数えるための変数ccを定義 

**A地点まで行くためのプログラム
go_forward;
Wait(460);
turn_left1;
Wait(140);
go_forward;
Wait(280);

ここまでのプログラムにより図のA地点まで来ます。

 
ClearTimer(0);//タイマーゼロをセット(交差点でないところで黒線を連続で数えすぎて交差点を誤って認知しないためにタイマーを用いる)
while (true) {
while ((nl < 5) ||(FastTimer(0)<500)){// 黒線を5回を連続で感知した回数が5以下、もしくはスタートから500秒以内ならば以下のプログラムを実行する
  if (SENSOR_2 < 37) { //黒線を判断
    turn_left1;         //左に局地旋回
  nl++;
  } else if (SENSOR_2 < 41) { //黒線と白線の中間(黒線より)を判断
    turn_left0;
  nl=0;//nlをリセット
  } else if (SENSOR_2 < 45) { //黒線と白線のちょうど中間を判断
   go_forward;
   nl=0;
  } else if (SENSOR_2 < 50) { //黒線と白線の中間(白線より)を判断
    turn_right0;          
  } else {           //ロボットが白線の上にいる状態
     turn_right1; 
  nl=0;
  }
    
  Wait(1);
}

turn_right1; Wait(35);
cross;
cc++;
if (cc == 1) { //一つ目の交差点に出会ったと判断
go_forward;
Wait(50);
c1;
OnRev(OUT_AC);
Wait(150);
turn_left1;
Wait(40);
go_forward;
Wait(280);
c1;
OnRev(OUT_AC);
Wait(500);
turn_left1;
Wait(100);
go_forward;
Wait(200);
c1;
OnRev(OUT_AC);
Wait(100);
turn_left1;
Wait(330);
go_forward;
Wait(1000);
} } }

参考文献:http://yakushi.shinshu-u.ac.jp/robotics/?2014a%2FMember%2Fkanzaki%2FMission2


添付ファイル: file26.jpg 65件 [詳細] file25.jpg 154件 [詳細] file24.jpg 146件 [詳細] filenew_23.jpg 122件 [詳細] file23.jpg 52件 [詳細] filenew_55.jpg 137件 [詳細] filenew_22.jpg 70件 [詳細] filenew_20.jpg 131件 [詳細] filenew_19.jpg 79件 [詳細] filenew_18.jpg 76件 [詳細] filenew_17.jpg 162件 [詳細] filenew_16.jpg 84件 [詳細] filenew_15.jpg 66件 [詳細] filenew_14.jpg 143件 [詳細] filenew_12.jpg 54件 [詳細] filenew_11 .jpg 61件 [詳細] filenew_10.jpg 95件 [詳細] file5a7TaSGpTVXfZ4d7FkbEK6BUu7KOUfOLgEsqLBzYoXk.jpg 54件 [詳細] file2ydBLp9gf-mkDoRFdqjxFI-4lVNhzEDlzDM28tZyL08.jpg 50件 [詳細] file2o58Dy3A_ZWBDRPkEf-eYw4uSyJlVeQ8_9vfafPzKRU.jpg 61件 [詳細] file1vHYWSIEJuFNOz2_y-y8g3_YLPsT5pxJ7gYLqIIYnfU.jpg 65件 [詳細] file2014a-mission2.png 144件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-12 (火) 00:13:29