2009b

課題3:光を追いかけてブロックを投げるロボット

概要

インストの「top secret」を参考にして、白いホイールを(2個以上)連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)

1.全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。方向を定めたのち、懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもよい。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。

2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。

3.懐中電灯を動かしたとき懐中電灯に向かって進み、見失った時には再び全方向から懐中電灯を探しだす。7秒以上追尾できたら懐中電灯に向かってブロックを投げる。

懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。

僕らが今回作るのはオトナのオ・モ・チャ(はあと

メンバー

ゆうたろう
NISHI

目次

マシン

台車

今回、ディファレンシャルギア(作動装置)を用いた台車を使用する。

ディファレンシャルギア ディファレンシャルギアの図
ディファレンシャルギアとは?・・・モーター1個で左右のホイールを動かせるようにした装置。モーターの回転の向きで左右のホイールの回転が変わる。また、左右のホイールの回転数の違いを許容でき、スムーズな方向転換や旋回を可能にする。上の写真では左のギアは右のギアと比べて回転数が2倍である。


マシン左部のギアマシン右部のギア
マシン左側        マシン右側

投射機

   今回、白ホイールをとばすだけでなく連射機能も兼ね備えた投射機の作成が課題である。よって、投げる方式よりも打ち出す方式の方が良いと考えた。
 理由は2つあり、まず投げる方式だと連射できるようにするためにはモーター1個では困難であり、2個使う必要性が発生するため。さらに、モーターを2個搭載するとマシンがおもくなってしまうことである。
 以上のことから、投射機は打ち出す方式が理想的であると判断した。A2Lのパクリじゃないって!

アームと連射機   投射機の全体像
 弾を打ち出すアームと連射機         投射システム

〜問題点〜
ホイールは4個搭載できるが4個だと弾の軌道が3、4発目あたりから安定しなくなる。だが、3個搭載だと軌道が安定する。よって、3個搭載が基本になってしまった。4個搭載できるのに・・・
改良できれば良かったが、時間がなかった。だからA2Lのパクりじゃないって!

工夫した点

   今回、台車に使用するモーターは1個でありマシンが重すぎると動かなくなってしまう恐れがある。強度を優先すればマシンは重くなってしまう、マシンの軽さを優先すると強度がなくなる。強度と重量のバランスを考慮にいれて投射機を作成した。

mashine_heavy.jpg           mashine_right.jpg
 before                      after
              頑丈だが重い・・・                                軽くなったが強度は減った。それでも強度は充分ある

おい、A2Lの劣化版とか言った奴出てこい

プログラム

ゆうたろう

#define RUN_TIME 100                          //プログラムの稼働時間を1秒に設定

task main()
{
 SetPower(OUT_C,6);                 //アームのパワーを6に設定

 int light_max=0;             
 int t_max=0;
 SetSensor(SENSOR_1,SENSOR_LIGHT);            //光センサー1を設定

  OnRev(OUT_A);

  ClearTimer(0);                              //クリアタイマーをセット

while(Timer(0) <= RUN_TIME)
      {
       if(SENSOR_1 > light_max)               //光が最大の方向があったら
                 {
                  OnFwd(OUT_A);
                  Wait(20);                                
                  Off(OUT_A);                 //打ち出す方向へむく
                  light_max=SENSOR_1;
                  t_max=Timer(0);
                 }
 
             OnRev(OUT_C);
             Wait(22);
             Off(OUT_C);                       //ホイールを打ち出す
          }
}

回って投げる!それだけ!!
このプログラムでint t_maxの必要性が感じられない


NISHI

#define LW 45                           //光量の最低値を50に設定
#define LS 65                      //最大値を70に設定
#define Th OnRev(OUT_C); Wait(17); Off(OUT_C);      //弾を発射
task main(){
	SetSensor(SENSOR_1,SENSOR_LIGHT);     
	SetSensor(SENSOR_3,SENSOR_LIGHT);
	
	while(true){
		if((SENSOR_1>LW)&&(SENSOR_3>LW)){     //ライトが前にあるなら
		OnFwd(OUT_A);Wait(34);                 //前進する
		OnRev(OUT_A);Wait(30);}
		else if((SENSOR_1>LW)&&(SENSOR_3<LW)){ //右に移動したら
		OnFwd(OUT_A);}                         //右折する
		else if((SENSOR_1<LW)&&(SENSOR_3>LW)){ //左に移動したら
		OnRev(OUT_A);}                         //左折する
		else if((SENSOR_1>LS)&&(SENSOR_3>LS)){ //ある程度近づいたら
		Off(OUT_A);Wait(400);            //ライトが動かないことを確認
		until((SENSOR_1>LS)&&(SENSOR_3>LS)){   //動いていなければ
		Th} break;}                  //弾を発射する
		}
	Off(OUT_A+OUT_C);
	
	}

自分は、プログラム2の方を担当した。

前期の人のプログラムやそれに対する先生方のコメントを参考に作成してみた。

感想

ゆうたろう

今回、マシンの投射機に連射機能を持たせなければならず、結構苦労した。プログラムは過去の人のものを参考にして作った。あと投射システムをA2Lからパクッてません。あれ家で作ってきたんだから。偶然だって!偶然!!大体、A2Lが俺をパクッたんだ。どこまでも卑怯なA2Lめ、いつか滅ぼしてやる

NISHI

今回、ロボ・プログラム共に何かを参考にしてばかりでオリジナリティがほぼないのが少々罪悪感。

ただ、基は早くできても問題点の解決は自分でしなければいけなかったのでそれが難儀だった(そんなに変わってないけどね〜)。

コメント



添付ファイル: fileret.jpg 358件 [詳細] filegear_right.jpg 361件 [詳細] filegear_left.jpg 325件 [詳細] filedifferential_gear.jpg 341件 [詳細] filearm_rensha.jpg 335件 [詳細] filerensha.jpg 209件 [詳細] filearm_hammer.jpg 215件 [詳細] filemashine_right.jpg 327件 [詳細] filemashine_heavy.jpg 329件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-02-18 (木) 06:05:11