[[2016a/Member]]

#contents

*はじめに [#w8c85221]

課題は似顔絵を描くロボットである。

注意点は

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

・定数名やマクロなどは分かりやすい名前を用いる。

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

・ペン以外はキットの部品を使う。

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

これらに注意をし、今回は自分の似顔絵を描いた。([[2016年度前期 課題1:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission1]]引用)

*ロボットの説明 [#gd87beb3]

**ロボットの構造 [#u3bcc79c]

2つのパーツを使いペンを挟み、輪ゴムで固定して、アームに取り付けました。(写真(A))

(A)

#ref(robo1.jpg)

(B)

#ref(robo2.jpg)

アームに取り付けた際、下のみしか固定できなかったため、上部分にてぐらつきが起こっていました。

なので、ペンを挟んでいるパーツに細い棒と輪っかを取り付け、本体につけた太い棒で支えることによってぐらつきを抑えました。(写真(B)の)

アームのモーターを回転させることによって、描く時はペンを下に動かし、移動する時はペンを上に動かすことが必要であったため、固定はしませんでした。

”分、部分(アームと本体をつないでいる部分)ともに、ぐらつきを抑えることだけに集中しまったため、パーツが多くなり重量が重くなったり(重くなることで動きが鈍くなる)、

左右対称でないため見た目が悪くなってしまいました。

おそらく余分なパーツもあったので、もっと工夫を施せば少ないパーツできれいな形に出来たと思います。

*似顔絵のプログラム [#r581f746]

下のような似顔絵を描こうと思いました。書きやすさを重視したのであまり似ておりません。

#ref(nigaoe1.png)

**定義 [#ee44dcf3]

 #define PEN_DOWN RotateMotor(OUT_A,25,30); // ペンを下げる
 #define PEN_UP RotateMotor(OUT_A,-25,30); // ペンを上げる
 #define GO_FORWARD(s) OnFwd(OUT_BC,25);Wait(s);Off(OUT_BC); // (s/1000)秒前進
 #define GO_BACK(u) OnRev(OUT_BC,25);Wait(u);Off(OUT_BC); // (u/1000)秒後進
 #define TURN_LEFT45 OnFwd(OUT_B,50);Wait(570);Off(OUT_B); // 45°左回転
 #define TURN_LEFT OnFwd(OUT_B,50);Wait(1140);Off(OUT_B); // 右タイヤを動かして90°左回転
 #define TURN_LEFT2 OnRev(OUT_C,50);Wait(1140);Off(OUT_C); // 左タイヤを動かして90°左回転
 #define TURN_RIGHT OnFwd(OUT_C,50);Wait(1140);Off(OUT_C); // 左タイヤを動かして90°右回転
 #define TURN_RIGHT2 OnRev(OUT_B,50);Wait(1140);Off(OUT_B); // 右タイヤを動かして90°右回転

**顔の輪郭プログラム [#f7dd8c53]

#ref(nigaoe2.png)

 task main ()
 {
   PEN_DOWN
   GO _FORWARD(800) // 輪郭
   PEN_UP
   GO_FORWARD(1920)
   TURN_LEFT45
   GO_BACK(2650)
   PEN_DOWN
   GO_FORWARD(480) // 輪郭
   PEN_UP
   GO_FORWARD(1750)
   TURN_LEFT45
   GO_BACK(2560)
   PEN_DOWN
   GO_FORWARD(320) // 輪郭
   PEN_UP
   GO_FORWARD(1520)
   TURN_LEFT45
   GO_BACK(2320)
   PEN_DOWN
   GO_FORWARD(480) // 輪郭
   PEN_UP
   GO_FORWARD(1840)
   TURN_LEFT45
   GO_BACK(2320)
   PEN_DOWN
   GO_FORWARD(800) // 輪郭

**眼鏡・鼻・口プログラム [#wdc43964]

#ref(nigaoe3.png)

***眼鏡プログラム [#eb5f874a]

   PEN_UP
   GO_FORWARD(2560)
   TURN_LEFT2
   GO_BACK(1280)
   PEN_DOWN
   GO_FORWARD(960) // 眼鏡
   PEN_UP
   GO_FORWARD(320)
   TURN_RIGHT
   GO_BACK(160)
   TURN_LEFT2
   GO_BACK(640)
   PEN_DOWN
   GO_BACK(240) // 眼鏡-(緑)
   PEN_UP
   GO_BACK(160)
   PEN_DOWN
   GO_BACK(240) // 眼鏡-(緑)
   PEN_UP
   GO_FORWARD(3200)
   TURN_LEFT2
   GO_BACK(1360)
   PEN_DOWN
   GO_BACK(160) // 眼鏡-(青)
   PEN_UP
   GO_FORWARD(1520)
   TURN_RIGHT
   GO_FORWARD(240)
   TURN_LEFT2
   GO_BACK(1360)
   PEN_DOWN
   GO_BACK(160) // 眼鏡-(青)
   PEN_UP
   GO_FORWARD(1520)
   TURN_RIGHT
   GO_FORWARD(160)
   TURN_LEFT2
   GO_BACK(1360)
   PEN_DOWN
   GO_BACK(160) // 眼鏡-(青)
   PEN_UP
   GO_FORWARD(1520)
   TURN_RIGHT
   GO_FORWARD(240)
   TURN_LEFT2
   GO_BACK(1360)
   PEN_DOWN
   GO_BACK(160) // 眼鏡-(青)

***鼻プログラム [#z3063d84]

   PEN_UP
   TURN_LEFT
   GO_FORWARD(320)
   TURN_RIGHT2
   GO_BACK(80)
   PEN_DOWN
   GO_FORWARD(320) // 鼻
   PEN_UP
   GO_FORWARD(1600)
   TURN_LEFT
   GO_BACK(3360)
   PEN_DOWN
   GO_BACK(80) // 鼻

***口プログラム [#kb5fb584]

   PEN_UP
   GO_FORWARD(3440)
   TURN_RIGHT2
   GO_FORWARD(320)
   TURN_LEFT
   GO_BACK(3200)
   PEN_DOWN
   GO_BACK(320) // 口
 }

**プログラム考察 [#a9a69e81]

注意点に留意しプログラムを組んでみました。

定義を用いたので、用いない場合よりはシンプルに出来たと思います。

ただ、マクロや「repeat」を使うことによってよりシンプルに出来ると思うので、次の課題ではこれらも上手く使っていきたい。

*似顔絵 [#bc2ce2de]

**描いた似顔絵 [#zf54cad7]

下の画像が実際に描かれた似顔絵です。

#ref(nigaoe4.jpg)

**似顔絵考察 [#ac519d86]

輪郭の線の間が広く空いてしまい、眼鏡の上の線の長さが足りなくなってしまいました。

また、90°より大きな角度、あるいは90°未満の回転になっていて、垂直な線が書けませんでした。

変数や回転時間などもう少し微調整を加える必要があったと思いました。

さらに、電池の残量によってスピードも変わってしまうので、その点に注意する、あるいはその対策方法を考える必要もあると思いました。

これらのことは次の課題でも関わってくることなので、より良くなるようにしたいです。

*全体の考察と感想 [#ec8f7627]

今回似顔絵を描くにあたって、立ちはだかる問題がいくつもありました。


まずはロボットの組立上、円を描くことが出来なかったことです。なので、プログラムが長くなってしまいました。

今回はペンを真っ正面にのみ付けたので、サイドに付けることを試しておらず、もし試していたら出来たのではないかと少し後悔しています。


そして、最大の問題が先ほども述べた、電池残量によってモーターの回転速度が遅くなることです。

最初はそれに気づかなかったため、動かしては調整、動かしては調整を繰り返していました。

そして、一通りプログラムが完成した後にそれに気づいたので、電池交換すると似顔絵もぐちゃぐちゃになってしまいました。

調節などで何度も心が折れそうになりましたが、チームの仲間と励まし合ったりしながらなんとか似顔絵を描き上げることが出来ました。


今回の課題を通して、ロボットの構造やある程度のプログラミングのやり方を学べただけでなく、仲間との協調性の大切さを改めて感じました。

また、強い達成感も得ることが出来てよかったです。

まだまだ改善点は多くあるので、次回の課題では改善できるように努めたいです。

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