- 追加された行はこの色です。
- 削除された行はこの色です。
[[2017b/Member]]
#contents
*初めに [#x9fc1f52]
今回の課題は、自分が暮らしたことのある所の地名を選んでロボットに書かせる、というものであった。大きさはA4用紙に収まるようにし、2文字以上であることが条件だった。
*ロボットについて [#v1974f8a]
自分たちの班ではx軸方向(横方向)とy軸方向(縦方向)に動くロボットに分け、y軸方向に動くロボットを土台(以降yロボットと呼ぶ)にし、x軸方向に動くロボット(以降xロボットと呼ぶ)に筆を動かすロボット(以降筆ロボットと呼ぶ)を取り付け本体に乗せることにした(写真1)。x軸、y軸を用いた機構はプログラムの作成および修正がしやすく、ロボット自体の分解も簡単にできるようになるはずだった。しかし、yロボットに用いたモーターを縦に取り付けたために(写真2)、全体的に位置が高くなり筆ロボットの腕を長くせざるを得ず、字を書く時の誤差が大きくなったり全体的に安定し難くなった。加えて、3つのロボットを別々に作ったわけだが、筆ロボットをxロボットに取り付ける方法をあまり考えず、またyロボットにコントローラーを乗せるような形に作ってしまったため、必要以上に固定に部品を使うことになり、ロボットに無駄な重量を与えてしまった。最終的にこのロボットの良い点は政策が早く終わったことでプログラムを組むことに専念できたことだけだった。
自分たちの班ではx軸方向(横方向)とy軸方向(縦方向)に動くロボットに分け、y軸方向に動くロボットを土台(以降y軸ロボットと呼ぶ)にし、x軸方向に動くロボット(以降x軸ロボットと呼ぶ)に筆を動かすロボット(以降筆ロボットと呼ぶ)を取り付け本体に乗せることにした。
#ref(2017b/Member/arso/Mission1/DSCN1131.jpg,80%,ロボットの全体)
x軸、y軸を用いた機構はプログラムの作成および修正がしやすく、ロボット自体の分解も簡単にできるようになるはずだった。しかし、y軸ロボットに用いたモーターを縦に取り付けたために(写真2)、全体的に位置が高くなり筆ロボットの腕を長くせざるを得ず、字を書く時の誤差が大きくなったり全体的に安定し難くなった。
#ref(2017b/Member/arso/Mission1/DSCN1138.jpg,80%,y軸ロボット)
加えて、3つのロボットを別々に作ったわけだが、筆ロボットをx軸ロボットに取り付ける方法をあまり考えず、またy軸ロボットにコントローラーを乗せるような形に作ってしまったため、必要以上に固定に部品を使うことになり、ロボットに無駄な重量を与えてしまった。最終的にこのロボットの良い点は政策が早く終わったことでプログラムを組むことに専念できたことだけだった。
**筆の上下について [#reaef9a4]
筆ロボットは筆が接地するように腕を伸ばしただけだったが上記の通り
*プログラムについて [#sf279d06]
自分は「大分」を選び書くことにした。文字を正しい書き順で書けるようなプログラムにした。
プログラムではモーターA,B,Cは以下のように対応している。
OUT_A//y軸ロボット
OUT_B//x軸ロボット
OUT_C//筆ロボット
以下はモーターの強さの定義である。しかし、時間を調節するだけではうまくいかなかった部分もあり、全てをこの強さで書くことはできなかった。
#define PLUSX_POWER 15//x軸ロボットを前方に進める強さ
#define MINUSX_POWER -15//x軸ロボットを後方に進める強さ
#define PLUSY_POWER 20//y軸ロボットを前方に進める強さ
#define MINUSY_POWER -20//y軸ロボットを後方に進める強さ
下記の二つはそれぞれ筆を上下に動かすプログラムと、ロボットを斜めに動かすプログラムである。a,b,cはそれぞれA,B,Cのモーターの強さを、s,tは動作時間を示している。x軸、y軸ロボットはモーターの強さが正のとき軸の正方向(右方向と前方向)に動き、筆ロボットは強さが正のとき筆を持ち上げる。しかし、サブルーチンをこのように設定したため、プログラムを書くのは楽だったが、筆の上下や斜めの移動がどの方向であるかがわかりにくくなってしまった点は失敗だった。
sub move_pen(int c,int s)
{
OnFwd(OUT_C,c);
Wait(s);
Off(OUT_C);
}
sub go_slant(int a,int b,int t)
{
OnFwd(OUT_A,a);
OnFwd(OUT_B,b);
Wait(t);
Off(OUT_AB);
}
以下はメインルーチンである。定義やサブルーチンを上記のものだけで済ましてしまったので全体が長々とし見づらくなってしまった。
task main()
{
move_pen(14,270);
OnFwd(OUT_B,20);
Wait(1900);
Off(OUT_B);
Wait(500);
move_pen(-18,250);
ここまでが「大」の1画目である。
OnFwd(OUT_B,-18);
Wait(980);
Off(OUT_B);
OnFwd(OUT_A,PLUSY_POWER);
Wait(400);
Off(OUT_A);
ここまでは移動のプログラム。
move_pen(14,270);
OnFwd(OUT_A,MINUSY_POWER);
Wait(350);
Off(OUT_A);
go_slant(-20,-15,200);
go_slant(-20,-16,200);
go_slant(-20,-17,200);
go_slant(-20,-18,200);
go_slant(-20,-19,200);
go_slant(-20,-20,200);
move_pen(-18,250);
ここまでが「大」の2画目である。
go_slant(19,18,1050);
ここまでは移動のプログラム。
move_pen(14,270);
go_slant(-20,15,1200);
Wait(500);
OnFwd(OUT_B,PLUSX_POWER);
Wait(500);
Off(OUT_B);
move_pen(-18,250);
ここまでが「大」の3画目である。
OnFwd(OUT_B,-16);
Wait(1800);
Off(OUT_B);
OnFwd(OUT_A,MINUSY_POWER);
Wait(200);
ここまでは移動のプログラム。
move_pen(14,270);
go_slant(-20,-16,200);
go_slant(-20,-17,200);
go_slant(-20,-18,200);
go_slant(-20,-19,200);
move_pen(-18,250);
ここまでが「分」の1画目である。
go_slant(20,19,800);
OnFwd(OUT_B,PLUSX_POWER);
Wait(600);
Off(OUT_B);
ここまでは移動のプログラム。
move_pen(14,270);
go_slant(-20,17,800);
OnFwd(OUT_B,PLUSX_POWER);
Wait(250);
Off(OUT_B);
move_pen(-18,250);
ここまでが「分」の2画目である。
OnFwd(OUT_B,MINUSX_POWER);
Wait(1900);
Off(OUT_B);
OnFwd(OUT_A,MINUSY_POWER);
Wait(50);
Off(OUT_A);
ここまでは移動のプログラム。
move_pen(14,270);
OnFwd(OUT_B,PLUSX_POWER);
Wait(1600);
Off(OUT_B);
go_slant(-20,-13,300);
go_slant(-20,-12,300);
go_slant(-20,-11,300);
Wait(400);
go_slant(20,-15,300);
move_pen(-18,250);
ここまでが「分」の3画目である。
OnFwd(OUT_A,PLUSY_POWER);
Wait(500);
Off(OUT_AB);
ここまでは移動のプログラム。
move_pen(14,270);
go_slant(-20,-15,130);
go_slant(-20,-16,130);
go_slant(-20,-17,130);
go_slant(-20,-18,130);
go_slant(-20,-19,130);
move_pen(-18,250);
}
ここまでが「分」の4画目である。
*結果 [#tafec1cc]