2019a/Member

課題について

ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。

課題3コースの説明

ロボコンのフィールド平面図 フィールドの説明 フィールドは課題2で使用した紙を使用する。 生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方に玉を2個入れる。 残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤやプレートの上に置いてもよい。 プラ容器には色をつけたり文字や記号を書いてもよい。 プラ容器は両面テープ等でフィールドに固定してもよい。 2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよい。

ロボットについて

私は今回の課題では2体のロボットを製作し、それぞれを役割で分けて動作するようにしました。以下より2体のロボットは「ロボット1」、「ロボット2」と分けて呼ぶこととします。

ロボット1について

ロボット1は容器に入ったピンポン玉を回収し、別の容器に移す役割を担う。

ロボット1の全体像

ロボット1全体像

ロボット1の構造

ライントレースについて

光センサーが48より大きい値を示すとき(白)で右に曲がる
光センサーが45と49の間の値を示すとき(灰色)で左に曲がる
光センサーが44より小さい値を示すとき(黒)で左に旋回する

ライントレース説明の図

このように3つの曲がる動きだけを入力し、大きなカーブを曲がりやすいようにしました。

ピンポン玉を運ぶ仕組みについて

ピンポン玉が入った容器ごと運ぶ仕組みになっています。

ロボット1容器を掴む説明の図

図1

図1のように持ち上げたい容器の横両方にタイヤのついたアームを滑り込ませ、容器のひっかけ部分をアームで持ち上げます。この時、アームについたタイヤが滑り止めの役割を担い、容器がアームから滑り落ちにくくなるようにしてあります。


ロボット1ピンポン玉を移動させる

図2


図2より、アームを限界まであげることによって容器の中のピンポン玉がロボット側にこぼれ落ちます。そのこぼれ落ちたピンポン玉が斜めになっているロボットの背を通ってロボットの後ろに落ちるようにしました。ロボットの背に簡単な柵を設置してピンポン玉が横から滑り落ちることを防ぐようにしてあります。

ロボット1の行動

ロボット1の行動

BからC地点までは行動時間を設定したライントレースによって移動。その後はライントレース無しのタイヤの動きのみによる移動を行う。
赤丸地点にて容器を掴む
緑丸地点にて容器を掴んだアームを上げ、もう一つの容器にボールを入れる

ロボット2について

ロボット2は地面に置かれたピンポン玉を回収し、容器に入れるロボットであるが今回のプログラムでは回収するピンポン玉は一つだけとしている。その理由は2台のロボットを同時に動かすうえでロボット同士が接触してしまうことを防ぐためである。

ロボット2の全体像

ロボット2全体像

ロボット2の構造

ロボット2の構造説明図

Aと左のタイヤを動かすモーター(赤丸位置)を接続
Cと右のタイヤを動かすモーター(緑丸位置)を接続
Bとアームを動かすモーター(青丸位置)を接続

ピンポン玉を運ぶ仕組みについて

ロボット2ボールを掴む

図A

輪ゴムを図Aの通りに設置し、ロボット2が地面に置かれたピンポン玉にアームを上から押しつけて輪ゴムの間に入り込むようにしました。

ロボット2ボールを落とす

図B

図Bのようにロボット2の上部につけられた柱にアームに引っかかったピンポン玉を押し付け、ロボット2に設置された輪ゴムからピンポン玉が抜け落ちるようにしました。

ロボット2の行動

ロボット2の行動

赤丸地点L′にて置かれたピンポン玉を掴む
緑丸地点にてピンポン玉を掴んだアームを上げ、もう一つの容器にボールを入れる 容器にピンポン玉を一つ入れた後、後退して停止する。

プログラミングについて

ロボット1のプログラミングの説明

#defineについて

光センサーに関する定義

光センサーの数値の定義に関しては状況によってセンサーの反応の具合が異なるため、 プログラムを見てすぐに変えられるよう多くを定義しませんでした。

時間に関する定義

#define RUN_TIME 610    //6.1秒
#define STEP 5

動きに関する定義

#define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(148);Off(OUT_AC);    //右に90度旋回
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(120);Off(OUT_AC);    //左に90度旋回

その他の定義

#define power(s) SetPower(OUT_B,s);    //アームの動きをゆっくりにする

サブルーチンの設定

sub tores()    //ライントレースのサブルーチン

{ SetSensor(SENSOR_2,SENSOR_LIGHT);
  
   ClearTimer(0);

   while ( FastTimer(0) <= RUN_TIME ) {    
       if ( 48 < SENSOR_2 ){
           OnFwd(OUT_A); Off(OUT_C);    //白なら右へ
       } else if (45 <SENSOR_2 < 49) {
           Off(OUT_A); OnFwd(OUT_C);    //灰色なら左へ
       } else {
           OnRev(OUT_A);OnFwd(OUT_C);    //黒なら左へ旋回
        } 
       
    }
 }
sub down()    //アームをゆっくりおろす動き
{
        OnFwd(OUT_B);
        power(0);    
        Wait(50);
        Off(OUT_B);
        Wait(100);
}
sub up1()    //アームをゆっくりあげる動き
{ 
        OnRev(OUT_B);
        power(0);    
        Wait(30);
        Off(OUT_B);
        Wait(100);
}
sub throw()    //容器に入ったピンポン玉を取り出す動作
{ 
        OnFwd(OUT_B);
        power(0);   
        Wait(80);    //アームをゆっくりさげる
        Off(OUT_B);
        OnRev(OUT_B);
        Wait(50);    //アームを素早くあげる
        Off(OUT_B);
} 

実行するプログラム

task main()
{
        
        OnFwd(OUT_AC);    //地点Bまで前進
        Wait(100);
        tores();    //BからCまでのライントレース
        turn;    //ピンポン玉の入った容器のある方に向けて右に90度旋回
        OnRev(OUT_AC);    //少し後退してアームが容器に当たらないようにスペースをとる
        Wait(120);
        Off(OUT_AC);
        down();    //アームをおろす
        OnFwd(OUT_AC);    //前進してアームの間に容器を挟む
        Wait(130);
        Off(OUT_AC);
        up1();    //容器を持ち上げる(アームをあげる)
        OnRev(OUT_AC);    //そのまま後退して位置調整
        Wait(415);
        turn_left;    //左に90度旋回
        OnRev(OUT_AC);    //後退
        Wait(140);
        Off(OUT_AC);
        throw();    //運んでいた容器からピンポン玉を取り出し、別容器に移す
}

終了

ロボット2のプログラミングの説明

#defineについて

時間に関する定義

#define RUN_TIME 700

動きに関する定義

#define turn OnFwd(OUT_A);OnRev(OUT_C);
#define turn2 OnFwd(OUT_C);OnRev(OUT_A);
#define go OnFwd(OUT_AC);

その他の定義

#define power(s) SetPower(OUT_B,s); //モータのパワーをsにする

サブルーチンの設定

sub up()    //アームをゆっくりあげる動作(ピンポン玉を持ち上げる)
{
        OnFwd(OUT_B);   
        power(1);
        Wait(50);
        Off(OUT_B);
}
sub up2()    //アームをゆっくりあげる動作(ピンポン玉をアームから離す)
{
        OnFwd(OUT_B);
        power(2);
        Wait(20);
        Off(OUT_B);
}
sub down()    //アームをゆっくりさげる動作
{ 
        OnRev(OUT_B);
        power(2);
        Wait(50);
        Off(OUT_B);

} 

実行するプログラム

task main()
{
   go;Wait(110);Off(OUT_AC);    //A地点を出発して旋回する位置まで直進
   turn2;Wait(70);Off(OUT_AC);    //左に90度旋回
   go;Wait(210);Off(OUT_AC);    //K′地点まで直進
   turn;Wait(70);Off(OUT_AC);    //右に90度旋回
   go;Wait(30);Off(OUT_AC);    //L′地点まで直進
   down();Wait(30);    //ピンポン玉を掴む(アームをさげる)
   up();Wait(30);    //ピンポン玉を掴んで保持しながらアームをあげる
   turn2;Wait(70);Off(OUT_AC);    //左に90度旋回
   go;Wait(10);Off(OUT_AC);  //前進して容器に近づく
   up2();Wait(30);  //ピンポン玉を押し出して容器にピンポン玉を入れる
   OnRev(OUT_AC);Wait(1000);Off(OUT_AC);    //後退してコースから外れる
}

終了

結果

最終的にはうまくいかず、ボールを掴むことも出来なかった。

まとめ

これまでゼミで学んだことを詰め込んで挑戦したロボコンであったが結果は微妙なものであった。しかし、同じグループのメンバーと相談し合い、ロボットを作ることが出来たので良かったと思う。


添付ファイル: file.jpg 140件 [詳細] fileロボット2ボール掴む.jpg 58件 [詳細] fileロボット2ボールを掴む.jpg 102件 [詳細] fileロボット2ボールを落とす.jpg 111件 [詳細] fileロボット1容器を掴む.jpg 114件 [詳細] fileimage2 - コピー.jpeg 134件 [詳細] fileロボット1構造.jpg 144件 [詳細] fileロボット2の行動.jpg 122件 [詳細] fileロボット1の行動.jpg 116件 [詳細] fileロボット2全体像.jpg 99件 [詳細] fileロボット1全体像.jpg 124件 [詳細] file課題3コース.jpg 127件 [詳細] file課題3のコース.png 54件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-14 (水) 16:38:47