[[2016a/Member]] 目次 #contents *はじめに [#qe1893f6] 課題は自分の似顔絵を描くロボットを製作することである。 詳しい内容として、 •マクロや関数、サブルーチンなどを使い、main関数がなるべく単純になるようにプログラムを作ること。 •定数名やマクロなどは分かりやすい名前を用いること •余裕をもってA4の紙の中に収まる大きさにすること。いくら小さくてもよい。 •ペン以外はキットの部品を使うこと •輪ゴムは切れやすく高価なので慎重に扱い、張力がかかりすぎないようにすること。 *ロボットの説明 [#hd00b836] 【本体図】http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&pcmd=open&file=4f1f7f33-1089-4d2b-a19b-ff1c83afe26c.jpg&refer=2016a%2FMember%2Fsuiko%2FMission1~ http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&pcmd=open&file=237c1c5d-220f-470a-9f51-00de39565e55.jpg&refer=2016a%2FMember%2Fsuiko%2FMission1~ http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&pcmd=open&file=02501c90-8f51-4b9c-9622-6ea843462ec1.jpg&refer=2016a%2FMember%2Fsuiko%2FMission1 ロボットの先端部分に新しくモーターを取り付け、モーターが動くことによりペンの上下を行えるようにした ペンを固定する輪ゴムは両脇の部分に取り付け、ペンが上下してもブレないようにした。 この機構を取り付けたのはロボットの先端部分だったので、線と線を繋げることに少し苦労した。詳しいことはプログラムの項に記す。 *プログラムについて [#s8fe1ea6] **定義の説明 [#g7ef7978] #define UP_TIME 200 #define DOWN_TIME 200 #define up Off(OUT_AC);OnRev(OUT_B,100);Wait(UP_TIME);Off(OUT_B); //ペンを上げる #define down Off(OUT_AC);OnFwd(OUT_B,100);Wait(DOWN_TIME);Off(OUT_B); //ペンを下げる #define TURN_TIME 800 #define SPEED 50 #define turn_left Off(OUT_BC);OnFwd(OUT_A,SPEED);Wait(TURN_TIME);Off(OUT_A); //左回転 #define turn_right Off(OUT_AB);OnFwd(OUT_C,SPEED);Wait(TURN_TIME);Off(OUT_C); //右回転 #define go_forward(t,s);Off(OUT_B);OnFwd(OUT_AC,s);Wait(t);Off(OUT_AC); //前進する #define turn_here(t,s);Off(OUT_B);OnFwd(OUT_A,s);OnRev(OUT_C,s);Wait(t);Off(OUT_AC); //その場で方向転換する #define go_back(t,s);Off(OUT_B);OnRev(OUT_AC,s);Wait(t);Off(OUT_AC); //後退する 簡潔なプログラムになるように定義を多めに設定した。 **プログラム [#w9c05eac] task main() { go_forward(1000,40); up; go_forward(1100.80); turn_here(900,60); go_back(1100,80); down; go_forward(1200,40); up; go_forward(1100,80); turn_here(200,60); go_back(1100,80); down; go_forward(800,40); up; go_forward(1100,80); turn_here(1000,60); go_back(1100,80); down; go_forward(800,40); up; go_forward(1100,80); turn_here(400,60); go_back(1100,80); down; go_forward(1300,40); up; //輪郭 go_forward(1800,40); turn_here(850,60); go_back(1100,80); down; go_forward(450,40); //左目 up; go_forward(100,40); down; go_forward(450,40); //右目 up; turn_here(600,60); down; turn_here(600,30); up; //口 Off(OUT_ABC); } ペンは下げた状態から始める。 輪郭と目は直線、口は曲線で表現している。 輪郭を描く際、直線を引いた後そのまま方向転換すると線と線が繋がらなくなってしまうので 直線を引く→ペンを上げる→直進する→方向転換→後退する→ペンを下ろす というようにして、線と線が繋がるようにしている。 *反省と感想 [#i79c7045] ・ロボットの先端部にペンの機構を取り付けたので、全体としては大きいロボットになってしまった。~ そのため実際に描いた顔も大きくなってしまい、しばしば紙からはみ出てしまったので次回からはコンパクトにロボットを作りたい。 ・思ったよりロボットが進むスピードが速かったので、ズレが大きくなり線と線が繋がらなくなったりした。~ 他のグループを見ると、スピードを遅く設定したほうが安定して動いていると感じたので次回からは速いスピードはできるだけ設定しないようにしたい。 ・電池残量などの都合もあり、毎回描けた顔が違って大変だった。