]追加された行はこの色です。削除された行はこの色です。[[2019a/Mission2]]を参照。[#q0bf97ed]私たちのグループは以下のようなコースを選択した。[#yadb5565]私たちの班は以下のようにこのコースを進む作戦を立てた。~#ref(2019a/Member/ohta/Mission2/コース.png,50%,コース)スタート地点からまっすぐ進んだ後、右側の直線をライントレースしていく。~交差点�(図では交�)では交差点で一時停止後、直進する。~それまでの過程を緑→で表している。~その後、K地点からボールをキャッチするまでは手動で設定していく。~その過程を青→で表している。~最後は左側の直線をライントレースしていき、ゴール直前で球をシュートして自身がゴールする。~それまでの過程をオレンジ→で表している。[#y3762732]主なパーツは車体、本体、アーム、光センサーである。~詳しくは以下の写真を参照。[#d3cbddf7]#ref(2019a/Member/ohta/Mission2/全体図.jpg,20%,全体像)上の写真が今回作成したロボットの全体である。~写真左向きが前方向である。~#ref(2019a/Member/ohta/Mission2/ロボット_190718_0008.jpg,20%,光センサー)前方には光センサーがついており、これが色の明度を測りプログラミングした通りの指示を行う。~後方にはアームがついており、これがピンポン玉をキャッチする仕組みになっている。~今回は前回の課題で失敗した点、車体の重さで後輪がスムーズに回らない点を考慮して、~重心を前方に持ってくることで克服している。今回工夫した点の一つが、このケーブル収納である。~この課題では、モータ3つ分+センサー1つ分の4つのケーブルを使用する。~そのため必然的にケーブルがごちゃごちゃしてしまい、時としてロボットの動作を~邪魔してしまう可能性がある。それを解決するのがこの収納であり、余分な長さ分を~この囲い部分にくるくる巻き付けることでコンパクトに装着できる。[#o909993d]これが作成したアームである。~一方の指は固定されており、もう片方の指が歯車でモータと連携されて動かすことができる。~#ref(2019a/Member/ohta/Mission2/ロボット_190718_0003.jpg,20%,アーム)-球のキャッチ~可動する指が閉まることで球を挟みキャッチする単純な構造である。~#ref(2019a/Member/ohta/Mission2/ロボット_190718_0010.jpg,20%,アーム1)#ref(2019a/Member/ohta/Mission2/ロボット_190718_0009.jpg,20%,アーム2)-球のシュート~挟んでいる状態から可動指が開く。アームの空いた方向へ車体が傾く。~それにより、固定指が球を押し出す。このようにしてゴールに球をシュートする仕組みになる。[#dea9a98f]-値~以下の定義は後述するプログラミングに使う値を定義したものだ。~この部分を変更するだけでいちいち関数に組み込んだの値を変えずに簡略化できる。61-OnRL~この定義はOnRL(x,y)とした時、x=(モーターBの速さ)y=(モーターCの速さ)を表す。~この定義により後述する定義等の簡略化に貢献している。[#adc6e636]今回作ったサブルーチン関数は以下の通りである。-ライントレース[follow_line]~この関数は光センサーでコースの線の明度を計測し、~条件に沿って指定した動作をしながら線上を動ていくものだ。~以下がその関数である。}詳細について述べていく。今回は左側直線トレースを取り上げる。~光センサーがコースの線路の明度を計測。明度ごとに設定された命令をこなす。~明度と命令の設定は以下。~#ref(2019a/Member/ohta/Mission2/表.png,50%,ライン)この表を図化したものが以下である。~緑→が前進、オレンジ→が回転、青→が旋回を示している。~(*見やすくするため、〇の中の数字は定義した値にしている。)#ref(2019a/Member/ohta/Mission2/ライン制御.png,50%,ライン)「follow_line_l」をフローチャート化すると次のようになる。始めにCurrentTickをt0に(リセット)する。MOVE_TIME(250)を超えるまでwhileの中をループし続ける。異なるようになっている。CurrentTickの値は命令遂行後、常にリセットされ、ループは継続される。光センサーの値が45以下の時(黒の時)、CurrentTickはリセットされない。このループから抜け、止まる構造となっている。}今回は右側直線トレース後の交差点なので右側での交差点直進を説明する。~この2つの関数の仕組みは同じである。見つけるまで直進する。~車体は右側に傾いているので直進すれば白色(線路以外の場所)を見つけられる。~白を見つけたら、設定明度〈灰〉をみつけるまで~緩い直進であれば左回転、急激な直進であれば左旋回をする。~灰を見つけたら停止する。#ref(2019a/Member/ohta/Mission2/交差点改.png,50%,交差点)--交差点を直角に曲がる[follow_line_r]~交差点で停止後、直角に曲がる場合は再度「follow_line」を命令することで~そのままライントレースをし続け直角に曲がることができる。~今回のコースでは右に曲がるのみなので「follow_line_r」のみの使用になる。~-交差点での停止[short_break]~このミッションでは「交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止」~を義務づけている。そのためこの関数を挟むことでその条件をクリアしている。}-球をキャッチする[ball_catch]~コースのK地点から球をキャッチするまでは手動のプログラミングを採用している。~それが以下の関数である。}-球をシュート、車体もゴール[shoot_goal]~左側の直線をトレースしてM地点に到達した後の関数である。~この関数は球をシュートして車体本体がゴールするまでの関数である。[#m1a442bb]以上のサブルーチン関数を使用してロボットがスタートしボールキャッチ後~シュートをしてゴールするまでの動作のプログラミングをしていく。~以下がメインのプログラミングだ。[#l6947958]今回はペアの人がロボット作りが上手で前回のような課題点も克服してスムーズに~動くロボットを作れた。アーム部分ではシュート動作が工夫されていると思う。[#wc1f2ec2]サブルーチン関数を使うことにより、メインプログラムを簡略化することに成功した。~またNXTの取説を参考にしたOnRLの定義はサブルーチン関数も含め全体を通して~簡略化することに貢献してくれたのでこれからも使用していきたい。[#i55b5170]この課題はミッションをうまくこなすことができた。ペアとの意見交流も盛んに行われ~ロボットが得意なペアの人はロボット作りを、プログラミングがある程度できる私は~プログラミングを主に分担することで作業の効率化ができた。~次の課題でもこの成功点を生かして取り組んでいきたい。