[[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(無題.png)
#ref(s_DSC_0177.JPG)
※2回書いた下書きみたいなものです。
*反省・感想 [#u7cdc3c7]
ペンを持ち上げ、曲がり、続きを描こうとすると、続きの場所にペンを下げられず、ずれてしまい、訳の分からない絵になってしまった。ペンを地面と垂直にするタイプの構造なら、もう少しはうまくいったと思う。試験運転を怠ったせいでおきた失敗だった。次回はしっかりと事前に試験しようとおもった。


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