2017a/Member

課題

最終課題は自立して缶を見つけ、運び、積み上げるロボットの作成である。詳しくは課題3 http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2017a%2FMission3&src=2017a-mission3.png

ロボットの構造について

ロボットは当初2つに分ける予定だった。その方が別々に進められて楽であると考えたからだ。しかしもともとそれぞれモーターは3つしか付けられない構造の中で2つに分けると、駆動にモーターを左右2つ使ったときアームにほとんど使えない。それでは上手く機能しない可能性があると判断し、結局1つにした。まず基礎部分、駆動にはキャタピラを採用した。説明本に載っている基本的なキャタピラを応用したものだ。キャタピラは前後に長く、バランスを取りやすい。おまけに見た目もクールだ。光センサーはライントレース用と前方確認用にそれぞれ付けてある。前方確認は缶との距離を測ったりする役割がある。また製作中に先生から指摘を受けたため、直角に立てたロボット本体の固定には直角の部品を用いた。http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2017a%2FMember%2FKobakazu%2FMission3&src=IMG_2.jpg アーム部は大きく分けると支柱とアームに分けられる。アームはエレベーターのように支柱を昇る機構を使っている。何段か積むためには高さが必要だが、高さを出すとバランスが取りにくくなる。部品を減らすために色々な固定法を試したが、結局土台部分から積み上げたほうがしっかり固定できると気づいた。またアームは黄色の曲がった部品を用いており、缶を掴みやすくするためにタイヤを取り付けてある。アームが重すぎるとロボット全体のバランスが崩れるだけでなく持ち上げた後自然にアームが落ちてくる等の不具合も起きた。軽くする他にもウォームギアをかませるなど様々な対策を考えた。

20170807_151555157.jpg

http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2017a%2FMember%2FKobakazu%2FMission3&src=IMG_5.jpg

駆動プログラム

今回自分はプログラム作成にはあまり関わっていないが、課題2で使ったライントレースのプログラムを応用して作ってある。時間の関係で積み上げるプログラムを作成することができなかったので、経路上にある缶を集めるようなプログラムに変更した。

定義部分

#define go_forward OnFwd(OUT_AC);//前進
#define turn_right OnFwd(OUT_A);//右折
#define turn_left OnFwd(OUT_C);//左折
#define migisenkai OnFwd(OUT_A); OnRev(OUT_C);//右旋回
#define hidarisenkai OnFwd(OUT_C); OnRev(OUT_A);//左旋回
#define power(s) SetPower(OUT_AC,s); //モーターの出力が変更可能
#define sound1 PlaySound(SOUND_UP);
#define sound2 PlaySound(SOUND_DOWN);Wait(100);
#define GO(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);//前進時間変更可能
#define SIGNALGRAB 100
#define SIGNALBACK 200
#define back(u) OnRev(OUT_AC); Wait(u); Off(OUT_AC);//後退時間変更可能
sub trace2()//交差点の判断などは課題兇了と同様
{
    ClearTimer(0); 

    while (FastTimer(0)<=25){
        if (SENSOR_1 > 49){//右旋回
            migisenkai; ClearTimer(0);
        } else if (SENSOR_1 > 44){//右折
            turn_right; ClearTimer(0);
        } else if (SENSOR_1 > 40){//前進
            go_forward; ClearTimer(0);
        } else if (SENSOR_1 > 36){//左折
            turn_left; ClearTimer(0);
        } else if (SENSOR_1 > 33){//左旋回
            hidarisenkai;//タイマをリセットしない
        }
    }
    Off(OUT_AC);
}    
sub hidari1()
{
    sound1;
    go_forward;
    Wait(20);
    hidarisenkai;
    Wait(40);
    turn_left;
    Wait(30);
} 

sub hidari2()
{
    sound2;
    go_forward;
    Wait(20);
    hidarisenkai;
    Wait(40);
    turn_left;
    Wait(30);
}

動作プログラム

task main()
{
    SetSensor(SENSOR_1, SENSOR_LIGHT);
    power(4);//モーターの出力を調整。課題兇了は0であったが、0の場合では出力が足りなかっ たので、前回の課題のときよりも出力を高めた。
    ClearMessage();

    GO(100);//スタート枠から前進

    trace2();//A-F区間
    hidari1();//Fを左折

    trace2();//F-Q区間
    hidari2();//Qを左方向

    trace2();//Q-R区間
    hidari1();//Rを左折し、Tに向かう

    trace2();//R-T
    GO(200);//前進してゴールの中に入る

    SendMessage(SIGNALGRAB);//ゴールの位置に到着したことを知らせる。アーム側はこれを受け 取ったらアームを動かして缶がゴールの領域に入るようにする
    while(true){
        until (Message() == SIGNALBACK);//SIGNALBACKを受信するまで待つ
        back(300);//後退する
    }
}

アームプログラム

定義部分

#define grab OnFwd(OUT_C); Wait(100); Off(OUT_C);//アームで缶をつかむ
#define relese OnRev(OUT_C); Wait(100); Off(OUT_C);//アームで缶を離す
#define rift_up OnFwd(OUT_A); Wait(700); Off(OUT_A);//リフトを持ち上げる
#define rift_down1 OnRev(OUT_A); Wait(200); Off(OUT_A);//リフトを次の缶の高さまで下げる 
#define rift_down2 OnRev(OUT_A); Wait(300); Off(OUT_A);//リフトを次の缶のつかむ高さまで下 げる。つまりはじめの高さまで下げる
#define SIGNALGRAB 100
#define SIGNALBACK 200
#define grab2(s) OnFwd(OUT_C); Wait(s); Off(OUT_C);//缶を掴む時間変更可能
#define relese(t) OnRev(OUT_C); Wait(t); Off(OUT_C);//缶を離す時間変更可能

動作プログラム

task main()
{
    SetSensor(SENSOR_1,SENSOR_TOUCH);//センサー1にタッチセンサ
    ClearMessage();
    int count;//変数を定義
    count=0;

    while (count<1){//countが1未満の時ループに入る
        ClearMessage();//Messageの値を0に初期化
        if (Message() == SIGNALGRAB){//SIGNALGRABを受信したらcountに1が足される。受信した らループを抜け出す。
            count++;
        } else count = 0;//そうでなければcountは0
        
    }
    grab2(50);//缶をゴール内にまとめるためにアームを動かす
    relese(70);//大きめにアームを開いて缶を完全に離す
    SendMessage(SIGNALBACK);//後退するように伝える。

}

感想

本番で缶を積むことはできなかった。しかし自分で方法や構造を考えてロボットを製作することやプログラムを思案すること。それこそがロボットの面白さであり、難しさでもあると思った。今回の課題も含めて斬新な発想はリスクもあるがそれだけ大きな成果や驚きを生むこともあるんだと感じた。答えのない完成をどのように目指していくのか。色々なことを学べたと思う。また時間を有効に使って期限までにしっかり完成させることの重要性を改めて感じた。そのためにはある程度の妥協と順序の計画が大事であった。今回のように答えがない場合、いくらでも時間をかけることができてしまう。そこを上手に進めていかないと結果が出ない。この講座はもう終わってしまうが色々なことに活かせると思うので忘れないようにしたい。


添付ファイル: file20170807_151555157.jpg 82件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-15 (火) 01:03:41