目次
#contents

*課題3 [#mf123387]
#ref(2018b-mission3.png,,課題コース);
上記のコース上の青のボールは青の缶に、赤のボールは赤の缶にそれぞれ乗せる。缶はロボット起動時にサイコロを振り、サイコロの出た目に対応した位置に置く。ボールを同じ領域内の缶に乗せたかどうか、ボールが缶に当たったか、ダミー缶を使用したかによって点数が付く。&br;
詳しくは[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2018b%2FMission3]]



*使用ルート [#p072aaff]
自分たちのグループは以下のようなルート・手順を考えた。
#ref(root.png,,青・赤矢印 移動ルート 薄青・薄赤 索敵範囲);。
+Y内からスタートし、青のボールへ向かう(青矢印)
+青のボールを掴んだら少し前進した後、缶の索敵を行う(薄青)
+索敵後青のボールを青の領域の缶に乗せる
+青のボールを乗せたらEの交差点まで戻る(赤矢印)
+Eの交差点をFの方向へ曲がり進む(赤矢印)
+急カーブ上で赤のボールを掴む
+赤のボールを掴んだらその場で索敵を行う(薄赤)
+索敵後赤のボールを赤の領域の缶に乗せる


*作成ロボット [#i7f25481]
**ロボット全体像 [#r99d2dad]
#ref(robot.jpeg,,作成ロボット);
今回は2グループ合同でのロボット作成だったのでNXTが2台あり、その片方でボールを掴んで持ち上げるアーム部分の操作、もう片方でライントレースを行うタイヤの操作を行った。
タイヤの操作、各センサの値の認識を行うNXTをマスター側、アームの操作を行うNXTをスレーブ側にしている。
-工夫点&br;
今回課題を達成するために行う動作が多く、キットを2台分使用しているためこれまでに比べロボット本体が大きく、重くなってしまった。そのためにタイヤにかかる重量、タイヤを回転させるモーターにかかる負荷も甚大であることが懸念された。それを緩和するため車体を支えるタイヤの数を6個にし、タイヤとモーターの間にギアを入れた。これによりタイヤにかかる重量の分散とモーターにかかる負荷の軽減が実現できた。
#ref(center-tire.jpeg,,工夫点);
#ref(back-tire.jpeg,,工夫点);

右のモーターからタイヤへのギアのつながりを模式的に表すと以下のようになっている。
#ref(gear-tire.png,,A,B,C,Dはギアを示す);
上記の図においてモーターとギアA、ギアBとギアC、ギアDとタイヤは棒でつながっており回転は連動する。そのためモーターを回転させるとギアAが連動して回転し、その回転がギアBに伝わることでギアCも回転し、ギアDを回転させタイヤが回転する、という流れで動力が伝わる。なおモーターとタイヤの回転比は6対1である。

**ボール保持部分 [#m1a1d80c]
以下ボールをつかむ部分をハンド、ボールを持ち上げる部分をアームと呼称する。
***ハンド [#l25b1265]
ハンド部分は上のギアを回転させることで下のギアに動力が伝わり開閉動作を行う。&br;
下の写真はハンドを閉じる場合の動作である。
#ref(hand.jpeg,,ハンドを閉じる場合 緑矢印 ギアの回転方向 赤矢印 ハンドの閉じる方向);
***アーム [#ma519cb5]
モーターAの回転を橙丸部分の計5つのギアによってハンド部分に伝え、ハンドの開閉を行う。
下の写真の緑矢印の方向はハンドを閉じる方向である。&br;
モーターB、Cを同時に同じ方向へ回転させることで、アームを上下させる。なおアーム部分の重量も大きいためモーター2個を使い分散している。
#ref(arm-hand.jpeg,,緑矢印 モーターAの回転方向-ギア回転の伝わり 紫矢印 アームの上下);
***ハンドとアームの接合部分 [#w36cfbf8]
モーターAからアームを伝わってきた縦方向の回転は、ハンドのギアにより横回転に変換され開閉の動作を行う。
#ref(gear.jpeg,,接合部分);
**各種センサ [#y2cdbf1e]
今回は超音波センサを2つ、光センサを1つ使用した。S1で缶の距離を測定、S2でラインの明暗を測定、S3でボールの距離を測定する。
#ref(sensor.jpeg,,ロボット前方 各種センサ);

*動作説明 [#z7957c1b]
今回の課題は前回の課題と類似点が多く存在するため類似点は簡略化し、相違点を詳しく説明する。&br;類似点の詳しい説明は[[前回(Mission2):http://yakushi.shinshu-u.ac.jp/robotics/?2018b%2FMember%2Ftwinrabi%2FMission2]]の動作説明を参照。
**ライントレース [#g5284910]
今回も前回と同様に線の境目をトレースするプログラムであるが、ライントレースを行う定義関数 
 follow_line(int bw_time,long min_t,int blk_cnt,string invert_info,string sensor_switch) 
において5つの変数を組み込むことで、変数の値によって行われる動作が変更される。以下に5つの変数による動作の変更点をまとめる。なお組み込んであるだけで今回の課題においては使用しておらず、動作の変更を行っていない関数もある。
++bw_timeの値で旋回を行い始めるまでの時間を操作。
++min_tの値で交差点判断を無視する時間を操作、また-1を指定することで常に交差点判断を行わなくなる。
++blk_cntの値に1を指定すると交差点判断をした時停止しライントレースを終了する。0を指定した時は交差点を直進して通り過ぎた後ライントレースを終了する。-1を指定した時は何も行わない。
++invert_infoにoffを指定した場合は何も行わず左の境目をトレースする。onを指定した場合は光センサの値を反転させることで右の境目をトレースする。
++sensor_switchにonを指定すると、S3に接続された超音波センサが16儖米發両祿科(ボール)を発見した時ライントレースを終了する。offを指定した場合はたとえS3の超音波センサが障害物を認識したとしても何も行わない。&br;


線の境目のトレース方法は前回同様{線外ならば線上に向かう}{線の境目ならば直進}{線上ならば線外に向かう}の3つの動作を光センサの値によって制御することで行い、交差点・急カーブも同様に判断する。

**缶の索敵 [#t95593f1]
缶の索敵に関しては相違点としてタイヤ間の距離と索敵範囲の変更がある。
タイヤ間の距離は単純にロボットが変わり、前回より大きくなったため長くなった。
索敵範囲は前回と違い360度一回転しなくてもよかったため、ライントレースと同様に缶を索敵する定義関数
   search_throw(string side_select,float rotate_angle)
に変数を組み込み、旋回方向と旋回角度を操作できるようにした。
++side_selectにrightを指定すると右旋回、leftを指定するとモーターの回転角度に-1をかけることでモーターを逆転させ、左旋回を行う。
++rotate_angleに指定した角度分だけ旋回を行う&br;


旋回角度を算出する式は前回同様 (タイヤ直径/前輪間の距離)*タイヤの回転角度=ロボットの旋回角度 であるが、今回はモーターとタイヤの間にギアをかませてあるため、タイヤの回転角は モーターの回転角*6 で算出される。

**NXT間の通信 [#g7520775]
上記の通り今回2つのNXTを使用しているので、片方をマスターとしもう片方のスレーブ側をBluetoothで繋げている。今回はスレーブ側に{ボールを掴む}{ボールを放す}{アームを上げる}{アームを下げる}の4つの動作を行うプログラムを入れている。マスター側から適宜その動作を行うよう命令を出すことで、スレーブ側に各動作を行わせている。

*使用プログラム [#n73f2320]

*感想・反省 [#e7e9bf4c]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS