- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006a/C2/課題1右/program]]
#hr
CENTER:&size(25){〜『木』を作る書道ロボット〜};
#hr
目次
#contents
-------
*マシンの特徴 [#f62bcf75]
-ペンの上下機構を「クワ」型にすることにより、煩わしいペンの上げ下げ調整にかける時間を大幅に短縮できる。
-「クワ」型の他の利点は、クワの重量により、ペンと紙の設地具合が、自動で調整されるとこである。そのためペンと紙がうまくあたらずに途中でかすれることや、ペンを強く紙に当てすぎて、マシンの位置がずれることを防止できる。
-非常にシンプルな作りになっているため、机から落っこちて、分解しちゃってもすぐに組み立て直せる。
*実際に木を「作る」ロボットのプログラム [#t5894338]
我が班は木を書くのではなく、木を「作る」にこだわります(謎)
以下に、とりあえずのプログラムを載せます。
とりあえずと言ったのは、直前などに調整を行う可能性があるからです。
#define FF OUT_A+OUT_C //前進・後進のためのモーター
#define BASETIME 170 //「木」の1・2画目の長さ等の基本的長さ。
#define WHOLETIME 382 //360度回転
#define HALFTIME 191 //180度回転
#define QUARTERTIME 96 //90度回転
#define DQUARTERTIME 48 //45度回転
task main()
{
OnFwd(FF); //1(=1画目)
Wait(BASETIME);
OnFwd(FF); //1(=1画目スタート)
Wait(BASETIME); *ペンは最初から紙に設置されている
Off(FF);
//age //ペンをあげる
Wait(100);
Wait(100); //1画目終了、2画目に備えて、ペンをあげる。
OnFwd(OUT_B);
Wait(13);
Off(OUT_B);
Wait(100);
OnRev(FF); //2(=中心部へ戻る)
Wait(28); *中心部とはすべての画が交わるアノ点を指す
Off(FF); *ペンと車体の差のせいでここにも苦労することになった
OnRev(FF); //2(=中心部へ戻る)
Wait(28);
Off(FF);
Wait(100);
OnFwd(FF); //3(=マシンを縦方向へ回転)
OnFwd(FF); //3(=マシンを縦方向へ回転)
Rev(OUT_A);
Wait(QUARTERTIME);
Off(FF);
Wait(100);
OnRev(FF); //4(=2画目書き始めの場所への移動)
OnRev(FF); //4(=2画目書き始めの場所への移動)
Wait(29);
Off(FF);
//sage //ペンを
Wait(100);
Wait(100); //ペンをさげる
OnRev(OUT_B);
Wait(14);
Off(OUT_B);
Wait(100);
OnRev(FF); //5(=2画目)
OnRev(FF); //5(=2画目スタート)
Wait(BASETIME);
Off(FF);
//age
Wait(100);
Wait(100); //2画目終了、ペンをあげる
OnFwd(OUT_B);
Wait(13);
Off(OUT_B);
Wait(100);
OnFwd(FF); //6(=再び中心へ戻る)
OnFwd(FF); //6(=再び中心へ戻る)
Wait(194);
Off(FF);
Wait(100);
OnFwd(FF); //7(=3画目記述のためのマシンの回転)
OnFwd(FF); //7(=3画目記述のためのマシンの回転)
Rev(OUT_C);
Wait(DQUARTERTIME);
Off(FF);
OnRev(FF); //7.5(=微調整)
Wait(66);
OnRev(FF); //7.5(=微調整)
Wait(66); *さらっと書いてますがこの微調整にとても苦労しました
Off(FF);
//sage
Wait(100);
Wait(100); //ペンをさげる
OnRev(OUT_B);
Wait(14);
Off(OUT_B);
Wait(100);
OnRev(FF); //8(=3画目)
OnRev(FF); //8(=3画目スタート)
Wait(137);
Off(FF);
//age
Wait(100);
Wait(100); //3画目終了、ペンをあげる
OnFwd(OUT_B);
Wait(13);
Off(OUT_B);
Wait(100);
OnFwd(FF); //9(=元の中心へ戻る)
OnFwd(FF); //9(=元の中心へ戻る)
Wait(208);
Off(FF);
Wait(100);
OnFwd(FF); //10(=4画目記述のための回転)
OnFwd(FF); //10(=4画目記述のための回転)
Rev(OUT_A);
Wait(90);
Off(FF);
OnRev(FF); //10.5(=微調整)
Wait(71);
Wait(71); *まぁ ここも苦労しましたよ
Off(FF);
//sage
Wait(100);
Wait(100); //ペンをさげる
OnRev(OUT_B);
Wait(14);
Off(OUT_B);
Wait(100);
OnRev(FF); //11(=4画目)
OnRev(FF); //11(=4画目スタート)
Wait(137);
Off(FF);
//age
Wait(100);
Wait(100); //4画目終了、ペンをあげる
OnFwd(OUT_B);
Wait(13);
Off(OUT_B);
Wait(100);
//FINISH(おしまい)
}
------
*プログラム及びマシンの開発日誌 [#eb5ef13e]
-4/16 『マシン作成当初』車体に取りあえずペンを付けてみた。またおおよそのプログラムを書き終えた。
-5/16 『作成開始』車体に取りあえずペンを付けてみた。またおおよそのプログラムを書き終えた。
-4/18 『実践テスト』4/16のプログラムで実際に文字をマシンに書かせてみた。が、問題発生。字になってない。原因は、プログラムをペンの位置と車体との差を考えなかったため。急遽プログラムの修正をせまられる。が、
-5/18 『実践テスト』5/16のプログラムで実際に文字をマシンに書かせてみた。が、問題発生。字になってない。原因は、ペンの位置と車体との差を考えなかったため。急遽プログラムの修正をせまられる。想定外の出来事に困惑するメンバーだったが、ペンが紙と接する位置と車体の位置の差を小さくするための改良を施し、マシンの位置を調整させるプログラムを追加させることで、問題解決に成功。無事「木」を書くことができた。
-5/19 『更なる改良』TAの先生が作ってくださったマシンをみて感動する。負けじと余った時間を利用して、3画目と4画目をきれいに曲げるためのプログラムを追加する。が、repeatを使い、左右のタイヤの回転、停止を繰り返すプログラムでは、線がぶれて奇麗なカーブを描けなかった。そこで絶妙な曲がり具合を表現するために、SetPowerというコマンドを使用。これにより完璧ともいえる曲線を手にすることができた。
----
-----
*プログラム作成において苦労した点 [#sc2469d6]
-マシンの動きを少なくすることで、生じる誤差も減ると考えたので、いかにして無駄な動きを省いてシンプルに動かすかということに苦心した。
-また、一度プログラムを書いてみると、字を書く部分(ペンを持つ部分)がマシンの前方にあるためにかなりの誤差が生じることがわかり、その修正に手間取った。プログラム中の動きの名前に「10.5」などとあるのは、途中で微調整用プログラムを追加したためである。
-「木」という文字は4本の画(かく)が揃わなければならず、その調整についても面倒であった。
-木を作るという事と他の班とはひと味違うという事を見せつけるために、アームを使うことで、ペンをクワに見立てて書けるように工夫した。
-何より、マシンの気分が悪いと毎回のように微妙に動きが違ってくるのが大変だったように感じる。
-途中でWait(100)を書き足して、移動によるマシンのぶれを押さえようと試みたが、うまくいかず。やはり、電池の消耗やモーターのコンディションによる多少のぶれは覚悟せねばならぬのか.....
-----
*先生のコメント [#o363ab10]
-OnFwd(FF) や OnRev(FF)、Off(FF) などをマクロとして定義してもいいですね。 -- [[松本(教員)]] &new{2006-05-23 (火) 09:52:44};
#comment