目次

課題について

詳しくは課題(2017a/Mission1)を参照。 松本での大学生活を表す一文字ということで、これからの大学生活でいろいろなことを貪欲に求めていきたいと思い、「求」という字を選んだ。

ロボット本体

車体部分

青丸で示したペン部分が赤矢印のような上下運動の際に、ペンがロボット本体とぶつからないように縦長の構造にした。コントローラー本体が後方のキャスターの上になると動きが悪くなるので、横向きに取り付けできるだけ前方に取り付けた。ペン部分はロボット本体の中心に取り付けてあるモーターで動かす。 全体写真.jpg 全体の感じ.jpg

ペン部分

ペンが紙に触れる際に、タイヤとタイヤの中心(下の写真にはタイヤの中心と示す)で紙に触れるように設計した。その理由は左タイヤと右タイヤを同時にそれぞれ反対方向に回転させれば、車体の回転の際、紙から見たペンの位置のずれが軽減されるからである。 ペン部分.jpg タイヤの回転図.jpg

文字について

今回はプログラミングを簡単にするため以下の写真に示す書き順にした。 なお、この字は私が手書きしたものでありロボットが書いた字ではない。

書き順.jpg

プログラム

改良や調整をしやすくするため、一画目から七画目までをサブルーチンでプログラムした。 ペンを上げたり下ろしたりするような単純な作業もサブルーチンでプログラムした。 ただし、前進や回転などはモーターを回す時間が微妙に異なるためサブルーチンでプログラムすることはできなかった。なお、一画目というのは一画目を書き終えて二画目の書きはじめの位置まで移動しペンを下ろした状態のことをいうとする。二画目から六画目までも同様である。

sub penup () //ペンを上げる
{
    OnRev(OUT_A,20);
    Wait(400);
    Off(OUT_A);
}

sub pendown () //ペンを下ろす
{
    OnFwd(OUT_A,20);
    Wait(400);
    Off(OUT_A);
}

ここの一画目を書き終えたあとに、二画目を紙に対して垂直にかけるように回転させることが大変難しかった。電池が消耗してくるたびに垂直にならなくなってしまい、ここがずれると全体的にバランスが悪くなるので一番気を使った。

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();
}

三画目にどの角度で入るかをこの時点で確定させなければならなかった。

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();
}

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();
}

ここで長めに直線を引くことで全体のバランスをとった

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();
}

sub gokakume () //五画目
{
    OnFwd(OUT_BC,30);
    Wait(200);
    Off(OUT_BC);
    penup();
    OnFwd(OUT_BC,30);
    Wait(500);
    Off(OUT_BC);
    pendown();
}

細かい微調整をするためにここのプログラムがとても長くなってしまった

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();
}

sub nanakakume () //七画目
{
    OnFwd(OUT_BC,30);
    Wait(400);
    Off(OUT_BC);
    penup();
}

task main ()
{
    ikkakume();
    nikakume();
    sankakume();
    yonkakume();
    gokakume();
    rokkakume();
    nanakakume();
}

まとめ

結果

なんとか読めるレベルまでは達したと思う。 「求」という字の点の角度や長さやうちはじめの場所をとても意識した。 赤丸で示したところは、線がたくさん重なり読みにくくなってしまった。 青丸で示したところは、左を長くしたほうが字がきれいに見えると思い、長くしたが余りにも長すぎてしまった。

結果.jpg

感想

ペンに当たらないようにするために全体的にロボットを高く設計した結果、重心が高くなりすぎてしまい回転が安定しなくなってしまうという症状が出た。数値から計算して理論通りにプログラミングしてもそのときの電池残量などによって誤差が生じてしまい、しっかりとそのときの状況に合わせたプログラミングが必要であると感じた。私は将来ロボットエンジニアになりたいと考えている。今回人生で初めてプログラミングをしたのだが本当にいい経験になったと思う。将来ロボットのプログラミングをどういったものを使ってやるのかは分からないため、技術的に将来役に立つかは分からない。しかし、あきらめずに何度も試行錯誤し、反省点を次に活かすなどといったロボット制作の本質的な部分がぶれることはない。今回学んだことを次につなげていきたい。


添付ファイル: fileタイヤの回転図.jpg 213件 [詳細] file全体写真.jpg 200件 [詳細] file全体の感じ.jpg 242件 [詳細] file書き順.jpg 213件 [詳細] fileペン部分.jpg 267件 [詳細] file結果.jpg 220件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-06 (木) 00:45:53