''&size(30){目次};'' #contents *メンバー [#df0629b7] こだま ユージ **課題内容 [#zf61cf2b] 黄色いホイールを2個以上連射できるロボットを作成する **それぞれの課題について [#k6ed6934] こだま→懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。 ユージ→全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。 *コンセプト [#h9447ac9] 今回のロボットはブロックを複数投げつけるため、どうしても大きくなってしまいます。というわけで、私たちのチームは軽量化(コンパクト)を目指して作りました。 今回はホイールを連射できるようにするのがキーポイントなので、あらかじめ複数のアイディアを出さないと詰まってしまうのではないかと心配でした。 *ロボットの紹介 [#l7234490] #ref(2010a/A8/課題3右/ディファレンシャルギア.jpg); ディファレンシャルギアを採用させていただきました。ディファレンシャルギアとは、1個のモーターで左右のタイヤを動かすことができる便利なシステムです。最初何も知らない状態で作り始めたので、ストッパーをつけ忘れてたり、ギアの数を間違えたりと、いろいろ苦労しました。個人的にはこのコンパクトさが気に入ってます。 #ref(2010a/A8/課題3右/土台.jpg); 土台のみです。少し光センサーの高さが心配ですが、まぁ大丈夫だろうということでこうなりました。 #ref(2010a/A8/課題3右/打ち出す.jpg); 今回はこの部分を考えるのが一番苦労しました。なぜかというと、これを考える前に2つ案があり作成まで至ったのですが、それが両方とも却下されたからです。この場合はゴルフみたいにホイールを打ち出します。 #ref(2010a/A8/課題3右/リロード.jpg); ホイールを固定・供給を同時にこなす今回のロボットの中で一番重要な役割を果たす部分です。試行錯誤の結果、これがシンプルかつ安定した仕事をこなせます。 #ref(2010a/A8/課題3右/ロボット・全体像.jpg); これがそれぞれの部分を合わせた全体像です。ホイールを飛ばす部分がそれほど重くないので、土台をコンパクトにしても十分動くことができました。 #ref(2010a/A8/課題3右/ホイール有り.JPG); ホイールを足すとこんな感じになります。見えづらくてすみません。 *失敗作 [#va686014] ホイールを打ち出す部分の制作にあたり、作成まで至ったのに却下されたパーツを紹介します。 **その1 ピッチングマシーン [#h4780a5f] #ref(2010a/A8/課題3右/失敗作.jpg,50%); ホイールを飛ばすにあたり、これが真っ先に思い浮かんだのですが実際に飛ばしてみたところ、5cmも飛びませんでした。また、ホイールの供給に苦労するだろうということで却下されました。 **その2 投擲マシーン [#ib6851bf] 2つ目の案です。時間をかけて作成したのですが失敗に終わり、あまりのショックで写真を撮り忘れました。イメージとしては人間の腕を再現した感じです。文字通りロボットが投げつけます。しかし、投擲の際に複数詰めてたホイールがすべて飛んでいってしまった上に思うようなところに行かなかったので却下されました。 *工夫した点 [#dd6e4bb5] 無駄なパーツをできるだけ使わないようにして、軽量化し、すばやく動けるようにするとともに、ホイールを打ち出す際に邪魔になるものがなくなるようにしました。また、ホイールを連射しなければいけなかったので、アームを回転させるだけで、簡単にホイールを発射できるようにしました。 無駄なパーツをできるだけ使わないようにして、軽量化し、すばやく動けるようにするとともに、ホイールを打ち出す際に邪魔になるものがなくなるようにしました。 また、ホイールを連射しなければいけなかったので、アームを回転させるだけで、簡単にホイールを発射できるようにしました。 *プログラム [#x7bd8145] **こだま [#kd84dfd0] #define L 60 //Lで光を探すための閾値 #define M 80 //Mで光との距離を調節するための閾値 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1は光センサに接続 SetSensor(SENSOR_2,SENSOR_LIGHT); //センサ2は光センサに接続 while((SENSOR_1<M) && (SENSOR_2<M)){ //光に近づくまで繰り返し if(SENSOR_1>L){ //どちらも明るければ直進 if(SENSOR_2>L){ OnFwd(OUT_A); Wait(50); OnRev(OUT_A); Wait(50); } if(SENSOR_1>L){if(SENSOR_2>L){ //左が明るければ左に行く OnFwd(OUT_A); Wait(100); }} else{ if(SENSOR_2>L){ //右が明るければ右に OnRev(OUT_A); } } } OnFwd(OUT_B); //光に近づけばブロックを投げる Wait(200); Off(OUT_B); } } **ユージ [#nd4174ed] #define Light 70 //閾値を設定 #define Eye SENSOR_1 //光センサを設定 task main() { SetSensor(Eye, SENSOR_LIGHT); //光センサー repeat(2){ //2回繰り返し whlie(Eye < Light){ //括弧内はライト探索動作 OnFwd(OUT_A); } OnFwd(OUT_B); //見つけ次第ホイール打ち出し Wait(200); Off(OUT_B); OnFwd(OUT_A); //ちょっと右にターン Wait(200); Off(OUT_A); } Off(OUT_A); //仕事を果たしたら機能停止 Off(OUT_B); } *感想 [#o9d7a6a0] **こだま [#h088982f] 今回は前よりも製作時間が短くていつもより大変だった。 プログラムもロボットもかなり大雑把になってしまった。 **ユージ [#jdc115c4] 本当はもっと凝ったタスクを作りたかったのですが、ちょっと時間が足りなくて粗末なプログラムになってしまいまいた。その分最終課題のロボコンで挽回したいと思います。 *コメント [#w0af36b1] コメントをどうぞ - 投げる仕組みなどを工夫しているのがわかります。プログラムは疑問点がいくつか残ります。一人目は、途中からSensor2と3が混ざっていること、場合分けの考え方自体はよいと思うのですが、もう少しきれいにかけることが気になりました。二人目に関しては、片方の懐中電灯の光量が70以下の場合、二回とも同じ懐中電灯にむけて投げてしまう可能性があると思います。次に、授業が説明があった通り、変数を用いて最大値を求める課題なので、それに注意してみてください。 -- [[FI]] &new{2010-07-31 (土) 07:40:51}; - 工夫点なども書いてみてください -- [[TAKA]] &new{2010-08-08 (日) 12:21:42}; #comment