*似顔絵ロボットの製作 [#h33faf51] 目次 #contents *課題内容 [#ga23cf62] A4の用紙に、相方の似顔絵を描くロボットを製作する。 細かなルールは以下の通りである。 -用紙をテープなどで固定してはいけない。 -1人につき1つ以上のプログラムを制作すること。 -ペン以外の部品は、キットに含まれる物を使用すること。 -キットに付属の高価な輪ゴムは切れやすいので、扱う際は十分注意すること。 -改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。 *メンバー [#aa01cd0c] -ぐっP:工学部 電気電子工学科 ロボットもプログラムも久しぶり - *ロボット紹介 [#e373491f] **全体像 [#ffe0da88] 全体はこんな感じです。ペンの上げ下げにアームを用いた「アーム型」ロボットです。 **アーム [#e9724257] 両側からペンを挟み込むようにして固定します。 **キャスター [#g251b922] -第一弾 ガイドブック46ページのキャスターを参考に製作。 問題点:走行中に用紙に引っかかり、用紙がずれてしまう。 -第二弾 用紙に引っかからないように、キャスターを本体の内側に設置することに。取り付け場所が狭いため、摩擦の少なそうな部品で代用。 問題点:それでも摩擦が生じ、用紙が曲がってしまう。 -第三弾 ならばいっそのこと、キャスターを用紙の外に出してしまおう!ということで製作。 問題点:動作の際に、非常にスペースをとる。しかし、スペースさえ確保できれば今までで一番描きやすい。 *予定図面 [#s90c82c1] **ぐっP作「相方の顔」 [#v39bdb58] +輪郭を円で描く +交互にバックして、髪を表現 +位置調整(1) +目は直線で +位置調整(2) +回転を利用し、口を描いてフィニッシュ *プログラム [#te65bce5] **ぐっPのプログラム [#a435c9f9] #define BACK_TIME 18 //髪の部分の後退時間を指定 #define GO_TIME 10 //直進、後退時間を指定 #define UP_TIME 10 //アームの上げ時間を指定 #define DOWN_TIME 200 //アームの下げ時間(待ち時間)を指定 void turn_right(int t) //t秒間の右旋回を定義 { OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC); } void turn_left(int t) //t秒間の左旋回を定義 { OnRev(OUT_A); OnFwd(OUT_C); Wait(t); Off(OUT_AC); } void left_back() //左後退を定義 { OnFwd(OUT_C); Wait(BACK_TIME); Off(OUT_C); } void right_back() //右後退を定義 { OnFwd(OUT_A); Wait(BACK_TIME); Off(OUT_A); } void back() //後退を定義 { OnFwd(OUT_AC); Wait(GO_TIME); Off(OUT_AC); } void go_straight() //直進を定義 { OnRev(OUT_AC); Wait(GO_TIME); Off(OUT_AC); } void go_right() //右折を定義 { OnRev(OUT_A); Wait(BACK_TIME); Off(OUT_A); } void arm_up() //アームアップを定義 { OnRev(OUT_B); Wait(UP_TIME); Off(OUT_B); } void arm_down() //アームダウンを定義 { OnFwd(OUT_B); Wait(2); Float(OUT_B); Wait(DOWN_TIME); } void shita_yose() //下方向への幅寄せを定義 { turn_right(10); back(); turn_left(10); } void ue_yose() //上方向への幅寄せを定義 { turn_left(10); back(); turn_right(10); } task main() { turn_right(165); //輪郭 repeat(2){ //髪始め right_back(); left_back(); } right_back(); //髪終わり arm_up(); go_right(); //位置調整 shita_yose(); repeat(2){ //目始め go_straight(); arm_down(); go_straight(); arm_up(); } //目終わり repeat(2){ ue_yose(); //位置調整 go_straight(); } turn_left(20); arm_down(); turn_left(15); //口 arm_up(); } *実行結果 [#bd650708] *感想 [#i4fe4676]