[[2019a/Member]]

*課題3 ボール運搬ロボット [#j6c475b4]
**ミッション概要 [#b5d653b9]
ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。
**フィールド[#me3307dc]
今回使用したフィールドは以下の通りである。
#ref(./コース.jpeg,70%,コース)
***フィールド説明 [#h5812fb0]
~・フィールドは課題2で使用した紙を使用する。
~・生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方に玉を2個入れる。残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤやプレートの上に置いてもよい。
~・プラ容器には色をつけたり文字や記号を書いてもよい。
~・プラ容器は両面テープ等でフィールドに固定してもよい。
~・2枚の紙の境界にはそれぞ幅1cm、合計2cmの黒線を描いてもよい。
**ルール [#y690a8f3]
基本ルールは以下の通りである。
~・競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
~・図のA地点または(および)A'地点からスタートする。ただし接地している部分はそれぞれの領域内に収まるものとする(線上はOK)。上空部分は領域からはみ出していてもよい。
~・開始の合図から5秒以内にスタートボタンを押す作業を完了すること。
~・競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
^・途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プ~ログラムで起動してよい)
~・競技終了後、ロボットが、ゴールのプラ容器に触れていてはいけない。
~・競技終了後、もともと玉が入っていたプラ容器が、ゴールのプラ容器に触れていてはいけない。
**ミッションの目標 [#m97ac965]
私たちのチームでは、高得点が狙えるプラ容器内の2つの球をもう一つのプラ容器へと移すことをロボコンの目標として、機体とプログラムの製作に取り組んだ。


*機体の説明 [#o8fe317b]
#ref(./機体全体像.jpeg,70%,ロボ画像)
今回製作したロボットは以上のものである。今回は二つのRISのキットを利用して、コンピュータを2つ、モーターを計4つ使用した。コンピューター合体型のロボットである。
~モーター利用の内訳は、車輪構造に2つ、球を吸い上げるベルトコンベアーに1つ、ベルトコンベアーの上げ下げを行う機構に1つとなっている。
**機体製作の経緯 [#l278e3a1]
今回球を運搬する機体を作るにあたって、まず私たちのグループで初めに考えたのは、私が以前ミッション2で使用した(リンク:[[2019a/Member/tomo/Mission2]])ようなアームを使い球を取り、それとは別に球を保管するコンテナを用意して、そこに球をためることで運搬を目指した。目標としたモデルは、ロードローラーのようなアームを持ち、ダンプカーのようなコンテナを持つロボットである。
~しかし実際は製作にあたって、アームの部分を、プラ容器内のピンポン球を正確に入れて、正確に球をとることが難しいと判断されたため、上のプランは断念された。
~そこで、このプランに代わる打開策を模索していると、過去のロボティクスの参考ページ(リンク:[[2010b/A2/ロボコン]])が見つかり、球を吸い上げるというアイデアを得た。我々はこれらのページを参考にして、球を吸い上げる機構を軸にして、機体製作に取り組むことにした。
**ベルトコンベアーについて [#d946d5ad]
今回私たちは、球の運搬にベルトコンベアー式のエレベーターを用いた。構造は以下の通りである。
#ref(./エレベーター.jpeg,70%,エレベータ)
キャタピラを用いて、壁と挟むことで球を吸い上げて保管することあが可能となった。
初期段階ではキャタピラを二つ使って吸い込む機構を採用していたが、メンバーの改良でキャタピラを1つで吸い込めるようになり、軽量化が成功した。
球は同時に3つまで保つことが可能である。

#ref(./エレベーターを動かす時の輪ゴムギア.jpeg,70%,わゴム)
写真で分かるようにモーターからの動力の駆動は輪ゴムを用いて行った。
キャタピラの部分をプラ容器内の球に垂直に押し当てることで球が吸い込まれる。
モーターの出力を逆にすることで、吸い込むだけでなく、球を放出することもできる。
**ベルトコンベアーの上げ下げ [#i73b42d7]
それでは球を取る際、放出する際に肝心となるベルトコンベアの上げ下げを行う機構について説明する。今回は以下の写真のように、RIS付属の垂直ギア変換を用いて、モーターの運動方向と垂直にギアを噛ませ、二枚のギアを用いてRIS付属のレールに動力を伝えることで上げ下げが可能となった。
#ref(./エレベーター上げ下げのギア.jpeg,70%,ギア)
レールによる移動は、課題1(リンク:[[2019a/Member/tomo/Mission1]])の際に利用した方法を参考にした。

*光センサーとトレースについて [#c6c085b9]
今回は課題2と同様に光センサーによるトレースを利用しようとしたが、上手くいかず不都合が多く生じたため、時間の都合により、左折や右折などの純粋な移動で強引にミッションを達成する事を目指した。


*プログラムの説明 [#t2109b6f]
今回は四人一組の共同作業により行ったため、各自で担当する役割をはじめにある程度決定した。自分は主にロボット製作にかかわる担当を行ったが、プログラムに関してはメンバーのhide君が中心に製作が行われた。プログラム説明にあたって、hide君をはじめ、メンバーの多くの協力によりプログラムが作られたことを、初めに感謝したい。

**二台のRISの連携について [#c02f346b]

今回、私たちのチームは、RISのコンピュータを二つ使い、RIS_1を移動用、RIS_2をボールの吸い上げと、排出用、といった風に役割を分担して、それぞれで連携を図った。具体的にはSendMessageを用いることでシグナルの通信を行い、二台の連動を図った。これから実際に利用した連動用プログラムを紹介する。

 SendMessage(SIGNALON);       
RIS_1はプラ容器の前まで行ったら、上記プログラムを送信してRIS_2が上のプログラムを受け取る。


 Off(OUT_AC);          
 until(Message() == SIGNALON);
これはRIS_1からのプログラムをRIS_2が受け取るまで、停止していることを示すプログラムである。続いて、RIS_2はボールの吸い上げ、回収を行う。、

 SendMessage(SIGNALOFF);       
次にRIS_2はRIS_1へと上記のプログラムを送信する。

 Off(OUT_AC);
 until(Message() == SIGNALOFF);      
上記のプログラムによりRIS_1は2のプログラムを受信するまで、停止していて、受信するとRIS_1はゴールへと移動を開始する。RIS_1は、正確にゴールのプラ容器へと近づくためにゴール前まで直進を続けるようになっている。
 
 OnFwd(OUT_AC);                      
 until(Message() == SIGNALOFF);
これは説明にあったように、RIS_1がSIGNALLOFFを受信するまで直進続けるプログラムである。

**RIS_1のサブルーチンについて [#jfa6f0c6]
課題2同様に、一定のプログラムをサブルーチンにして利用することでプログラムの単純化を図った。今回利用したサブルーチンを紹介したい。

***直進 [#l14d3a57]
 sub go_f()
 {
     go;Wait(move_t);Off(OUT_AC);
 }
直進のプログラムである。以下同様に上下左右に動く基本動作である。

***後退 [#y50ff697]
 sub go_b()
 {        
     OnRev(OUT_AC);Wait(move_t);Off(OUT_AC);
 }
***左折 [#t6797b32]
 sub go_l()
 {        
     turn_left;Wait(move_t);Off(OUT_AC);
 }
***右折 [#qea6365e]
 sub go_r()
 {        
     turn_right;Wait(move_t);Off(OUT_AC);
 }


**RIS_1のプログラムの本体 [#o6dbdcd4]
 task main()
 {    
  move_t=500;   //A'から直進
  go_f();
  SendMessage(SIGNALON);   //シグナルの送信
  ClearMessage();
  OnFwd(OUT_AC);
  until(Message() == SIGNALOFF);  //この間にボールの吸い上げが行われる 

  move_t=250;   //右折を行う
  go_r();
 
  move_t=1000;   //ゴールへ向けて直進
  go_f();
  SendMessage(SIGNALON);      //最後にボール排出を行うためのシグナルを送信する。連携ん説明は前述通りである。 
  ClearMessage();
  OnFwd(OUT_AC);
  until(Message() == SIGNALOFF); 

  move_t=200;  
  go_b(); 
  move_t=200;         
  go_b();       //交代を行う
 }

**RIS_2のサブルーチンについて [#jbf303a5]

***球の吸い上げ [#vcfc7899]
 sub ball_c()
 {    
 Off(OUT_AC);    //前述した、シグナルを受け取るまで停止させるプログラムである。
 until(Message() == SIGNALON);  //
 OnFwd(OUT_A);    //アームを下げる
 Wait(100);
 Off(OUT_A);
 OnFwd(OUT_C);   //キャタピラをつかったベルトコンベアで球を吸い上げる。
 Wait(100);
 OnRev(OUT_A);    //アームを上げる
 Wait(100);
 Off(OUT_A); //アームの停止
}

***球の排出 [#scef63e1]
 sub ball_l()
 {    
  Off(OUT_AC);          //前述のようにシグナルを受信するまで停止
  until(Message() == SIGNALON);
  OnRev(OUT_C);         //球の吸い込みと逆の動作を行う
  Wait(10000);
  Off(OUT_C);
  SendMessage(SIGNALOFF);    //シグナルの送信 
 }


**RIS_2のプログラム本体 [#e3b77e79]
 task main()
 {    
  ClearMessage();
  t=200;
  ball_c();          //球の吸い上げ
  SendMessage(SIGNALOFF);   //シグナルの送信
  ClearMessage();
  ball_l();          //球の排出
 }


*感想と反省 [#bfd4827e]
今回の課題3に取り組み、一番の反省点は機体製作に時間をかけすぎた点であった。機体の理想形はあったものの、その理想を追求するあまり、今回はプログラム製作に欠ける時間が非常に少なくなってしまった。また機体も、シンプルで分かりやすい機能とはなっていたが、前方向にボールの処理に関わるパーツが集中してしまったため、実際ロボコンでは故障してしまい上手く機体が動かなかった。今回のように二台分のRISなどを連結する際には、機体が大きくなることを考慮して、機体のパーツバランスなどを工夫する必要があると痛感した。またライントレースをうまく活用できずごり押しでミッションに挑んでしまったことも課題であった。課題2の技術をうまく利用できる機体であれば、もう幾ばくかスムーズに移動のプログラムが行えたかもしれないので、これからはこのゼミに限らずうまく技術を応用することを心掛けたいと思った。

また今回のゼミを受けてみて、プログラムすることの難しさを知り(例えば一文字でも、エラーがあると機体が動かない)、またそのプログラム運用に適した機体を作ることを通じて、身近にある機械やロボット等への見方や考え方が変わった。例えば、自動掃除機などはセンサーを利用して、上手く動くようになっているのであるのかもしれない、ということに気づくようになったり、身近なところにいろいろなプログラムが存在するのだなということを、少し意識するようになった。今回のゼミの経験を生かして、様々な物事に興味を深めていければいいなと思う。

また短い期間ではあったが、今回の授業で毎回協力してくれたメンバーの皆にも感謝をしたい。

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