*課題1「書道ロボットの作成」レポート [#o5bd7aa3]
#contents
**1 ロボット [#m49b12b9]

#ref(2017b/Member/smith/Mission1/kadai1-1.JPG,50%,作成したロボット)
・このロボットは、掲載ガイドにあるものをベースに作成し、本体が車のように直接動いてその軌跡を画像のさきにあるペンで描くようにしている。モータAは左の2つのタイヤ、モータCは右の2つのタイヤ、モータBはペンに対応している。ペンは、書くときにアームが下がり、書かないときは上がるというようなシンプルな機構にしている。しかし、ペンが本体の重心より前にあるので、その補正をしないといけないことや、動かす度にタイヤの摩擦など様々な要因で補正値が変動するなど、いくつかの欠点を持っている。

**2 プログラミング [#u9df1c12]

・まず、動作の基礎となる本体の前進、後退、右・左折、ペンの上げ下げのプログラムを組んだ。
 #define F 80
 #define B 90
 #define W 95
 #define right OnFwd(OUT_AC);Wait(F);Off(OUT_AC);OnFwd(OUT_A);OnRev(OUT_C);Wait(W);Off(OUT_AC);OnRev(OUT_AC);Wait(B);Off(OUT_AC);
 #define left OnFwd(OUT_AC);Wait(F);Off(OUT_AC);OnFwd(OUT_C);OnRev(OUT_A);Wait(W);Off(OUT_AC);OnRev(OUT_AC);Wait(B);Off(OUT_AC);
 #define straight(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); 
 #define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);
 #define up OnFwd(OUT_B);
 #define down OnRev(OUT_B);
・1〜3行目の数値は上から、ペンの補正のために本体を余分に進む時間、ペンの補正のために本体を後退させる時間、直角に曲がるのにかかる時間を表している。

・4,5行目は、本体が右・左折するプログラムで、それぞれペンの補正のために余分に進んだあと、90度に右・左折し、また補正のために後退するようになっている。

・6,7行目は、本体が前進・後退するプログラムでtには進むまたは戻る時間をいれる。

・8,9行目は、ペンの上げ下げをするプログラムである。ペンを上げるときは、モータを止めるとペンの重みでアームごと下がること、ペンを下げるときは、モータを止めるとペンが跳ねて線が点線になることから、両方Bのモータを止めずに動かしている。

・つぎに、実際に文字を書くプログラムを組んだ。今回書いた文字は「上町」である。この2文字を1文字ずつサブルーチンで組み、最後にメインでまとめている。1文字目の「上」はこのように組んだ。
 sub kami()
 {
     down;
     straight(30);
     up;
     left;
     down;
     Wait(50);
     straight(30);
     up;
     back(30);
     right;
     down;
     Wait(50);
     straight(30);
     up;
     left;
     back(30);
     down;
     Wait(50);
     straight(60);
 }
#ref(2017b/Member/smith/Mission1/kadai1-2.jpg,50%,「上」のイメージ)
・「上」の書く順番は、

1、ペンを下げ、直進する。

2、ペンを上げ左折し、ペンを下げて直進する。

3、ペンを上げ後退し、右折する。

4、ペンを下げて直進する。

5、ぺンを上げ左折し、後退する。

6、ペンを下げて直進する。

となるようにしている。(上の図を参考に)

・2文字目の「町」はこのように組んだ。
 sub mati()
 {
     straight(15);
     up;
     left;
     down;
     Wait(50);
     straight(45);
     up;
     left;
     back(30);
     down;
     Wait(50);
     straight(90);
     up;
     back(15);
     right;
     back(15);
     down;
     Wait(50);
     straight(30);
     up;
     left;
     back(15);
     down;
     Wait(50);
     repeat(4) {
         straight(30);
         up;
         left;
         down;
         Wait(50);
     }
 }
#ref(2017b/Member/smith/Mission1/kadai1-3.jpg,50%,「町」のイメージ)
・「町」の書く順番は

1、「上」を書いたあとにペンを上げ、延長上を前進したあとペンを下げ、前進する。

2、ペンを上げ左折し、ペンを下げて前進する。

3、ぺンを上げ左折し、そのまま後退する。

4、ぺンを下げ前進する。

5、ぺンを上げ後退し、右折する。

6、そのまま後退する。

7、ペンを下げ前進する。

8、ペンを上げ左折し、後退する。

9〜12、ペンを下げ前進し、ペンを上げ左折する行動を4回繰り返す

となるようにしている。(「上」と同様、上の図を参考)

・そして、2つのサブルーチンをメインで合体させる。
 task main()
 {
     kami();
     up;
     straight(60);
     down;
     Wait(50);
     mati();
     Off(OUT_B);
 }
これが今回作ったプログラムである。
**3、実行結果と課題 [#j13158fe]
・上記のように作ったロボットを実行した結果がこれである。
#ref(2017b/Member/smith/Mission1/kadai1-4.JPG,50%,実行結果)
・1で書いたように動かす度に補正値が変動してしまい、その調整がうまくいかずに本番では文字が崩れてしまった。思った通りの文字を書くためにはそういった補正値ができるだけ変動しないようなロボット本体の改造が必要だと思われる。例えば、今回使った大きめのタイヤは、地面の材質やタイヤのゴミの付着などにより、動かす度にコンディションが違ってくる。それを最小にするためにタイヤの数を減らしたり、タイヤのいくつかのゴムを外したりすればいいかもしれない。このような今回出た問題点を次の課題に活かしていきたいと思う。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS