2016a/Member

目次

はじめに

今回私たちのグループではレゴ社マインドストームというロボットの旧モデルRISを使い、似顔絵を描くロボットの本体製作とプログラム製作をした。

今回の課題では

•マクロや関数、サブルーチンなどを使い、main関数がなるべく単純になるようにプログラムを作ること。

•定数名やマクロなどは分かりやすい名前を用いること

•余裕をもってA4の紙の中に収まる大きさにすること。いくら小さくてもよい。

•ペン以外はキットの部品を使うこと

•輪ゴムは切れやすく高価なので慎重に扱い、張力がかかりすぎないようにすること。

という点に注意し課題を行った。 (引用 2016年度前期 課題1 )

ロボットの構造の説明

私たちのグループでは写真のような構造にした。

s_1465399446983.jpg

工夫した点は、RISでは、モーターの速度調整が出来ず、モーター直での動力で絵を描くのは、速すぎて困難なため、写真のように、ギアを一度かませ、速度を遅くした。

s_1465209002236 (1).jpg

また、ペンは次のようなプーリーを用い上下するようにした。ペンの固定にはテープを使用してしまった。

s_1465209005530 (1).jpg

ロボットのプログラム・動作の説明

プログラム

#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); // 口
}

動作

#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);

ペンを下げる

という定義を用い、次のような似顔絵を描こうとした。

s_繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・ヨ (13) (1).png

順番は矢印の通り。(手書きで分かりずらくて申し訳ない。)

s_繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・ヨ (14).png

私の班のロボットは100秒でおよそ36cm進み、110秒で1回転するので、比の計算を用い、各長さ、角度を調整した。単位はcm。(私の技術では手書きが精一杯なため、角度は省略させてもらいました。申し訳ございません。)

スクリーンショット (15).png

髪の毛を描くときに、繰り返しを用い省略をした。

repeat(2){gofw(42);pen_up;turnr(138);pen_down;gore(42);pen_up;turnl(138);pen_down;}

また、後退を入れることで、回転の角度を減らした。

完成した絵

ロボットの構造を、ペンを垂直でなく、ししおどしのように下ろすタイプにしたため、ペンを上げてから直角に曲がり、ペンを下ろすと続きからの位置では無く、少しずれた位置から書き始めてしまったため、上手く行かず、うにのようなトゲトゲした絵になってしまった。写真を撮り忘れてしまったので完成した物が見せられません。申し訳ございません。

無題.png
s_DSC_0177.JPG

※2回書いた下書きみたいなものです。

反省・感想

ペンを持ち上げ、曲がり、続きを描こうとすると、続きの場所にペンを下げられず、ずれてしまい、訳の分からない絵になってしまった。ペンを地面と垂直にするタイプの構造なら、もう少しはうまくいったと思う。試験運転を怠ったせいでおきた失敗だった。次回はしっかりと事前に試験しようとおもった。


添付ファイル: file無題.png 155件 [詳細] files_DSC_0177.JPG 211件 [詳細] fileスクリーンショット (15).png 216件 [詳細] files_繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・ヨ (13) (1).png 179件 [詳細] files_繧ケ繧ッ繝ェ繝シ繝ウ繧キ繝ァ繝・ヨ (14).png 196件 [詳細] files_1465399446983.jpg 204件 [詳細] files_1465209005530 (1).jpg 223件 [詳細] files_1465209002236 (1).jpg 219件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-05 (金) 13:20:18