- 履歴一覧
- 2006a/C2/課題1左/progress は削除されています。
*『水』を書く書道ロボット〜途中経過〜 [#k10e58be]
**製作状況 [#s41d97be]
今回の習字ロボットを製作するにあたって、まず私たちのグループははじめから作り直してみようということになりました。(周りとにたような形じゃつまらないし…)&br;
初期の段階では、前後移動と旋回を組み合わせた形などが出たのですが、最終的には写真のような車輪をつけて前後・左右の動きで書くような形に決めました。&br;
ただ、プログラムの方はまだ出来ていません。
#ref(2006a/C2/課題1左/progress/shuji_03.jpg,100%,現段階でのマシン)
しかし、何故写真がうまく教示されないのでしょうか…?
**プログラム〜書道ロボットの中身〜 [#z01ac9b0]
task main()
{
while(1){ //無限ループ
pen_down();
wt();
Retreat();
wt();
hane();
wt();
pen_up();
wt();
move_left();
wt();
pen_down();
wt();
left();
wt();
diagonal_left();
wt();
pen_up();
wt();
move_light();
wtl();
pen_down();
wt();
light();
wt();
diagonal_light();
wt();
pen_up();
wt();
neta();
}
}
void wt(void){ //20msの待ち時間
Wait(20);
}
void wtl(void){ //50msの待ち時間
Wait(50);
}
void pen_up(void){ //ペンを持ち上げる(紙から離す)
OnRev(OUT_C);
Wait(50);
Off(OUT_C);
}
void pen_down(void){ //ペンを下げる(紙につける)
OnFwd(OUT_C);
Wait(50);
Off(OUT_C);
}
void Retreat(void){ //アームを引く
OnFwd(OUT_B);
Wait(70);
Off(OUT_B);
}
void hane(void){ //刎ねる
OnFwd(OUT_A);
OnRev(OUT_B);
Wait(10);
Off(OUT_A+OUT_B);
}
void move_left(void){ //二画目の開始点へ移動
OnFwd(OUT_A);
OnRev(OUT_B);
Wait(13);
Off(OUT_A);
Wait(20);
Off(OUT_B);
}
void left(void){ //二画目をかく
OnRev(OUT_A);
Wait(20);
Off(OUT_A);
}
void diagonal_left(void){ //二画目の斜め
OnFwd(OUT_A+OUT_B);
Wait(30);
Off(OUT_A+OUT_B);
}
void move_light(void){ //三画目の開始点へ移動
OnRev(OUT_A+OUT_B);
Wait(30);
Off(OUT_B);
Wait(23);
Off(OUT_A);
}
void light(void){ //三画目を書く
OnFwd(OUT_A);
Wait(20);
Off(OUT_A);
}
void diagonal_light(void){ //三画目の斜め
OnRev(OUT_A);
OnFwd(OUT_B);
Wait(30);
Off(OUT_A+OUT_B);
}
void neta(void){ //次の開始点へ(オマケ)
OnRev(OUT_A+OUT_B);
Wait(60);
Off(OUT_A+OUT_B);
}
今回のプログラムはwhile(1)で無限ループにしています。そのため紙が左右に長ければ、横に移動しながら次々と『水』を書くようになっています。&br;
(延々と『水』を書いたところでどうというわけではありませんが…)&br;
また、このプログラムはwt()というサブルーチンで待ち時間を作っています。&br;
これは、私たちのロボットが全体的にもろい部分があり、連続して行動すると壊れてしまう恐れがあったからです。&br;
ちなみに、三画目で待ち時間が変わっているのは初期の段階では三画目がうまくいかず、その原因を探りたいと思って多少長くし観察しやすいようにしていたからです。