- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*課題について [#c3a9ed2f]
詳しくは課題([[2017a/Mission1]])を参照。
松本での大学生活を表す一文字ということで、これからの大学生活でいろいろなことを貪欲に求めていきたいと思い、「求」という字を選んだ。
*ロボット本体 [#p69d1362]
**車体部分 [#le1335c6]
青丸で示したペン部分が赤矢印のような上下運動の際に、ペンがロボット本体とぶつからないように縦長の構造にした。
ペン部分はロボット本体の中心に取り付けてあるモーターで動かす
#ref(2017a/Member/Kyou/Mission1/全体写真.jpg,75%)
#ref(2017a/Member/Kyou/Mission1/全体の感じ.jpg,75%)
青丸で示したペン部分が赤矢印のような上下運動の際に、ペンがロボット本体とぶつからないように縦長の構造にした。コントローラー本体が後方のキャスターの上になると動きが悪くなるので、横向きに取り付けできるだけ前方に取り付けた。ペン部分はロボット本体の中心に取り付けてあるモーターで動かす。
&ref(2017a/Member/Kyou/Mission1/全体写真.jpg,75%);
&ref(2017a/Member/Kyou/Mission1/全体の感じ.jpg,87%);
**ペン部分 [#le269b89]
ペンが紙に触れる際に、タイヤとタイヤの中心(下の写真にはタイヤの中心と示す)で紙に触れるように設計した。その理由は左タイヤと右タイヤを同時にそれぞれ反対方向に回転させれば、車体の回転の際、紙から見たペンの位置のずれが軽減されるからである。
#ref(2017a/Member/Kyou/Mission1/ペン部分.jpg,75%)
&ref(2017a/Member/Kyou/Mission1/ペン部分.jpg,75%);
&ref(2017a/Member/Kyou/Mission1/タイヤの回転図.jpg,100%);
*文字について [#v8cdc4af]
今回はプログラミングを簡単にするため以下の写真に示す書き順にした。
なお、この字は私が手書きしたものでありロボットが書いた字ではない。
#ref(2017a/Member/Kyou/Mission1/書き順.jpg,75%)
#ref(2017a/Member/Kyou/Mission1/書き順.jpg,50%)
*プログラム [#vc242f80]
改良や調整をしやすくするため、1画目から7画目までをサブルーチンでプログラムした。
改良や調整をしやすくするため、一画目から七画目までをサブルーチンでプログラムした。
ペンを上げたり下ろしたりするような単純な作業もサブルーチンでプログラムした。
ただし、前進や回転などはモーターを回す時間が微妙に異なるためサブルーチンでプログラムすることはできなかった。
ただし、前進や回転などはモーターを回す時間が微妙に異なるためサブルーチンでプログラムすることはできなかった。なお、一画目というのは一画目を書き終えて二画目の書きはじめの位置まで移動しペンを下ろした状態のことをいうとする。二画目から六画目までも同様である。
sub penup () //ペンを上げる
{
OnRev(OUT_A,20);
Wait(400);
Off(OUT_A);
OnRev(OUT_A,20);
Wait(400);
Off(OUT_A);
}
sub pendown () //ペンを下ろす
{
OnFwd(OUT_A,20);
Wait(400);
Off(OUT_A);
OnFwd(OUT_A,20);
Wait(400);
Off(OUT_A);
}
sub ikkakume () //1画目
ここの一画目を書き終えたあとに、二画目を紙に対して垂直にかけるように回転させることが大変難しかった。電池が消耗してくるたびに垂直にならなくなってしまい、ここがずれると全体的にバランスが悪くなるので一番気を使った。
sub ikkakume () //一画目
{
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_B,20);
OnRev(OUT_C,20);
Wait(3000);
Off(OUT_B);
Off(OUT_C);
pendown();
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_B,20);
OnRev(OUT_C,20);
Wait(3000);
Off(OUT_B);
Off(OUT_C);
pendown();
}
sub nikakume () //2画目
三画目にどの角度で入るかをこの時点で確定させなければならなかった。
sub nikakume () //二画目
{
OnFwd(OUT_BC,30);
Wait(1000);
Off(OUT_BC);
penup();
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3250);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
OnFwd(OUT_BC,30);
Wait(400);
Off(OUT_BC);
pendown();
OnFwd(OUT_BC,30);
Wait(1000);
Off(OUT_BC);
penup();
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3250);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
OnFwd(OUT_BC,30);
Wait(400);
Off(OUT_BC);
pendown();
}
sub sankakume () //3画目
sub sankakume () //三画目
{
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3000);
Off(OUT_C);
Off(OUT_B);
pendown();
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3000);
Off(OUT_C);
Off(OUT_B);
pendown();
}
sub yonkakume () //4画目
ここで長めに直線を引くことで全体のバランスをとった
sub yonkakume () //四画目
{
OnFwd(OUT_BC,30);
Wait(1000);
Off(OUT_BC);
penup();
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3250);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(300);
Off(OUT_BC);
pendown();
OnFwd(OUT_BC,30);
Wait(1000);
Off(OUT_BC);
penup();
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3250);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(300);
Off(OUT_BC);
pendown();
}
sub gokakume () //5画目
sub gokakume () //五画目
{
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_BC,30);
Wait(500);
Off(OUT_BC);
pendown();
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_BC,30);
Wait(500);
Off(OUT_BC);
pendown();
}
sub rokkakume () //6画目
細かい微調整をするためにここのプログラムがとても長くなってしまった
sub rokkakume () //六画目
{
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3500);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(600);
Off(OUT_BC);
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(2950);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(600);
Off(OUT_BC);
pendown();
OnFwd(OUT_BC,30);
Wait(200);
Off(OUT_BC);
penup();
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(3500);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(600);
Off(OUT_BC);
OnFwd(OUT_C,20);
OnRev(OUT_B,20);
Wait(2950);
Off(OUT_C);
Off(OUT_B);
OnFwd(OUT_BC,30);
Wait(600);
Off(OUT_BC);
pendown();
}
sub nanakakume () //7画目
sub nanakakume () //七画目
{
OnFwd(OUT_BC,30);
Wait(400);
Off(OUT_BC);
penup();
OnFwd(OUT_BC,30);
Wait(400);
Off(OUT_BC);
penup();
}
task main ()
{
ikkakume();
nikakume();
sankakume();
yonkakume();
gokakume();
rokkakume();
nanakakume();
ikkakume();
nikakume();
sankakume();
yonkakume();
gokakume();
rokkakume();
nanakakume();
}
*まとめ [#ed2e1475]
**結果 [#r11e369e]
なんとか読めるレベルまでは達したと思う。
「求」という字の点の角度や長さやうちはじめの場所をとても意識した。
赤丸で示したところは、線がたくさん重なり読みにくくなってしまった。
青丸で示したところは、左を長くしたほうが字がきれいに見えると思い、長くしたが余りにも長すぎてしまった。
#ref(2017a/Member/Kyou/Mission1/結果.jpg,75%)
**感想 [#u67075f5]
ペンに当たらないようにするために全体的にロボットを高く設計した結果、重心が高くなりすぎてしまい回転が安定しなくなってしまうという症状が出た。数値から計算して理論通りにプログラミングしてもそのときの電池残量などによって誤差が生じてしまい、しっかりとそのときの状況に合わせたプログラミングが必要であると感じた。
ペンに当たらないようにするために全体的にロボットを高く設計した結果、重心が高くなりすぎてしまい回転が安定しなくなってしまうという症状が出た。数値から計算して理論通りにプログラミングしてもそのときの電池残量などによって誤差が生じてしまい、しっかりとそのときの状況に合わせたプログラミングが必要であると感じた。私は将来ロボットエンジニアになりたいと考えている。今回人生で初めてプログラミングをしたのだが本当にいい経験になったと思う。将来ロボットのプログラミングをどういったものを使ってやるのかは分からないため、技術的に将来役に立つかは分からない。しかし、あきらめずに何度も試行錯誤し、反省点を次に活かすなどといったロボット制作の本質的な部分がぶれることはない。今回学んだことを次につなげていきたい。