目次

課題3

紙コップとピンポン玉を別々に集めるロボットの製作

内容

下図のマジェンタの円に逆さまにした紙コップを置き、その中にピンポン玉を2つずつ入れておく。一辺が14cmの割り箸の正方形を作り、X地点を中心とした円に接するように置き、その中にピンポン玉を集める。紙コップは、Y地点を中心とした円の中に集める。また、下図の黄色い円に紙コップを通常の向きに置き、障害物とする。

ロボコンのフィールド平面図

ルール

下記URL(2017年後期Mission3)を参照してください。

http://yakushi.shinshu-u.ac.jp/robotics/?2017b%2FMission3

ロボット

はじめに、RISの通信機能の性質を踏まえてロボット本体は1台にしようと決めた。また、モーターの数が限られているので、一つのモーターでアーム部分の上下と開閉を行いたかったが、実現できなかった。そこで、アーム部分とライントレースをする車体部分でRISを分け、互いに通信し、車体部分で光センサーを前方に向けコップを探し、見つけ次第信号をアーム部分のRISに送ろうと考えた。しかし、通信可能な範囲などの問題で成功しなかった。最終的に、アームの開閉のタイミングを時間で管理するという、初歩的なものになってしまった。

アーム部分

アーム上.jpg アーム上下ギア.jpg アームギア.jpg

基本的な構造は、開閉を行うアーム部分を3本の黒い棒で本体と繋ぎ、その棒を支えるように直角に交わる向きで黒い棒を取りつけた。支えている方の黒い棒を上下させることでアーム部分全体を上下させた。

1枚目の写真の大きいギアはモーターと直接つながっており、ここから複数のギアを使いアームまで力を伝え、開閉させた。上手く噛み合う配置がなかなか見つからず苦労した。また、アームについているタイヤは滑り止めのために取り付けた。左側のアームの先に、もう1本アームが伸びているが、これは左旋回するときにコップがアームの外に出ていかないようにした。

2枚目の写真のようにギアを配置することでモーターの力の向きを90°変え、モーターの取り付ける位置が本体正面になるようにした。なぜなら、タイヤが邪魔をして横に置けなかったからだ。このモーターの力を、3枚目のようにL字型につないだ黒い棒に伝え、アームの上下をさせている。

車体部分

本体上.jpg 本体横.jpg

アームが重かったため、重心が中心になるようにRISの配置を写真のようにした。

アーム部分と車体部分の接続が弱く、本番では走行中にアーム部分が外れてしまった

プログラム

ロボット製作に多くの時間を割いてしまったため、二つのコップを運ぶことを目標とた。 プログラム担当ではなかったので簡単な説明とする。

RIS .◆璽猊分の上下を行う

定義

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

メインプログラム

task main ()
{
    Wait(870); //X地点に着くまでの時間
    up(30);    //コップを持ち上げる
    st(200);   //割りばしの正方形の中にコップが入るまで待機
    down(30);  //コップを下ろす
}

変数tの値は、少しずつ値を変え適切なものを調べた。

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;
    Wait(5);         //0.05秒間左旋回して位置調整
    re;              //アームを開く
    go(160);         //直線ABの延長上にあるコップに近づく
    cross_stop;      //1秒停止
    ch;              //アームを閉じコップをつかむ
    rightSENKAI;
    Wait(140);       //1.4秒間右旋回して位置調整
    cross_stop;      //1秒停止
    ch;              //コップを離さないように再びアームを閉じる
    go(90);          //X地点に近づく
    cross_stop;      //1秒停止
    re;              //アームを開きX地点にコップを置く
    back(100);       //1秒後退して位置調整
    leftSENKAI;
    Wait(30);        //0.3秒左旋回して位置調整
    go(200);         //2秒前進して位置調整
    rightSENKAI;
    Wait(40);        //0.4秒右旋回して障害物に当たらないようにする
    re;              //アームを開く
    go(250);         //交差点Qの上にあるコップを本体で押しながらY地点に向かう
}

反省点

ロボット製作に多くの時間を割いたにもかかわらず、あまり良いものが出来なかったので全体的にクオリティが下がってしまった。初期の構想では、通信や一つのモーターでアームの開閉や上下を行うなど様々なことを考えていたが、発想力不足により実現できなかった。プログラムも時間のない中で組んだため、最低限のことしかできなかった。

感想

自分たちのチームが出来なかったことを他のチームでは出来ていたので、どうやっているのだろうと発表前から気になっていたが、本番で改めて見てみると素晴らしいものばかりで驚いた。特に1位のチームのロボットは、同じRISを使ったとは思えないもので感動した。結果的には最下位だったが、みんなで意見を出し合うことが出来た有意義な時間だったと思う。


添付ファイル: file本体上.jpg 219件 [詳細] file本体横.jpg 58件 [詳細] fileアーム上下ギア.jpg 60件 [詳細] fileアーム上.jpg 77件 [詳細] fileアームギア.jpg 81件 [詳細]

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