[[2016a/Member]] 目次 #contents *課題1 [#ya32e4a3] 詳しい説明は[[2016a/Mission1]] *ロボット説明 [#a647102f] 車体前方にペンを持てるように設計。画像ではペンを持ってないが、突起部分にゴムをひっかけてペンを固定することができる。 進行方向前方から見て右の車輪がモーターをA、左の車輪がモーターをB、ペンの上げ下げがモーターをCとしている。 #ref(2016a/Member/Tea/Mission1/編集10.jpg,100%,ロボ) (Fig.1 ロボット)↑モーターにより赤矢印方向にペンを持ち上げたり下げたりする。 #ref(./編集2.jpg,100%,横から見て) (Fig.2 ロボット)↑横から見たロボット *似顔絵 [#m4bd1ea8] 早速、結果として似顔絵を見ていただくこととする。 **完成予想 [#oe97a734] #ref(./完成予想1.png,150%,予想) (Fig.3 予想図)↑ペイントを使って描いたため多少ゆがんでいる。また、横顔として髪と口と目があるため似顔絵として成立しているとする。 **完成 [#r46ba24e] #ref(./似顔絵1.jpg,80%,似顔絵) (Fig.4 実際の似顔絵)↑だいぶ前髪がゆがんでしまった。動きが速かったために口の線がきれいでなかった。 **似顔絵の描き方 [#tbc7816c] #ref(./説明画像2.jpg,80%,説明) (Fig.5 描き方)↑1.輪郭→2,3.前髪→4.口→5.目の順番で描いていく。 *プログラム [#w8309785] これから上に記述した似顔絵を描き上げたプログラムを紹介する。 **定義 [#vd0eb95c] 以下、すべての定義である。 #define CIRCLE_LINE(t) OnRev(OUT_B,50);OnFwd(OUT_A,50);Wait(t);Off(OUT_AB) #define TUN_LEFT(t) OnFwd(OUT_A,75);Wait(t);Off(OUT_AB) #define TUN_RIGHT(t) OnFwd(OUT_B,75);Wait(t);Off(OUT_AB) #define LINE_GO(t) OnFwd(OUT_AB,75);Wait(t);Off(OUT_AB) #define LINE_BACK(t) OnRev(OUT_AB,75);Wait(t);Off(OUT_AB) #define PEN_DOWN OnFwd(OUT_C,50);Wait(95);Off(OUT_C) #define PEN_UP OnRev(OUT_C,50);Wait(95);Off(OUT_C) 必要な定義の説明を以下に書いていく。 ***輪郭の定義(丸顔) [#id39c223] 左右のタイヤを同じ力でそれぞれ前と後ろに開店させることで、車体を中心として正確な丸い輪郭を描くことができる。 #define CIRCLE_LINE(t) OnRev(OUT_B,50);OnFwd(OUT_A,50);Wait(t);Off(OUT_AB) ***基本的な定義 [#q26d9fe8] 基本的な動作を定義した。(t)=(時間)で多用しやすくなっている。 #define TUN_LEFT(t) OnFwd(OUT_A,75);Wait(t);Off(OUT_AB) #define TUN_RIGHT(t) OnFwd(OUT_B,75);Wait(t);Off(OUT_AB) #define LINE_GO(t) OnFwd(OUT_AB,75);Wait(t);Off(OUT_AB) #define LINE_BACK(t) OnRev(OUT_AB,75);Wait(t);Off(OUT_AB) #define PEN_DOWN OnFwd(OUT_C,50);Wait(95);Off(OUT_C) #define PEN_UP OnRev(OUT_C,50);Wait(95);Off(OUT_C) *TUN=TURN **似顔絵プログラム [#ga540687] 上の似顔絵のように横顔を描く、メインの全体プログラムとなっている。 上の似顔絵のように横顔を描く、メインの全体プログラムである。 書き始めの車体位置は、似顔絵の輪郭の中心である。 task main () { CIRCLE_LINE(1125); //輪郭を描く TUN_LEFT(300); LINE_BACK(1100); //前髪を描く PEN_UP; TUN_LEFT(200); LINE_GO(300); //移動1 PEN_DOWN; LINE_GO(280); //口を描く PEN_UP; TUN_RIGHT(400); LINE_GO(200); //移動2 PEN_DOWN; PEN_UP; //目を描く LINE_GO(1000); //走り去る } 以下、それぞれの説明を書いていく。 ***輪郭 [#y8a3516b] 定義で説明した動作。きれいな円を描く。 CIRCLE_LINE(1125); //輪郭を描く ***前髪 [#p57bc54f] TUN_LEFTで突き出た前髪を描き、LINE_BACKで後ろ向きに進みながら額から後頭部にかけての髪を描く。 TUN_LEFT(300); LINE_BACK(1100); //前髪を描く ***移動1 [#n8477e49] PEN_UPでペンを持ち上げ、口を描くためにTUN_LEFTでペンの方向を変えLINE_GOで口の位置まで進む。 PEN_UP; TUN_LEFT(200); LINE_GO(300); //移動1 ***口 [#n8fabdb7] PEN_DOWNでペンを下ろし、LINE_GOで口を描く。 PEN_DOWN; LINE_GO(280); //口を描く ***移動2 [#y06f7cf5] PEN_UPでペンを持ち上げ、目を書くためにTUN_RIGHTでペンの方向を変えLINE_GOで目の位置まで進む。 PEN_UP; TUN_RIGHT(400); LINE_GO(200) //移動2 ***目 [#r0567c92] 目は点になるように、PEN_DOWN→PEN_UPで目を描く。 PEN_DOWN; PEN_UP; //目を描く ***走り去る [#ub005569] 車体が似顔絵に対して邪魔なのでLINE_GOで走り去ります。 LINE_GO(1000); //走り去る *反省&わかったこと [#jfaa1308] **反省 [#s91019c8] 反省は、大きく二つある。 一つ目の反省は、完成した似顔絵の輪郭がA4をはみ出してしまうことだ。何度か左右の車輪の力を変えて輪郭の丸を小さくしようと試みたが、A4に収まることはなかった。 この原因は、ひとつあげられる。 それは、車体からペンまでの距離である。輪郭の描き方は、車体を中心とするものでありペンが車体から離れば離れるほど描ける丸の大きさも大きくなってしまう。要するに、プログラムの値を修正するのではなく、ペンをもっと車体に近い位置で設置する必要があった。 今回は、班での作業であったからロボット自体を勝手に変えることはできなかった。よって、A4に収めるためには似顔絵から考え直しプログラムも書き直す必要があったが、時間切れとなってしまった。 二つ目の反省は、ペンを持たせるためのアームを作るのに多くの時間を費やしてしまったことだ。 当初自分が考えたアームは、ペンを持つことも不安定かつより車体からペンを遠くに持つ構造であった。それに比べれば今のアームは十分に安定しているものになった。これに関して、考えてくれた私の班員にとても感謝している。ただ、ここまでに時間を多く費やしたことも事実である。 以上が私の反省である。 **わかったこと [#pc3f5493] わかったことは簡単に一つだ。 丁寧かつきれいに描くためには、もっと一つ一つの動きをゆっくりにするべきだということだ。どうしても速い動きに魅力を感じてしまうかもしれないが、正確に動かすことも大切だ。 *感想 [#o642b9d0] まず、言いたいことは生協で買ったノートパソコン(Let's note)ではプログラミングを書くOSを起動できないことです。いくらか調べたのでできないはずです。ただ、班員の一人が持っていたパソコンでやることはできました。少し作業効率が悪い中、大学でやったり班員の家でやったりというのにやりがいを感じることがありました。 反省にも書いたように、課題項目の一つをどうしてもクリアできなかったことが悔しいです。もっと、うまく時間を使ってやる必要もあります。もっと色々なやり方を考えといてすぐに問題解決できるようにする必要もあります。やり方を一つに、こだわらないよう注意しようと思います。 レゴを組み立てるのは、班員みんな同じぐらいのレベルで大変だったが次の課題でもどうにか班員で乗り越えられたらとおもいます。 以上、私の感想でした。