目次

課題

1.スタート地点から出発し、黒い線にそって動く。
2.一つ目の十字の交差点と二つめの十字の交差点の間に置かれたピンポン玉をつかむ。
3.さらに黒線に沿って動いてゴール地点を目指す。
4.ゴールに向けてピンポン玉をシュートする。

http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2014a%2FMission1&src=2014a-mission1.png

ロボット紹介

ロボット全体像

1.jpg2.jpg3.jpg

横から          前から          底から

光センサー

6.jpg

青色の部品が光センサーです。このセンサーによって黒か白かを判断してライントレースをします。

ピンポン玉のキャッチ方法

7.jpg

この写真のタイヤの部品を右回転させ、ピンポン玉がタイヤに触れたら内側に入り

タイヤを回転させ続け、ピンポン玉が離れないようにしました。

ピンポン玉のシュート方法

7.jpg

タイヤの部品を左回転させ、そうするとタイヤと連動している

8.jpg5.jpg

このパーツが回転し、ピンポン玉を押し出すようにした。

プログラム

定義

#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); OnRev(OUT_A);  //左旋回
#define turn_left0 set_power_L;\
OnFwd(OUT_C); Off(OUT_A);  //左折
#define turn_right0 set_power_L;\
OnFwd(OUT_A); Off(OUT_C);  //右旋回
#define turn_right1 set_power_L;\
OnFwd(OUT_A); OnRev(OUT_C); //右折
#define cross set_power_H; OnFwd(OUT_AC);Wait(20); //交差点を渡る

task main() {

設定

 SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーセット
 int nl=0;  //交差点を感知するための変数
 int cc=0;  //交差点を渡った数
 int hc=0;  //色々な機能を実行するための変数
 go_forward; //スタートの枠から出るための直進
 Wait(100);
 ClearTimer(0); //タイマー0をセット
 OnRev(OUT_B); //ピンポン玉が離れないようにするためのタイヤを回す
 while (true) {  

ライントレース

 while ((nl < 5)||(FastTimer(0)<500)||(FastTimer(1)<680)){ //nlが5より小さい又はスタートから5秒以内の時又は2個目と3個目の交差点を過ぎて6.8秒以内の時
   if (SENSOR_2 < 37) {  //濃い黒を感知したら
     turn_left1;     //左旋回
      nl++;        //nlに1を足す
   } else if (SENSOR_2 < 39) { //薄い黒を感知したら
     turn_left0;        //左折      
nl=0;             //判断し直し
   } else if (SENSOR_2 < 45) { //灰色を感知したら
     go_forward;         //直進
]nl=0;             //判断し直し
   } else if (SENSOR_2 < 47) { //薄い白を感知したら
     turn_right0;         //右折
   } else {           //濃い白を感知したら
      turn_right1;        //右旋回
   }      
   Wait(1);
 } 

光センサーにより明るさを測って、明度の値により左右に曲がらせてライン上を進みます。  交差点は左旋回の回数を計ることで判別します。左旋回の回数はnlというカウンターで 計ります。上記の動作は一回あたり1/100秒間行われます。つまり連続で左旋回が行われて nlが加算されていった場合、nlが5になるのにかかる時間は0.5秒として考えることができます。 右旋回が0.5秒以上行われない限りは通常であると判断しライントレースを続けます。

交差点

 turn_right1; Wait(35); //交差点を感知するときにずれたのを調整
 cross;  //交差点を渡る
 nl=0; //判断し直し
 cc++; //佞1を足す
 hc++; //hcに1を足す

ピンポン玉をつかむ

while(hc==1){  //一回目の交差点を渡ったら
 turn_right1;  
 Wait(70);
 go_forward; //ボールをキャッチ
 Wait(80);
 turn_left0;  //ボールを固定
 Wait(100);  
 hc++;
}

交差点と勘違いしないために

while((hc==3)||(hc==5)){ 
 ClearTimer(1);  //2個目と3個目の交差点を渡ったらタイマー1をセットする。
 hc++;
}

ピンポン玉をシュートする

while (cc==4) {
 turn_right1; //角度を微調整
 Wait(5);
 OnRev(OUT_AC); //ゴールの外に出る
 Wait(100);
 Off(OUT_ABC);
 OnFwd(OUT_B); //ピンポン玉をシュート
 Wait(150);
 cc++;
}

止まる

while(cc==5){
 Off(OUT_ABC); //止まる
}

}

}

工夫したところ

ロボット本体

9.jpg

底からみて左側の黄色いパーツを短くすることによって、

ピンポン玉をキャッチしやすくした。

プログラム

タイマーなしでプログラムを組んだときは、下記の赤い○がついた所を

交差点と勘違いしてうまくできなかった。

タイマーを入れることによってスタートから5秒間、2個目と3個目の交差点を

過ぎてから6.8秒間は交差点を認識しないようにしたらうまくできた。

10.png

ピンポン玉がタイヤに触れても内側に入り込まなかったことがあったが、

ピンポン玉がタイヤに触れてから少し左折することによって内側によく

入り込むようになった。

感想・反省

はじめピンポン玉をコース上に置かずに試していて、すべてが完成してから初めてコース上に

ピンポン玉を置いたときにボールが全くつかめなかったのはショックだった。ロボットは想像して

いろのとは違う動きをすることが多々あるのでこまめに試したほうがいいということを思い知った。

前方が重すぎてうまく動かなかったことがあり、パーツを削ったり後方を重くしたりと苦労した。


添付ファイル: file10.png 154件 [詳細] file9.jpg 166件 [詳細] file8.jpg 150件 [詳細] file7.jpg 154件 [詳細] file6.jpg 143件 [詳細] file5.jpg 145件 [詳細] file4.jpg 67件 [詳細] file3.jpg 155件 [詳細] file2.jpg 151件 [詳細] file1.jpg 153件 [詳細]

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