目次
#contents

*課題 [#b3dac50c]
自分の似顔絵を描く、お絵かきロボットを製作すること。~
条件としては~
・ペン以外はキットの部品を使うこと。~
・プログラムはなるべく簡単に作ること。~
・A4サイズの紙に収まる大きさにすること。~
である。~
[[(2016年前期/課題1より):http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission1]]

*ロボットの説明 [#s126c317]
#ref(2016a/Member/ryo/Mission1/image1.JPG,120%,ロボット本体)
これがロボットの全体像。
#ref(2016a/Member/ryo/Mission1/image5.JPG,100%.タイヤ)
ペンを持たせるため、タイヤを二個取り付け挟んだ。~
また、タイヤの片側をモータとつなげ、もう片方は空回りさせ、上下運動をできるようにした。
#ref(2016a/Member/ryo/Mission1/image3.JPG,120%,ロボット本体)
タイヤだけではペンが安定しなかったため、タイヤ下に補助を取り付けた。~
ペンはタイヤ間の距離を考慮し、太さが合うペンを取り付けた。
*下書き [#fa9bc848]
#ref(2016a/Member/ryo/Mission1/image1 (5).JPG,80%.下書き)
できるだけロボットの移動距離が短くなるように順路を考えた。~
また、プログラミングのしやすさを考え、直角を多用できるように下書きした。~
髪以外左右対称にしたため、移動距離などがプログラミングしやすかった。
*プログラムの説明 [#x04133ba]
**定義の説明 [#v552995a]
 #define go_fwd(t)
 t秒間直進。
 #define Turn_L
 #define Turn_R
 これらは直角に回転するよう定義したもの。~
 ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。~
 Turn_Lが左回転、Turn_Rが右回転。
 #define Turn_L_i
 #define Turn_L_ii
 #define Turn_L_iii
 これらは髪の毛を描くときに使った定義。~
 それぞれ左回転をするが、回転時間を変え、角度を変えた。~
 ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。~
 #define pen_up
 #define pen_down
 これらはペンの上下に関する定義。~
 pen_upでペンを上げpen_downでペンを下げる。
**プログラム [#z44098e9]
(行変更の際の記号が¥となっている)
 #define go_fwd(t)  OnFwd(OUT_AC);Wait(t);Off(OUT_AC)                 //t秒直進
 #define Turn_L     pen_up;\
                    OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                    OnFwd(OUT_C);OnRev(OUT_A);Wait(93);Off(OUT_AC);\
                    OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\       //90度左回転
                    pen_down;
 #define pen_up     OnFwd(OUT_B);Wait(15);Off(OUT_B);                       
 #define pen_down   OnRev(OUT_B);Wait(15);Off(OUT_B);
 #define Turn_L_i   pen_up;\
                    OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                   OnFwd(OUT_C);OnRev(OUT_A);Wait(55);Off(OUT_AC);\
                    OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\       
                    pen_down;
 #define Turn_L_ii  pen_up;\
                    OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                    OnFwd(OUT_C);OnRev(OUT_A);Wait(68);Off(OUT_AC);\
                    OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\
                    pen_down;
 #define Turn_L_iii pen_up;\
                    OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                    OnFwd(OUT_C);OnRev(OUT_A);Wait(160);Off(OUT_AC);\
                    OnFwd(OUT_AC);Wait(72);Off(OUT_AC);\
                    pen_down;
 #define Turn_R     pen_up;\
                    OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                    OnFwd(OUT_A);OnRev(OUT_C);Wait(93);Off(OUT_AC);\
                    OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\       //90度右回転
                    pen_down;
 
 task main()
 {
       repeat(2)  {
       go_fwd(90);
       Turn_L;
       go_fwd(80);
       Turn_L;
      }            //輪郭
       pen_up;
       go_fwd(50);
       pen_down;
       Turn_L_i;
       go_fwd(29);
       Turn_L_ii;
       go_fwd(58);      //髪の毛
       Turn_L_iii;
       pen_up;
       go_fwd(24);
       pen_down;
       Turn_R;
       go_fwd(24);      //右目
       pen_up;
       go_fwd(10);
       pen_down;
       Turn_L;
       go_fwd(34);      //口
       Turn_L;
       pen_up;
       go_fwd(10);
       pen_down;
       go_fwd(24);      //左目
        
  
 }
輪郭部分でrepeatを使って簡略化することができた。~
回転した後、位置のずれが起こるため、回転する際に後退、回転、前進の順に動かし、位置の修正を行った。~
ペンの上下、回転、位置の修正までを一つの定義にまとめ、プログラムを短くすることを心がけた。 
*感想と考察  [#w8b136a8]
*感想  [#w8b136a8]
#ref(2016a/Member/ryo/Mission1/kao.JPG,100%.タイヤ)
これが完成品。下書きに近い顔を描くことができたと思う。定義やrepeatを使い、簡略化できた。~
回転の後、位置ずれが起こるため、後退・前進を使って修正したが、その時間を調節することが一番大変だった。~
電池の減り具合でロボットのスピードも変わってしまうため、そこも苦戦した。~
何度も繰り返し試験運転をしなければいけなかったため、大変ではあったが、その分、成功した時の達成感は大きかった。~
次の課題も頑張りたい。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS