目次
私は、滋賀県の県庁所在地である「大津」を書くことにしました。詳しくは2019a/Mission1を参照してください。
私たちは、ロボットをできるだけはやく作り、プログラム作成に時間がかけられるようにしました。
なぜならば、ロボカップの大会などでロボット作成に多くの時間を費やしたために、プログラミングにほとんど時間を割くことができず、負けてしまうチームを見たことがあるからです。
モーター2つで移動し、モーター1つでペンの上げ下げを行うロボットを作成しました。
全体図
NXT1つとモーター3つという極めて単純な作りです。
初めは、簡略化のためにNXTをモーターの上に載せておらず、モーター部分だけが動くようにしていました。
しかし、それだと軽すぎたために、モーターが空回りしてしまいました。
そのため、NXTをモーターの上に載せるようにしました。
モーターの部分
真ん中のモーターでペンを上げ下げします。
垂直にあげる機構を作っても良かったのですが、ペンが接地しているかどうかが問題なので、モーターの回転運動をそのまま使うことにしました。
しかし、この方法だときちんと接地することが難しいので、上げるときの動作よりも下げるときの動作よりにかける時間を長くすることによって解決しました。
「大津」の書き方
写真の通りに書くようにしました。
上げ下げの動作が多いのはプログラムが大変なので、回数を減らすために、できるだけ一筆で書くようにしました。
「大」は一筆で書き、「津」は「大」の終わりからだと、右側から書いた方が移動距離が短くなるので、右側から書き、最後にさんずいを書くことにしました。
横棒は書くのが大変なので、回転の動きで、曲線によって対応するようにしました。
・プログラム
#define zenshin OnFwd(OUT_BC,50); //前進 #define koushin OnFwd(OUT_BC,-50); //後進 #define migi OnFwd(OUT_B,-70);OnFwd(OUT_C,70); //右回転 #define hidari OnFwd(OUT_B,70);OnFwd(OUT_C,-70); //左回転 #define ageru OnFwd(OUT_A,-50);Wait(150);Off(OUT_ABC); // ペンを上げる動作 #define sageru OnFwd(OUT_A,50);Wait(170);Off(OUT_ABC); // ペンを下げる動作 task main(){ koushin; //「大」始め Wait(400); Off(OUT_BC); OnFwd(OUT_B,70); Wait(400); Off(OUT_BC); OnFwd(OUT_B,-50);OnFwd(OUT_C,50);//弱く右回転 Wait(400); Off(OUT_BC); zenshin; Wait(400); Off(OUT_BC); koushin; Wait(400); Off(OUT_BC); OnFwd(OUT_B,-50);OnFwd(OUT_C,50);//弱く右回転 Wait(500); Off(OUT_BC); ageru; zenshin; Wait(400); Off(OUT_BC); sageru;//大終わり OnFwd(OUT_BC,70);//「津」始め Wait(700); Off(OUT_BC); koushin; Wait(100); Off(OUT_BC); ageru; hidari; Wait(250); sageru; migi; Wait(500); sageru; hidari; Wait(250); Off(OUT_ABC); Wait(100);//横棒を書く動作 OnFwd(OUT_B,-50); Wait(100); Off(OUT_ABC); OnFwd(OUT_BC,70); Wait(100); Off(OUT_ABC); OnFwd(OUT_B,-50); Wait(100); Off(OUT_ABC); //横棒を書くときにずれるので、向きを揃えるための調整の動作 koushin; Wait(50); Off(OUT_BC); ageru; hidari; Wait(250); sageru; migi; Wait(500); sageru; hidari; Wait(250); Off(OUT_ABC); Wait(100);//横棒を書く動作 koushin; Wait(50); Off(OUT_BC); ageru; hidari; Wait(250); sageru; migi; Wait(500); sageru; hidari; Wait(250); Off(OUT_ABC); Wait(100);//横棒を書く動作 koushin; Wait(50); Off(OUT_BC); ageru; hidari; Wait(400); sageru; migi; Wait(800); hidari; Wait(500); Off(OUT_ABC); Wait(100); koushin; Wait(50); Off(OUT_BC); hidari; Wait(300); migi; Wait(600); Off(OUT_BC);//最後の横棒2本を書く動作 OnFwd(OUT_B,50); Wait(100); Off(OUT_BC); //「津」の右側の最後の縦棒を引くときに機体がずれるので調整する動作 zenshin; Wait(600); Off(OUT_BC);//「津」の右側の最後の縦棒 ageru;//「津」の右側終わり hidari; Wait(900); zenshin; Wait(1000); Off(OUT_BC);//「津」の左側のさんずいの位置に移動する sageru; hidari; Wait(300); migi; Wait(300); ageru zenshin; Wait(200); Off(OUT_BC);//さんずいの1画 sageru; hidari; Wait(300); migi; Wait(300); ageru; zenshin; Wait(200); Off(OUT_BC);//さんずいの1画 sageru; hidari; Wait(300); Off(OUT_BC);//さんずいの1画 「津」終わり }
実際に書いた「大津」
かろうじて、「大津」と読める・・・。