目次

課題について

課題3概要

缶を積み上げるロボットをグループで作成せよ。詳しくは課題3を参照せよ。

ロボットについて

今回のロボットは挟む部分を上げ下げすることで缶を積み上げようと考えた。

ロボット 全体図

↑ロボットの全体図

ロボット 後ろから

↑後ろから見た場合

ロボット 挟む部分

↑ロボットの缶を挟む部分

ロボット 上げる部分

↑缶を挟む部分をモーターを利用して上下に動かす

工夫した点(改善すべき点)

上の全体図を見れば分かるが、今回のロボットは工夫した点というより改善点の方が多い。ロボットを作ること自体に苦労してしまい工夫することに手が負えなかった。

工夫した点

ヾ未魘瓦犹、缶に負荷が掛からないよう白い歯車をかませた。

ロボット 挟む部分

改善すべき点

.蹈椒奪箸料杏分と後部分の重さの差をできるだけ少なくすべきだ。ロボットをさらにコンパクトにすべきだ。

ロボット 横から

↑ロボットの前部分と後部分の重さがとても違うため、前部分の一部を引きずり(後部分の後輪が浮き)正確に進むことが困難となる

缶を挟む部分を上下に動かすために利用したモーターのギアを小さくすべきだ。

ロボット ギア

↑モーターのギア(の半径)が大きいため、持ち上げる力が弱くなってしまい、挟む部分を持ち上げることが困難となった。

プログラム紹介

 プログラムはグループのメンバーであるryoga君が作成した。とても感謝している。  今回は二つのロボットを結合して作成した。そのため、プログラムは容易に作成することができる。これから、台車側のプログラム、缶を持ち上げる側のプログラムの二つを定数、マクロ、sub関数、main関数に分けてそれぞれ説明する。

ロボットの製作に苦労したので下の計画図のように簡単な順路で確実に点数を取る。

私たちのプログラムを簡単に説明すると

仝センサーを利用して、光センサーの閾値が28(缶が目の前にくる)まで直進

光センサーの閾値が28となった場合缶を掴む動作を行う

 ´△E地点、T地点で繰り返す

ぅ粥璽訝賄世亡未鮹屬

となる。この考えには斜めに缶があると掴むことができないという欠点がある。そこで缶がロボットの軸の延長線上に存在するよう回転時間を計算する(もはや自立型ロボットではない気がする)。

計画図

↑E地点の缶を取った後、右へ曲がり斜めに進みT地点の缶をゴールに持ち込む

台車側のプログラム

台車側のプログラムを理解する際の注意点として、台車自体後ろ向きなので、前進する時はタイヤのモーターを後ろ回転(後退する時はモーターを前回転)しなければならないことを理解してほしい。

定数について

#define signal_can 11      //積む側のプログラムに移行
#define signal_move 12     //台車側のプログラムに移行
#define signal_last 13     //最後、ゴールの円に置く指示

マクロについて

#define turn_right(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_AC);  //右へt/100秒回転
#define turn_left(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC);     //左へt/100秒回転
#define back(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);              //t/100秒後退 

sub関数について

sub関数は二つある。

A地点(start地点)からE地点、E地点からT地点へ移動する際にこのsub関数を利用する。

sub move_can()    //缶を積む前と積んでいる最中の動き
{
   OnRev(OUT_AC);
   until(Message() == signal_can);    //缶を見つけるまで前進
   OnRev(OUT_AC);                   //缶との距離を詰めるため150/100秒前進
   Wait(150);
   Off(OUT_AC);
   until(Message() == signal_move);  //缶上げ終わるまで停止
}

↑光センサーで缶を見つける際、毎回見つけるタイミングに誤差が生じるため150/100秒間全身させて缶との間を詰めた。

二つ目のsub関数はT地点の缶を入手した後に利用するsub関数である。左へ31/100秒回転するようプログラムされてるが、これは集めた缶がゴールの中心にくるよう調整したものである。

sub last()     //最後に缶をゴールに置く部分の動き
{
   turn_left(31);             //左へ31/100秒回転
   SendMessage(signal_last);  //缶を持ち上げる側のプログラムへメッセージを送る
   until(Message() == signal_move); 
   back(100);                 //缶を持ち上げる側のプログラムからメッセージがきた後、100/100秒後進
}

main関数について

task main()
{
   ClearMessage();
   move_can();       //E地点の缶を掴む位置まで移動
   turn_right(80);   //80/100秒右回転      
   move_can();       //T地点の缶を掴む位置まで移動
   last();           //缶をゴール中心まで運び、缶を置く
}

缶を持ち上げる側のプログラム

定数について

#define signal_can 11              //積む側のプログラムに移行
#define signal_move 12             //台車側のプログラムに移行
#define signal_last 13             //最後缶をゴールに置く指示
#define close OnFwd(OUT_B);        //アームを閉じる
#define can_find 28                //光センサーの閾値が28となった場合缶が目の前にあると判断

マクロについて

#define open(t) OnRev(OUT_B); Wait(t); Off(OUT_B);    //アームをt/100秒開く
#define can_up(t) OnRev(OUT_A); Wait(t); Off(OUT_A);  //アームをt/100秒上げる
#define can_down(t) OnFwd(OUT_A); Wait(t); Off(OUT_A); //アームをt/100秒下げる

sub関数について

sub関数は5つある。 一つ目のsub関数は缶が目の前にきた(光センサーの閾値が28となる)場合に台車側のプログラムへメッセージを送るプログラムである。

sub hazime()      //動き始め(缶を見つけるまでは何もしない)
{
   Off(OUT_AB);
   until(SENSOR_2 < can_find);
   SendMessage(signal_can);
   Wait(150);   //缶との距離を詰めている間少し待つ
} 

二つ目のsub関数は缶を持ち上げるプログラムである。

sub ageru()  //缶を持ち上げる
{
   close;
   can_up(200);
   SendMessage(signal_move);
}

三つ目のsub関数は移動中缶が少しずつ下がってくるので定期的に上げるプログラムである。

sub idoutyuu()  //移動中缶を上げる(重さで少し下がってくるので)
{
   while(SENSOR_2 < can_find){
        can_up(10);
        Wait(20);
   }
} 

四つ目のプログラムは缶を積む際に行うプログラムである。

sub tumu()  //缶を積む
{   
    can_up(20);  //上まで20/100秒上げる
    SendMessage(signal_can);
    can_down(100);  //缶を合わせる
    open(100);      //開いて
    can_down(100);  //下まで下げて次の缶を持ち上げる準備
} 

五つ目のプログラムは最後に缶をゴールに置く時に利用するプログラムである。

sub last()  //最後ゴールに缶を置く時
{
    until(Message() == signal_last);
    can_down(200);
    SendMessage(signal_move);
}
  

main関数について

task main()
{
    SetSensor(SENSOR_2,SENSOR_LIGHT);  
    hazime();
    ageru();
    idoutyuu();
    tumu();
    ageru();
    last();
}

缶を下げたままにすると光センサーの邪魔になるため常に缶を上げたままにする。常に缶を上げたままにするのに白い歯車を使えばよいと考えたがそれでも持ち上げる部分に負荷がかかり破損する可能性があるため自然に缶が下がってくることを活用して定期的に持ち上げる部分を上げるようプログラムする。

感想・反省

今回はグループで行う課題だった。グループで行い、それぞれの意見をただ言い合うだけでなくみんなの意見をまとめることがロボット製作には大事だと実感した。またこれからの社会、みんなに自分のプログラムを紹介する中、全員が理解できるプログラミングを書かなければならないと感じた。今回ryoga君のプログラムが分かりやすくてとても助かった。今回のグループワークで一人では実感することのないことが沢山あったのでとても役にたった。


添付ファイル: fileIMG_0564.JPG 66件 [詳細] fileimage9.jpg 65件 [詳細] fileimage1.jpg 57件 [詳細] fileimage3.jpg 78件 [詳細] fileimage8.JPG 49件 [詳細] filegia.jpg 67件 [詳細] fileチエツホチー.jpg 31件 [詳細] fileimage7.JPG 35件 [詳細] file、ョ、カ、ョ、カ.jpg 30件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-18 (金) 16:25:53 (729d)