[[2016a/Member]] 目次 #contents *はじめに [#id5dc0df] 今回私たちのグループではレゴ社マインドストームというロボットの旧モデルRISを使い、似顔絵を描くロボットの本体製作とプログラム製作をした。 今回の課題では •マクロや関数、サブルーチンなどを使い、main関数がなるべく単純になるようにプログラムを作ること。 •定数名やマクロなどは分かりやすい名前を用いること •余裕をもってA4の紙の中に収まる大きさにすること。いくら小さくてもよい。 •ペン以外はキットの部品を使うこと •輪ゴムは切れやすく高価なので慎重に扱い、張力がかかりすぎないようにすること。 という点に注意し課題を行った。 (引用 [[2016年度前期 課題1:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission1]] ) *ロボットの構造の説明 [#b36991f6] 私たちのグループでは写真のような構造にした。 #ref(2016a/Member/kefusuke/Mission1/s_1465399446983.jpg) 工夫した点は、RISでは、モーターの速度調整が出来ず、モーター直での動力で絵を描くのは、速すぎて困難なため、写真のように、ギアを一度かませ、速度を遅くした。 #ref(2016a/Member/kefusuke/Mission1/s_1465209002236 (1).jpg) また、ペンは次のようなプーリーを用い上下するようにした。ペンの固定にはテープを使用してしまった。 #ref(2016a/Member/kefusuke/Mission1/s_1465209005530 (1).jpg) *ロボットのプログラム・動作の説明 [#a07cecb7] **プログラム [#h6e20ca2] #define gofw(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); #define turnl(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_AC); #define turnr(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC); #define gore(t) OnFwd(OUT_AC);Toggle(OUT_AC);Wait(t);Off(OUT_AC); #define pen_up OnFwd(OUT_B);Wait(15);Off(OUT_B); #define pen_down OnFwd(OUT_B);OnRev(OUT_B);Wait(15);Off(OUT_B); task main() { pen_down;gofw(56);pen_up;turnr(275);pen_down;gofw(14);pen_up;turnl(275); pen_down;gofw(28);pen_up;turnl(275);pen_down;gofw(14);pen_up;turnr(275); pen_down;gofw(83);pen_up;turnl(275);pen_down;gofw(111);pen_up;turnl(275); pen_down;gofw(83);pen_up;turnr(275);pen_down;gofw(14);pen_up;turnl(275); pen_down;gofw(28);pen_up;turnl(275);pen_down;gofw(14);pen_up;turnr(275); pen_down;gofw(56);pen_up; // 輪郭 turnr(138);pen_down;gore(42);pen_up;turnl(214);pen_down; repeat(2){gofw(42);pen_up;turnr(138);pen_down;gore(42);pen_up;turnl(138);pen_down;} pen_up;turnl(76);pen_down;gofw(42);pen_up;turnr(138);gore(28);turnr(275); // 髪の毛 gofw(14);pen_down;gofw(28);pen_up;gofw(28);pen_down;gofw(28);pen_up; // 眉毛 turnr(367);gofw(28);pen_down;pen_up;turnr(183);gofw(56);pen_down;pen_up; // 目 turnl(413);gofw(42);pen_down;gofw(14);pen_up;turnr(275);pen_down;gofw(14);pen_up; // 鼻 gofw(28);turnr(138);pen_down;gore(56); // 口 } **動作 [#t9830ee3] #define gofw(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); t秒前進 #define turnl(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_AC); t秒右に回転 #define turnr(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC); t秒左に回転 #define gore(t) OnFwd(OUT_AC);Toggle(OUT_AC);Wait(t);Off(OUT_AC); t秒後退 #define pen_up OnFwd(OUT_B);Wait(15);Off(OUT_B); ペンを上げる #define pen_down OnFwd(OUT_B);OnRev(OUT_B);Wait(15);Off(OUT_B); ペンを下げる という定義を用い、次のような似顔絵を描こうとした。 #ref(2016a/Member/kefusuke/Mission1/s_繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・ヨ (13) (1).png) 順番は矢印の通り。(手書きで分かりずらくて申し訳ない。) #ref(2016a/Member/kefusuke/Mission1/s_繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・ヨ (14).png) 私の班のロボットは100秒でおよそ36cm進み、110秒で1回転するので、比の計算を用い、各長さ、角度を調整した。単位はcm。(私の技術では手書きが精一杯なため、角度は省略させてもらいました。申し訳ございません。) #ref(2016a/Member/kefusuke/Mission1/スクリーンショット (15).png) 髪の毛を描くときに、繰り返しを用い省略をした。 repeat(2){gofw(42);pen_up;turnr(138);pen_down;gore(42);pen_up;turnl(138);pen_down;} また、後退を入れることで、回転の角度を減らした。 *完成した絵 [#l055d1fa] 上手く行かず、うにのようなトゲトゲした絵になってしまった。写真を撮り忘れてしまったので完成した物が見せられません。申し訳ございません。 #ref(s_DSC_0177.JPG) ※2回書いた下書きみたいなものです。 *反省・感想 [#u7cdc3c7] ペンを持ち上げ、曲がり、続きを描こうとすると、続きの場所にペンを下げられず、ずれてしまい、訳の分からない絵になってしまった。ペンを地面と垂直にするタイプの構造なら、もう少しはうまくいったと思う。試験運転を怠ったせいでおきた失敗だった。次回はしっかりと事前に試験しようとおもった。