[[2017a/Member]]

目次
#contents
*1,課題について [#xa27cf20]
**課題3 概要 [#ua4546d5]
缶を積み上げるロボットの作成。詳しくは[[課題3>2017a/Mission3]]を参照。
**計画図 [#oa7510f3]
&ref(./缶をとる順番.jpg,50%,缶をとる順番);

ロボットの作成にかなり時間を費やしてしまったので、なるべく簡単なプログラムで済むような道順を考えた。最初の缶を持った後斜めに進むことでゴール手前の缶をそのままゴールに入れる作戦である。ライントレース用の光センサーは取り付けず、時間と缶判別用の光センサーで制御しようという考えである。

*2,ロボットについて [#r3c61a80]
今回の課題ではロボを一度作り直した。ロボを一から作り直すことに関しては、事前の説明でその大変さを聞いていたことや、実際に変更前のロボを作った時の苦労から考えてかなりの抵抗はあったが、ほかのメンバーからこの構造のままでは絶対に課題は達成できないという意見があり、自分では変更前のロボの欠点の解決策が浮かばなかったため反論する理由もなく、変更するに至った。
**機体1 [#h5f5504f]
一つ目のロボは、キャタピラを用いて缶を持ち上げる仕組みを考えた。

&color(Red){1,壁};

&ref(./image1.JPG,80%,壁);

最初はキャタピラを動かして、二つのキャタピラで缶を挟み持ち上げる仕組みを考えたが片方が壁でも缶を持ち上げることができたため、壁を動かして缶を持ち上げる仕組みにした。写真の壁は、高さの調整がしやすいように足は棒のパーツを使い動かせるようにしてある。正面は鉤の形になっていて中に入った缶が外に出ない工夫がされている。

&color(Red){2,弁と蓋};

&ref(./image2.JPG,80%,弁と蓋);

赤丸の部分が弁である。モーターを使わずに缶を支える方法として提案された。また、蓋は缶を積んだ後に開いて、本体が後ろに下がることでタワーを作ろうとした。

&color(Red){3,キャタピラ};

&ref(./image3.JPG,80%,キャタピラ);

白い歯車は壁を動かすためのものである。写真に写っているキャタピラは固定されていて、動いてきた壁で押し付けられたものを持ち上げるようになっている。二つのモーターの間に隙間があるのは、組み合わせるときに光センサーを付け、缶を認識できるようにするためである。

&color(Red){4,全体図};

&ref(./image4.JPG,80%,全体図);

これがすべてを組み合わせたものである。台車は三輪にして安定感を出している。

&size(20){&color(Blue){反省点};};

&color(Black,Yellow){この機体から変更することになった理由は、弁を通過して上にあげた缶が斜めになってしまい次の缶とうまく重ならなかったこと、キャタピラと壁で上げたときに垂直に上がらなかったこと、蓋が重くなり倒れてきそうになってしまったことなどがある。垂直に上げるために壁を鉤の形にすることである程度は改善できたが、蓋は重さに耐えられる接続の仕方にすることで改善しようとしたがうまくいかなかった。弁についての問題は難しく解決することができなかった。ここで行き詰ってしまったため新たな機体を一から作り直すこととなった。};

**機体2 [#xb6bb678]
二つ目のロボは、成功例の多かった缶を挟んで持ち上げるタイプのロボにした。

&color(Red){1,はさむ部分};

&ref(./image5.JPG,80%,はさむ部分);

歯車のかませ方を調節し、モーターを回すことで閉じるようにしている。負荷がかかりすぎた場合に備えて白い歯車をかませてある。

&color(Red){2,上げる部分};

&ref(./image6.JPG,80%,上げる部分);

歯車ではさむ部分を上げていく仕組みになっている。下の方には缶を探すための光センサーを取り付けた。



&color(Red){3,組み合わせたもの};

&ref(./image7.JPG,80%,組み合わせたもの);

上記のパーツを組み合わせて、はさんで持ち上げるという動作を可能にしている。

&color(Red){4,全体図};

&ref(./image8.JPG,80%,全体図);

全体図である。台車の部分は一つ目の機体からあまり変更を加えず三輪タイプにした。

&size(20){&color(Blue){反省点};};

&color(Black,Yellow){競技が終わった後に先生から忠告を受けたのだが、持ち上げるためのモーターに中くらいの大きさの歯車を用いたのは問題だったようである。モーターに負荷がかかりすぎてしまうためである。また、はさむ部分をモーターごと上げる部分で持ち上げるので重すぎて持ち上がらないという問題もあった。ギリギリになってロボを変えたため、結局これらの問題も解決できずに終わってしまった。};
*3,プログラムについて [#rddb495f]
プログラムは私が書いた。特にプログラム担当だったわけではないが、プログラムを試すのが当日の朝になってしまい、その日までになんとなく形になっているプログラムを書いていたのが私だけだったからである。私は二つ目の課題でプログラムに関して散々な評価をもらっており、少しでも挽回できたらと思いプログラムを製作していた。プログラミングの自信は無くしていたので他の人のプログラムがうまくいかなかった場合の予備程度に考えていたのだが私のプログラムを使うことになった。機体が完成していない状態でおそらくここにモーターの端子を付けるのだろうなというような想像上でプログラムを書いていた。当日のものは想定していたものと若干ずれがあったので修正しつつ試す形になったが、持ち上げる部分が故障してしまいその部分は十分に試せていない状態でもある。しかし、プログラムは課題2の反省点をしっかりと踏まえて書いたつもりなのでそれなりのものができていると思う。

**台車側のプログラム [#l4b394f8]
&color(Red){1,マクロ};

 #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);  //右回転
 #define turn_left(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC);     //左回転
 #define back(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);              //後退 

&color(Red){2,サブ関数};

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

 sub last()     //最後に缶をゴールに置く部分の動き
 {
    turn_left(31);
    SendMessage(signal_last);
    until(Message() == signal_move);
    back(100);
 }

&color(Red){3,メインタスク};

 task main()
 {
    ClearMessage();
    move_can();
    turn_right(80);        
    move_can();
    last();  
 }

&size(20){&color(Blue){補足説明};};

&color(Black,Yellow){基本的な動作は、缶が見つかるまでは移動し、見つかったら持ち上げる動作が終わるまでは止まっているようになっている。道順をなるべく簡単にしたので、一度だけ右に曲がり、残りは直進だけで済むようになっている。最後の左回りはゴールの中心に缶が来るように調節するためのものである。};
&color(Black,Yellow){基本的な動作は、缶が見つかるまでは移動し、見つかったら持ち上げる動作が終わるまでは止まっているようになっている。道順をなるべく簡単にしたので、一度だけ右に曲がり、残りは直進だけで済むようになっている。最後の左回りはゴールの中心に缶が来るように調節するためのものである。光センサーで缶を見つけるタイミングに毎回誤差が生じるため、見つけた後にすぐ持ち上げる動作に入るのではなく少し前進して間を詰めるという工夫をした。};

**缶を積む側のプログラム [#sfad4de0]
&color(Red){1,マクロ};
 #define signal_can 11              //積む側のプログラムに移行
 #define signal_move 12             //台車側のプログラムに移行
 #define signal_last 13             //最後缶をゴールに置く指示
 #define close OnFwd(OUT_B);   //アームを閉じる
 #define open(t) OnRev(OUT_B); Wait(t); Off(OUT_B);    //アームを開く
 #define can_up(t) OnRev(OUT_A); Wait(t); Off(OUT_A);  //アームを上げる
 #define can_down(t) OnFwd(OUT_A); Wait(t); Off(OUT_A); //アームを下げる
 #define can_find 28                    //缶判別の値 

&color(Red){2,サブ関数};

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

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

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

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

 sub last()  //最後ゴールに缶を置く時
 {
     until(Message() == signal_last);
     can_down(200);
     SendMessage(signal_move);
 }
    
&color(Red){3,メインタスク};

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

&size(20){&color(Blue){補足説明};};

&color(Black,Yellow){移動中は缶を持ち上げたままにしている。ロボの下部に取り付けた光センサーに被らないようにするためである。持ち上げている間缶が落ちてこないようにはさむ部分に取り付けたモーターは常に回転させている。この使い方はモーターに負荷がかかるように思えて気が進まなかったが他に方法が思いつかず、白い歯車をかませていたこともあったのでこの方法でつかませた。缶を上げたまま走行していると、持ち上げる部分が自重で下がってきてしまうため持ち上げる部分も同じようにしようというメンバーの意見もあったが、こちらは白い歯車をかみ合わせておらず、流石に負荷が大きすぎると思ったので別のアイデアを考えた。自重で下がってきた分を少しだけあげなおすというものである。これはsub idoutyuuの部分にあたる。こうすることでモーターになるべく負荷がかからないようにした。};

*4,反省点 [#l9119a1e]
最終的に課題を達成できていないことは大きな反省点である。結果だけ見ればやはりロボを変更したことが原因だったかもしれない。今回は期末テストが間に挟まっており、製作期間が一か月近くもあったにも関わらず実際に全員で作業できたのは最後の数日だけだった。私はテスト期間に入る前になるべく作業を進めておきたいと思い、集まれる時間を聞いたり集まった人で話したことをほかの人に連絡したりしてみたが、メンバーの中にはサークル活動などで忙しい人が多く連絡すらままならなかった。テストが終わり残り数日というときには流石に集まれはしたが、時間が迫ってきており最初にメンバーでアイディアを出し合って考えたオリジナルの機体の問題点に冷静に対処することができていなかったのだと思う。残り数日で変更するときには、変更しても新しい問題が出てきてうまくいかないかもしれないということも話し合ったが、前の機体で出てきた問題点の解決策が見つからず時間だけが過ぎていく状態だったので何か動かなければ間に合わないという焦燥感にかられ、すべて自分たちで考えた機体よりも成功例の多いタイプのものを模倣したほうがいいという考えに至った。しかし、予想通り変更後のものにも問題があり、解決できないまま当日になるという流れになってしまった。

*5,感想 [#oc98ff7f]
最終課題はいい結果を出せず悔いが残るものとなってしまった。メンバーは協力的な人たちだったがリーダーシップをとれる人がいなかったことが問題だったかもしれない。私も受動的な性格だが、慣れないながらも少しは意見をまとめようと努力してみたつもりである。逆に考えれば、普段はあまりリーダーにならないような人でも少人数の中の誰かがその役割を担わなければならなくなるので、リーダーシップについて学べるいい機会だったとも思う。最後の先生の話でこの授業の狙いなどを改めて聞いたときは、どれも胸に刺さるような話ばかりであった。この授業の本当の狙いは課題を達成できるロボットを作るだけでなく、仲間との連携や問題解決能力の育成、時間がない中でいかに形にすることができるかなどが試されているのだと知った。確かにどれも心当たりのあるものであった。達成できたものは少ないかもしれないが、これらの要素がいかに重要だったかを理解することができた。そして、これからも必要になってくる能力だということも分かったのでこのゼミだけで終わらせず、これからの大学生活でこれらの能力を身に着けて社会に出られるように努めていきたいと思う。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS