[[2019a/Member]]

目次
#contents

*課題について [#i1cb85b4]

-課題については以下を参照
課題についてはリンクを参照[[2019a/Mission3]]

ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。
*ロボットについて [#l8a9a609]
-今回のロボットは、モーターを球をつかむ用のアームで2つ、ロボットの車部分で2つ用いた。こうすることによって、スムーズにロボットが動くと思ったからだ。NXTを通信することによって4台のモーターを動かすことができる。

ロボコンのフィールド平面図
-ロボットを前からみた図

フィールドの説明
フィールドは課題2で使用した紙を使用する。
生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方に玉を2個入れる。
残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤやプレートの上に置いてもよい。
プラ容器には色をつけたり文字や記号を書いてもよい。
プラ容器は両面テープ等でフィールドに固定してもよい。
2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよい。
&ref(2019a/Member/Daisuke/Mission3/ロボット10.jpg.jpg,100%,てすとa);

-ロボットを右斜め前からみた図

&ref(2019a/Member/Daisuke/Mission3/ロボット11.jpg.jpg,100%,てすとb);

-ロボットを後ろからみた図

&ref(2019a/Member/Daisuke/Mission3/ロボット12.jpg.jpg,100%,てすとc);

-ロボットを左上からみた図

&ref(2019a/Member/Daisuke/Mission3/ロボット13.jpg.jpg,100%,てすとd);
**センサーについて [#bf0fcd13]
-今回のロボットはセンサーの位置を工夫した。課題2での失敗を反省して、センサーをタイヤの軸となるべく重なるように取り付けた。そうすることによってロボットが回転するとき、センサーが大きく黒線からずれるのを防ごうと思った。また、紙とセンサーをほぼ水平にしてより正確に色を判断できるようにした。
**アームについて [#i2958f66]
上記の通り、アームの方には2つのモーターを使用しそれぞれアームの上下運動と開閉運動に使った。開閉運動をするアームの方はギアをたくさんつけて、1つのモーターで左右の開閉ができるようにした。上下運動の方はひし形の形をした部分の角の点を回転させることでそれを可能にした。モーターをロボットに直接つけて上下させようとすると先端についているモーターやアームが重すぎて上下する用のモーターに負荷がかかる。だから僕たちは、アームのモーターに小さいギア、ひし形の角の側に大きなギアを付けることでモーターにかかる負担を少なくして、安定した動作の実現と部品破損のリスクの軽減に成功した。

*プログラムについて [#rf36b083]
-今回はNXT2台(マスター側とスレーブ側)を通信させて、マスター側はロボットの移動を、スレーブ側はアームの開閉と上下をそれぞれ担当している。また、ライントレースの際、センサーの判定をより繊細なものにするためにセンサーの値を5段階で判定した。NXTのモニター機能でセンサーが完全に線の上に乗っかっている時と白いところにいるときの数値を計り、それぞれをblackとwhiteと定義する。よって、black以下の数値の時は線上、white以上の数値の時は線外、これらの数値の間の場合は白いところと黒線の境目の灰色のところにセンサーがあるということになる。
**マスター側のプログラムについて [#u586f3a9]
***定義 [#a9467efe]
-今回のプログラムでは定義を次のようにした。
#define black 30                                         //完全に黒のときの値
#define white 50                                         //完全に白のときの値
#define speedH 60                                        //速いスピード
#define speedL 30                                        //遅いスピード
#define speedM 20                                        //逆回転ときのスピード
#define mae OnFwd(OUT_BC,speedH);                        //前進の動作
#define ushiro OnRev(OUT_BC,speedH);                     //後退の動作
#define turnRRR OnFwd(OUT_C,speedH);OnRev(OUT_B,speedM); //一番キツい右曲がり
#define turnLLL OnFwd(OUT_C,speedH);OnRev(OUT_C,speedM); //一番キツい左曲がり
#define turnRR OnFwd(OUT_C,speedH);Off(OUT_B);           //右曲がり
#define turnLL OnFwd(OUT_B,speedH);Off(OUT_C);           //左曲がり
#define turnR OnFwd(OUT_C,speedH);OnFwd(OUT_B,speedL);   //緩めの右曲がり
#define turnL OnFwd(OUT_B,speedH);OnFwd(OUT_C,speedL);   //緩めの左曲がり
#define step 1                                           //ライントレースの動作時間
#define jikan 100                                        //完全に黒で居続けられる時間の最大値(しきい値)
#define teishi Off(OUT_BC);Wait(300);                    //一時停止
#define CONN 1                                           //スレイブの番号
#define SIGNAL1 11                                       //スレイブとやり取りする信号の番号
#define SIGNAL2 12                                       //同上
#define SIGNAL3 13                                       //同上
#define SIGNAL4 14                                       //同上
#define curveL OnFwd(OUT_B,20);OnRev(OUT_C,10);          //左に回転してカーブする動作



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