目次

課題3

ピンポン玉と紙コップをそれぞれ所定の位置に運ぶ。

2017b-mission3.png

左上のピンポン玉と中央上の紙コップをねらうことにした。

ロボット説明

ロボット作成を担当したので張り切って作ろうとおもった。エレベーターのように垂直にアームが動くようにして紙コップを積み上げながら持ち運ぶロボットを作る予定だった。しかしどうすればアームを垂直に持ち上げられるのか思いつかなかったのであきらめてしまった。

Image_b274090.jpg

赤色で囲った部分はコップを持って旋回するときに紙コップが離れないように包みこむためにアームに取り付けた。黄色で囲った部分は大きい歯車が2つ並んでいるところの両隣にある青い部品のところに歯車の力を直接アームに伝える部品が必要であったが適当なものがなかったので力を伝えられる灰色の部品を使い、短くて黒い棒でアームを押し上げたり押し下げたりできるようにした。緑色で囲ったところはモーターを回しているとモーターが外れてしまうのでモーターのアーム側と本体側を黒色の部品で固定した。水色で囲ったところは課題1で1つのモーターでタイヤを動かすために考えた歯車の配置を利用した。モーターがうみだす力の向きを変えるための配置である。

Image_04040a2.jpg

センサーはタイヤのすぐ前に設置した。アームが重くなりすぎたため後ろにRISを設置することでバランスをとった。動くことで部品がかなり外れやすくなる構造だったので外れないように補強を繰り返した。

プログラム

アームを上下させ紙コップを上下させるRIS

定義

#define up(t) OnRev(OUT_A);Wait(t);Off(OUT_AC);      //t秒上げる
#define down(t) OnFwd(OUT_A);Wait(t);Off(OUT_AC);    //t秒下げる
#define st(t) Off(OUT_AC);Wait(t);                   //t秒待機

メイン

task main ()
{
    Wait(870);       //X地点へ行く時間
    up(30);          //紙コップを持ち上げる
    st(200);         //本体が紙コップをXの中に入れるまでの時間調整
    down(30);        //紙コップを下ろす
}

本体の移動と光センサーと紙コップをつかませるRIS

定義

#define leftSENKAI OnFwd(OUT_A);OnRev(OUT_C);      //左旋回
#define leftMAGARU OnFwd(OUT_A);Off(OUT_C);        //左折
#define rightSENKAI OnFwd(OUT_C);OnRev(OUT_A);     //右旋回
#define rightMAGARU OnFwd(OUT_C);Off(OUT_A);       //右折
#define ch OnFwd(OUT_B);Wait(30);Off(OUT_B);       //アームを閉じる
#define re OnRev(OUT_B);Wait(20);Off(OUT_B);       //アームを開く
#define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);   //t秒前進
#define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); //t秒後退
#define cross_stop Off(OUT_AC);Wait(100);          //1秒停止
#define carb 46                                    //閾値

ライントレース

sub r()
{
 SetSensor(SENSOR_2,SENSOR_LIGHT); //端子2に光センサー
 ClearTimer(0);
 while(FastTimer(0)<=24)           //0.24秒以内はループ 超えると交差点判定
  {
   if(SENSOR_2>carb+5)             //センサーが閾値+5の値を超えたら左旋回
    {
     leftSENKAI
     ClearTimer(0);                //タイマーリセット
    }
   else if(SENSOR_2>carb+3)        //センサーが閾値+3の値を超えたら左折   
    {
     leftMAGARU
     ClearTimer(0);
    }
   else if(SENSOR_2>carb)          //センサーが閾値を超えたら直進  
    {
     OnFwd(OUT_AC);
     ClearTimer(0);
    }
   else if(SENSOR_2>carb-3)        //センサーが閾値-3の値を超えたら右折
    {
     rightMAGARU
     ClearTimer(0);
    }
   else                            //上記のどの条件にも当てはまらないときに右旋回
    {
     rightSENKAI
    }
   }
 Off(OUT_AC);
} 

メインプログラム

task main ()
{
   go(30);      //Aの枠から出る
   r();         //A〜Bライントレース
   leftSENKAI;  //0.05秒間左旋回して位置調整
   Wait(5);     
   re;          //アームを開く
   go(160);     //マップ左上の紙コップに近づく
   cross_stop;  //1秒停止
   ch;          //アームを閉じコップをつかむ
   rightSENKAI; //1.4秒間右旋回して位置調整
   Wait(140);
   cross_stop;  //1秒停止
   ch;          //移動の振動で紙コップを離してしまうので再びアームを閉じる
   go(90);      //X地点に近づく
   cross_stop;  //1秒停止
   re;          //アームを開きX地点にコップを置く
   back(100);   //1秒後退して位置調整
   leftSENKAI;  //0.3秒左旋回して位置調整
   Wait(30);    
   go(200);     //2秒前進して位置調整
   rightSENKAI; //0.4秒右旋回して障害物に当たらないようにする
   Wait(40);    
   re;          //アームを開く
   go(250);     //Qの上方向にある紙コップを本体で押しながらY地点に向かう
}

感想まとめ

ロボットを製作することに時間がかかりすぎてしまいプログラムが間に合わなかった。時間配分をもっと考えるべきだった。今回はプログラム以前にロボットを作ることが難しかった。


添付ファイル: file2017b-mission3.png 211件 [詳細] fileImage_b274090.jpg 159件 [詳細] fileImage_04040a2.jpg 183件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-12 (月) 16:03:07