- 追加された行はこの色です。
- 削除された行はこの色です。
[[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;}
また、後退を入れることで、回転の角度を減らした。
*反省・感想 [#u7cdc3c7]
ペンを持ち上げ、曲がり、続きを描こうとすると、続きの場所にペンを下げられず、ずれてしまい、訳の分からない絵になってしまった。ペンを地面と垂直にするタイプの構造なら、もう少しはうまくいったと思う。試験運転を怠ったせいでおきた失敗だった。次回はしっかりと事前に試験しようとおもった。