課題3:懐中電灯に向かってブロックを投げるロボット

黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。ただし1,3は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにすること。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。 (重複しないように一人一つ以上のプログラムを作成すること。2人のチームは1と2、3人のチームは1〜3)

  1. 全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。
  2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
  3. 全方向から2つの懐中電灯の方向を探しだし、40cmの距離に近づいて懐中電灯を狙ってホイールを投げ、懐中電灯に当てる。

メンバー

 フナヤマ  オガサワラ

ロボット

全体

完成全体.jpg

・三つのそれぞれにモーターをつかったので大きくなってしまった。

・しかしうまくバランスをとって動いてくれた。

光センサー

光センサー.jpg

・光センサーはごく一般的にここにつけた。普通だがここの位置が一番いい

問題点

アーム

アーム上.jpg

・これだとアームが下にまで向いてしまい、前に飛ぶことができなかった

ホイールを供給する場所

供給全体.jpg

・結構苦労した。

前の筆を上げ下げする動作を参考にしてホイールを供給するのを考えたが思った以上にホイールが上がらず、上に上がらず落ちてしまうこともあった。

タイヤの大きさを同じにしたら緩かったり、きつかったりして上に上がらなった。

工夫した点

アーム

アーム正面.jpg
アーム正面ここに二つのこれを組み合わせることによって、ホイールが常に上にあるようになり確実に遠くに飛ばすことに成功した。
アーム横.jpg

・このようにここの位置にストッパーを設置することによって、ちょうど地面と直角になり、前に飛ぶようになった。

車体

本体ギア.jpg

・車体には一つしか、モーターを使えなかったので、先生の説明の参考や先輩のレポートを参考にしてこのギアを採用した。

やりたいようにちゃんとなってくれてこのギアがあって助かった

ホイールを供給する場所

供給場所.jpg
供給上.jpg

・一つめのしゃしんについて   このようにギアを合わさるようにしてベルトコンベアのように上に上がるようにした。

一つのベルトを動かすだけで、ホイールがちょうどあわさり二つともうまく回転してくれる

・二つ目の写真について    このように左右上下に違う大きさのタイヤを設置することによってホイールをうまくはさんでくれた。

片方の間にも一つタイヤを設置してよりホイールを固定できるようにした。

プログラム

フナヤマのプログラム

プログラムについて

                          2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
#define THRESHOLD 60       //閾値
#define RUN_TIME 25        //RUN_TIMEを2,5秒に定義する
task main()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);    //センサ−1を光センサーに定義する
 SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサ−3を光センサーに定義する
 SetPowerOUT_C,7);        //Cのモーターの出力を7にする
 ClearTimer(0);               //タイマーをクリアする
 while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD) || (Timer(0) <=    RUN_TIME)) {//光が閾値より弱くタイマーが2,5秒以下ならば実行
      if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) {  //センサー1と3が受ける光が閾値より強ければ前進
      OnRev(OUT_C); Wait(15);
      OnFwd(OUT_C); Wait(15);
      }
      if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) {  //センサ−3が受ける光が暗くなったら左折
      ClearTimer(0);               //タイマーをクリアする
      OnRev(OUT_C);
      }
      if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) {  //センサ−1が受ける光が暗くなったら右折
      ClearTimer(0);               //タイマーをクリアする
      OnFwd(OUT_C);
      }
      if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) {  //光がなければ時計回りに回転
      ClearTimer(0);               //タイマーをクリアする
      OnFwd(OUT_C);       }
      }
Off(OUT_C);
repeat(2){                       //二回投げるので二回続ける
OnRev(SENSOR_1); Wait(50);           //前進を2,5秒以上続けたらブロックを投げる
OnFwd(SENSOR_1); Wait(50);
Off(SENSOR_1);
On(OUT_A);Wait(50);
On(OUT_2);Wait(150);                       //ここでホイールの供給をする
}
}

・今までで一番大変だった。近づくところや光の最大値などをもとめる感じがとても苦労した。

しかも課題2ということで、前進しなくてはならず、このギアでは前進がとても難しくて、よくここまでできたなっという思いだった。

・ホイールを供給する値が多めにとることで、ちゃんとホイールが供給されるようになった。

オガサワラのプログラム

1. 全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。

   #define THRESHOLD 60       //閾値
   #define RUN_TIME 25        //RUN_TIMEを2,5秒に定義する
  task main()
   {
   SetSensor(SENSOR_1,SENSOR_LIGHT);    //センサ−1を光センサーに定義する
   SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサ−3を光センサーに定義する
   SetPowerOUT_C,7);        //Cのモーターの出力を7にする
   ClearTimer(0);               //タイマーをクリアする
   
  while(true){
   int light_max=0; //光センサーの最大値
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)){ //センサー1,3が強い光を感知
   Off(OUT_C); //停止
   Wait(40); 
   OnRev(SENSOR_1);
   Wait(50);           //ブロックを投げる
   OnFwd(SENSOR_1);
   Wait(50);
   Off(SENSOR_1);
   On(OUT_C);
   Wait(50);
   }
   if(SENSOR_3>SENSOR_1){ //センサー3がセンサー1より強い光を感知
   OnRev(OUT_C);//左回転
   }
   if(SENSOR_3>THRESHOLD){ //センサー3が強い光を感知 
   OnRev(OUT_C);//左回転  
   }     

プログラムについて

ならべくシンプルなプログラムにした。 だけど、まだ正確性にかけるのでもっと細かいプログラムでも良かった。

感想

フナヤマ

・今回はプログラムもロボットも過去最大に難しいものでしかも期間が短くとても困った。

・ほかのテストもあることで会うことがあまりできなかったことも一つの反省点である。しかし、連絡をとりあってよくここまでできたと思う。あと新しいギアの仕組みについ て学ぶこともできたし、プラスの面もある。

・今回のことを生かし、最後の課題にも取り組んでいきたい

オガサワラ

空間が関係する課題だったので今までとは別の難しさがあった。 なかなか懐中電灯に向かって発射できなかったのが一番の壁であった。 毎度のことながら、パートナーともっと時間を合わせて協力して良い作品を作りたかった。 けど、パートナーの力作のロボットはとても良いと思う。

コメント

  • 授業で説明したとおり、変数を使って最大値を見つけられるかが重要な課題なので、プログラムだけでよいので作ってみてください。もちろん、自分なりのプログラムを考えたのは良いと思います。ただ、2回投げる仕組みがないこと、現状では右に光を感じた時と光を見失ったときの実行内容が同じなので場合分けする意味があまりないことも改善してほしいです。 -- FI? 2010-07-30 (金) 22:09:38
  • プログラムについての改善と写真に解説を入れる良いと思います -- TAKA? 2010-08-08 (日) 12:06:07
  • 写真に解説はついてます -- 2010-08-28 (土) 02:14:32


添付ファイル: file完成全体.jpg 185件 [詳細] file供給場所.jpg 149件 [詳細] fileアーム正面.jpg 168件 [詳細] fileアーム横.jpg 172件 [詳細] file供給全体.jpg 166件 [詳細] file光センサー.jpg 145件 [詳細] file本体ギア.jpg 144件 [詳細] file土台.jpg 74件 [詳細] file全体斜め.jpg 99件 [詳細] file供給上.jpg 152件 [詳細] fileアーム上.jpg 143件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-28 (土) 02:23:54 (3281d)