#contents
*ロボコンの説明 [#pf7397c5]
[[2006a/ロボコン]]に乗ってます!
*プログラム [#k803efe2]
ロボットを二台使用する事にして、缶を取ってくるロボット(α)と缶を受け取りゴールするロボット(β)を作りました。
*プログラムと攻略方法 [#k803efe2]
私たちは、ロボットを二台使用する事にして、缶を取ってくるロボット(α)と缶を受け取りゴールするロボット(β)を作る事にしました。
-α号はスタート地点からライントレースをして缶の回収に向かい、β号はスタートの反対側で缶が運ばれてくるのを待つ事にしました。
-β号はタッチセンサーに缶が触れるとすかさずアームを降ろしてキャッチ、そのままゴールへ向かう仕組みにしました。
**試作1(タッチセンサーとタイマーを使用) [#c8707704]
***(α)号 [#fad48422]
 #define  turn_right OnFwd(OUT_A);OnRev(OUT_C);
 #define  turn_left OnRev(OUT_A);OnFwd(OUT_C);
 #define  go  OnFwd(OUT_A+OUT_C);
 #define  back OnRev(OUT_A+OUT_C);
 #define  stop_turn Off(OUT_A+OUT_C);
-このロボットは頭にタッチセンサー、後ろに缶をつかむアームがついています 
-OUT_Bがアームの上下用になっています
-アームを上げた状態から始めます
 //製作者:itou
 //製作時間」:5時間
 #define  turn_right OnFwd(OUT_A);OnRev(OUT_C);//右に回転する為の定義
 #define  turn_left OnRev(OUT_A);OnFwd(OUT_C);//左に回転する為の定義
 #define  go  OnFwd(OUT_A+OUT_C);//直進する為の定義
 #define  back OnRev(OUT_A+OUT_C);//後退する為の定義
 #define  stop_turn Off(OUT_A+OUT_C);//回転を止める為の定義
 
 task main ()
 {
  SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_1,SENSOR_TOUCH);//センサー1がタッチセンサーだと定義
 
 ClearTimer(0); //タイマーをリセットして時間を計れるようにする
 
 go;
 until (SENSOR_1==1)
 back;
 Wait(FastTimer(0)/2);
 //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分交代する
 
 turn_right;
 Wait(120);
 //右回りに90度回転し、
 
 ClearTimer(0);
 go;
 until (SENSOR_1==1)
 back;
 Wait(FastTimer(0)/4);
 //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する  
  
  ClearTimer(0); 
 turn_right;
 Wait(120);
 go;
 until(SENSOR_1==1);
 //右回りに90度回転し、缶にぶつかるまで直進する
 
 back;
 Wait(50);
 turn_right;
 Wait(250);
 stop_turn;
 Wait(30);
 //回転しても缶に接触しない程度に後退して、180度回転する
 
 back;
 Wait(50);
 OnRev(OUT_B);
 Wait(17);
 //後退した分戻り、アームを降ろして缶を取り込む
 
 ClearTimer(0);
  
  go;
  until (SENSOR_1==1)
  back;
  Wait(FastTimer(0)/2);
 go;
 until(SENSOR_1==1);
 back;
 Wait(FastTimer(0)/2);
 //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分後退する
  
  turn_right;
  Wait(120);
 turn_left;
 Wait(120);
 //左回りに90度回転し、
  
  ClearTimer(0);
 ClearTimer(0);
  
  go;
  until (SENSOR_1==1)
  back;
  Wait(FastTimer(0)/4);
  
  turn_right;
  Wait(120);
  go;
  until(SENSOR_1==1);
  
  back;
  Wait(50);
  turn_right;
  Wait(250);
  stop_turn;
  Wait(30);
  
  back;
  Wait(50);
  OnRev(OUT_B);
  Wait(17);
  
  ClearTimer(0);
  
  go;
  until(SENSOR_1==1);
  back;
  Wait(FastTimer(0)/2);
  
  turn_left;
  Wait(120);
  
  ClearTimer(0);
  
  go;
  until(SENSOR_1==1);
  back;
  Wait(FastTimer(0)/4);
  
  turn_right;
  Wait(250);
  back;
  Wait(30);
  
  Off(OUT_A+OUT_C);
  OnFwd(OUT_B);
  Wait(17);
  back;
  Wait(30);
  Off(OUT_A+OUT_C);
 go;
 until(SENSOR_1==1);
 back;
 Wait(FastTimer(0)/4);
 //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する  
 turn_right;
 Wait(120);
 back;
 Wait(30);
 //右回りに90度回転し、受け渡しの出来る距離まで進む
 
 Off(OUT_A+OUT_C);
 OnFwd(OUT_B);
 Wait(17);
 back;
 Wait(30);
 //アームを上げて缶を押し出す
 Off(OUT_A+OUT_C);
  }

***(β)号 [#r7644b5c]
 //製作者:itou
 //製作時間:5時間
 #define  turn_right OnFwd(OUT_A);OnRev(OUT_C);
 #define  turn_left OnRev(OUT_A);OnFwd(OUT_C);
 #define  go  OnFwd(OUT_A+OUT_C);
 #define  back OnRev(OUT_A+OUT_C);
 #define  stop_turn Off(OUT_A+OUT_C);
 //定義・ロボット構成は(α)号と同じです
 
 task main ()
 {
  SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_1,SENSOR_TOUCH);//センサー1はタッチセンサーです
  
  repeat(2){
  until(SENSOR_1==1);
  back;
  Wait(50);
  turn_right;
  Wait(250);
  stop_turn;
  Wait(30);
  back;
  Wait(50);
  OnFwd(OUT_B);
  Wait(17);
 until(SENSOR_1==1);
 back;
 Wait(50);
 turn_right;
 Wait(250);
 stop_turn;
 Wait(30);
 //缶がセンサーに当ったら、回転しても接触しない程度に後退して180度回転する
  
  ClearTimer(0);
 back;
 Wait(50);
 OnFwd(OUT_B);
 Wait(17);
 後退した分戻り、アームを降ろして缶を取り込む
  
  go;
  until (SENSOR_1==1);
  back;
  Wait(FastTimer(0)/2);
 
 ClearTimer(0);
  
  turn_left;
  Wait(120);
 go;
 until (SENSOR_1==1);
 back;
 Wait(FastTimer(0)/2);
 //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分後退する
  
  ClearTimer(0);
 turn_left;
 Wait(120);
 //左回りに90度回転する
  
  go;
  until (SENSOR_1==1);
  back;
  Wait(FastTimer(0)/4);
 ClearTimer(0);
  
  turn_right;
  Wait(120);
  Off(OUT_A+OUT_C);
  Wait(30);
  OnRev(OUT_B);
  Wait(17);
 go;
 until (SENSOR_1==1);
 back;
 Wait(FastTimer(0)/4);
 //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する  

 turn_right;
 Wait(120);
 Off(OUT_A+OUT_C);
 Wait(30);
 OnRev(OUT_B);
 Wait(17);
 //右回りに90度回転し、アームを上げて缶を押し出す準備をする
  
  back;
  Wait(70);
  Off(OUT_A+OUT_C);
 back;
 Wait(70);
 Off(OUT_A+OUT_C);
 //進んで缶を押し込む
  
  ClearTimer(0);
 
 ClearTimer(0);
  
  go;
  until(SENSOR_1==1);
  back
  Wait(FastTimer(0)/2);
 go;
 until(SENSOR_1==1);
 back
 Wait(FastTimer(0)/2);
 //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分後退する
  
  turn_right;
  Wait(120);
 turn_right;
 Wait(120);
 //右回りに90度回転する
 
 ClearTimer(0);
  
  ClearTimer(0);
  
  go;
  until (SENSOR_1==1)
  back;
  Wait(FastTimer(0)/4);
  
  turn_right;
  Wait(120);
  go;
  Wait(90);
  }
 go;
 until (SENSOR_1==1)
 back;
 Wait(FastTimer(0)/4);
 //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する   
 turn_right;
 Wait(120);
 go;
 Wait(90);
 //右回りに90度回転して、缶の受け取り位置まで戻る
 Off(OUT_A+OUT_C);
 }

***試作1のプログラムの問題点 [#a1a5e90c]
-真っすぐに進む保障がない
-障害物に当たった時の解決能力が皆無
-缶を受け取る際に缶をはじいてしまう


上のプログラムは試作なのでこれから改良していきます!!
**試作2 (光センサーを使用) [#r36ef13c]
上のプログラムは問題点が多かったため、ボツになりました!!
**完成型 (光センサーを使用) [#r36ef13c]
制作者 takumi
***α号 [#g775a526]
[[2006a/B4/プログラムα]]
#ref(2006a/B4/ロボコン/NEC_0114.JPG)

***β号 [#p6fed1b7]
[[2006a/B4/プログラムβ]]
#ref(2006a/B4/ロボコン/NEC_0113.JPG)
*苦労した点 [#s85896e6]
苦労した点は、なんといってもプログラムである。~
最初は光りセンサーなしでやろうとしたが、スタート位置や缶の重さなどにより時間調整が上手くいかず断念!~
仕方なく光りセンサーを投入したところ意外とジャストミートし、即採用決定!~
#ref(2006a/B4/ロボコン/NEC_0110.JPG)
それから、数々の苦難を乗り越えてついに完成~
…と思いきや、開始一時間前にプログラムに異常が発生!?~
もうだめかと思っていたが仲間の助言によりギリギリセーフで完成!!~
なんとか本番を迎えることができたのである。
*ロボコン [#ha992e46]
-当日になって、α号のライントレースの能力が不調な事に気がつき、慌てて調整。電池の残りも少なくなり、新しい物にしたら元気が良すぎて再度時間調整しなければならなくなりました。
-缶の受け渡しさえ出来れば、β号は確実にゴールしてくれるので、α号ばかり応援していました。
-午前中に行われた2回では、惜しくも缶取り損ねたり、まっすぐに缶が転がらなかったりで缶をβ号に渡す事が出来なかったので、メンテナンスと時間調整を入念に行う事になりました。
-午後に行われた3回目で、受け渡しが無事に成功し、β号は期待通りにそのままゴール。会場が盛り上がりました!!
-最終的に私たちのチームは2位になる事が出来ました!!!!賞品として、夏を快適に過ごせる飲み物を頂きました。でも、一番の賞品は仲間の笑顔とか青春っぽい事を言ってみたり。
*工夫した点 [#v60a4e3d]
工夫した点はまずロボットの軽量化である。~
他のチームと比べ我々はシンプルを追求した。~
特に、アーム一本で勝負に出たのは正直不安であったが本番では大活躍してくれた。~
タッチセンサーの方もアームを邪魔しないよう設置されこちらも申し分なし!~
#ref(2006a/B4/ロボコン/NEC_0106.JPG)
次にプログラムの方は、マクロを最大限に活用した。~
例えば、ライントレースのプログラムや回転プログラムなどを設定しかなりの省略化に成功し、~
簡単に修正可能になったりミスを早期発見できるようになった。
*ロボット [#zeeab6b9]

#ref(2006a/B4/ロボコン/NEC_0112.JPG)
今回のロボットはシンプルかつ軽量というコンセプトで開発しました。~
ロボットはできるだけシンプルにしたかったので下の土台は授業の一番最初で作ったものをそのまま使いました。今回大変だったのは缶をいかにして掴むかということでした。これを考えてつくるのにすごく時間がかかりました。ほかの班はみんな掴む部分に歯車を使っていたが僕らの班は歯車を使うことなくモーターに直結しました。~
そのほかにもロボットどうしの缶の受け渡しをどうするかというのも課題でした。これは缶を受け取る側のロボットにタッチセンサーを付け、それにあたればすぐに缶を掴むようにしました。以外にも缶を受け取るより渡すほうの正確さにかかっていることがわかりました。~
またゴールの段差をどのようにクリアするかですが、これは適当に何回も実験している間に成功しました。~
#ref(2006a/B4/ロボコン/NEC_0108a.JPG)
その結果として缶を入れることに成功!~
成功した点は、複雑な装置をつけるのではなく、~
今までの授業でやってきたことを参考にして作ったのが成功へとつながったと思われる。
*感想 [#d8de491b]
-始めは何を作ったらよいのか全く分からなかった。~
しかし、缶をゴールに持っていくおおまかなやり方を考えたら少しずつロボの形が出来てきた。~
缶をどうやってもう一方のロボに転がすかなどを考えるのには苦労した。~
それでも、うちの班は缶をゴールする事が出来たので良かったと思う by oga
-今回は参考にするプログラムが無く、どうしたらよいか分からなかったが試行錯誤していくうちになんとか形になり、完成に至った。~
マシンはシンプルで機体の誤作動を減らし、プログラムは微調整により正確に動くようになった。~
その結果、見事缶を入れることができたのだ。~
プログラム担当の私としてはうれしい限りである。by takumi
-やはり缶をどのように取るかが今回の課題であり、また結果にもつながったのではないかと思いました。
これを考えるのがすごく大変でした。1台目ができあがれば2台目はすぐにできると思っていましたが改良を大分したので結局時間は同じくらいかかりました。
でも成功したのでよかったです。 by kaz
-ロボコンの内容が発表されたとき正直勘弁してちょーだい、んもうおうちに帰りたいって感じだった。でも気づいたときには「いけるのかも」って思うようになってた。そして本番、、どの班も予想外に手こずっていた。そして自分たちの番がきた。できちゃった。あのときの喜びは忘れらない。この班で本当によかった! by mune
-入賞と言うのは夢にも思っていなかったので、凄く嬉しかった。色々な考えの人と一緒に作業する事で、この結果に繋がったのだと思う。今まで一緒にやってきてくれた班の人に感謝したいと思います。by masa
*コメントお願いします [#b455e8b1]
-作戦の流れがよくわかりません。試合はどういう流れで進む予定で実際はどうだったのかをまとめてみてください。 -- [[まいける(TA)]] &new{2006-08-16 (水) 00:09:28};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS