[[2009]] *課題2 ライントレースロボットを作る [#qcba8fc1] A11R タイラー/ピーチクパーチク~ #contents **ロボット [#h779cce3] ***車体 [#p2c45fc8] #ref(main.JPG)~ 車輪は基本的にローヴァーロボットの幅をつめたもの。~ ローヴァーロボットとの最大の違いは、ギアを縦に組んだこと。~ 車高を高くすることで安定感が失われるが、光センサーを仕込みやすくコンパクトな仕上がりとなった。~ 前方に伸びた拡張パーツに、センサーやアームを装着する仕組み。 ***タッチセンサー [#ibfeb330] #ref(bamp1.JPG)~ 説明書26pのシングルバンパーをほぼそのまま使用したところ、反応しなかった。~ そのため、テコの原理を利用して長いアームのセンサーを作成。~ #ref(bamp2.JPG) #ref(bamp3.JPG)~ 交差点上の牛乳パックをこれで感知する。~ ***光センサー [#s27b9c2c] 車輪のすぐ前方に装着。センサーを真下に向けることで正確な場所感知を可能に。~ #ref(light.JPG) ***アーム [#x6cce186] #ref(arm1JPG.JPG)~ ギアとモーターを直接繋いだアーム。牛乳パックをこれで移動させる。~ 白ギアの装着により、アームに負荷がかかってもモーターに悪影響を与えない仕組み。~ しかしシンプルな構造だが脆い。車体への取り付けも不安定。~ #ref(arm2.JPG) ***キャスター [#e0833c33] 重くなる前方部分を支えるためのキャスター。~ p46のキャスターや、回転軸と固定位置を同じにしたキャスターを作ってみた。~ が、安定性の問題でうまくいかず、先輩の意見をもとに車輪でなく支え棒を作成。~ しかし、ロボット自体の重さゆえ堅牢性に欠ける。~ そんなわけでシンプルなキャスターを二つ作った。それぞれを拡張パーツの左右に装着。~ #ref(cas1.JPG) #ref(cas2.JPG) ***調整 [#of9d5627] #ref(bamp5.JPG) #ref(cas3.JPG)~ タイヤが大きすぎて不安定だったので小さくした。~ そのためキャスターもゴムを取り外しコンパクト化。小回りが利くようになった。 ***完成 [#x5e75ece] #ref(comp.JPG)~ なんだかカブトムシにクワガタムシを足したような外見になった。 **コース [#td8c7c25] ***コース1 [#o04034f2] #ref(course1.JPG)~ 交差点:3~ 紙の端や交差点が狭い。 ***コース2 [#a6ffdafc] #ref(course2.JPG)~ 交差点:3~ コース1の改良版。~ 交差点や紙の端など細かいところを改良。 **プロブラム [#ka9d6769] ***1:紙パックをもとの位置に戻したのちコースに戻って進む [#s1680104] 作成:ピーチクパーチク~ ~ 牛乳パックをよけて進むのはコース的に難しそうだったので、~ アームを使ってパックを退かす方向性でプログラムを組んだ。 #define gs(t) OnFwd(OUT_A+OUT_C);Wait(t);Float(OUT_A+OUT_C); //(t)だけ直進 #define gb(t) OnRev(OUT_A+OUT_C);Wait(t);Float(OUT_A+OUT_C); //(t)だけ後退 #define gs2 OnFwd(OUT_A+OUT_C); //直進 #define close OnRev(OUT_B);Wait(40);Off(OUT_B); //アームを閉じる #define open OnFwd(OUT_B);Wait(40);Off(OUT_B); //アームを開く #define THRESHOLD 40 //しきい値 int x = 0; //変数xを定義 task main() { SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー定義 SetPower(OUT_A+OUT_C,5); //トルク調整 while (true) { gs2 OnFwd(OUT_B); //常にアーム開き続ける //ライントレースプログラム if (SENSOR_1 < THRESHOLD) { OnRev(OUT_A); Wait(2); OnFwd(OUT_A); } else if (SENSOR_3 < THRESHOLD) { OnRev(OUT_C); Wait(2); OnFwd(OUT_C); } else if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { gs(20) x = x + 1; //xにx+1を代入 //障害物の感知 }else if (SENSOR_2 == 1) { ClearTimer(0); //タイマーのセット gb(110) gs(70) //障害物が牛乳パックだったとき // =タイマーが5,5秒以内だったとき } else if (( Timer(0) <= 55) && (SENSOR_2 == 1)) { Float(OUT_A+OUT_C+OUT_B); close //アームを閉じる OnRev(OUT_B); gs(120) //前進 OnFwd(OUT_C);OnRev(OUT_A); //回転 Wait(160); Float(OUT_A+OUT_C); Off(OUT_B); open //アームを開く gb(70); //後退 OnFwd(OUT_C);OnRev(OUT_A); //回転 Wait(130); //三周したら自動的に止まる // =交差点を7回通る (交差点を通る回数ーパックを運ぶ回数+調整値=7) } else if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD) && (x == 7)){ Float(OUT_A+OUT_C); break; //while文を終了 } } } ***2:紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む [#j981cd9b] 作成:タイラー **コメント [#w23da78b] #comment