目次
#contents

*メンバー [#ce02b56c]
園部優花:私です。プログラムは自分で頑張って組み立てて、なんとか字を書かせることができました。

柳澤曙太:相方です。ロボットの組み立てはほとんど彼がやってくれました。

*課題の内容 [#dbdb5561]
ロボットにペンを持たせて、自分の名前の漢字の中から7画以上のものを選び、それを書くプログラムを作り、ロボットに字を書かせるという課題でした。

*ロボットの説明 [#pea5279c]
私たちのペアは基本のロボットの形を変えずに、ペンを持たせる部分を新たに付け加えるという形にしました。ペンを持たせる部分のみを作るだけだったので、早くロボットを完成させ、プログラムを作る作業に入ることができました。ペンを持たせる部分はなるべくプログラムが簡単になるように、タイヤのちょうど真ん中にくるように作りました。

※写真は撮り忘れてしまったため、掲載することができませんでした。
#ref(2014b/Member/yuka/Mission1/書道ロボット1.jpg,40%)
#ref(2014b/Member/yuka/Mission1/書道ロボット2.jpg,40%)

*プログラム [#y104c8d6]
今回私は「花」という漢字を書くプログラムを作ることにしました。最初に作ったプログラムはロボットと取り付けたペンとの距離を考えずに、タイヤの中心が「花」という漢字を辿るプログラムにペンを上下させるプログラムを加えただけだったので、初めて動かしてみたときは全く「花」の字になっていませんでした。

そこで、タイヤからペン先までの距離を測り、その距離を考慮してロボットの進む距離を変えたりしたプログラムを作りました。この作業はロボットを少しずつ動かしながらずれが生じたらその都度微調整を加えていったので時間がかかりました。

また、ロボットを回転させることも大変でした。プログラムをより簡単にするために私は回転させる角度は45度、90度、135度のみとしたのですが、それでも計算だけではどうしてもずれてしまう部分があり、その部分は定義できずに微調整して直接回転する時間を入れるしかありませんでした。

そうしてできたプログラムが以下のものです。

-プログラムで使う定義
 #define SPEED 30 //モーターを動かす速さ
 #define TURN_TIME45 1200 //45度回転する
 #define TURN_TIME90 1900 //90度回転する
 #define TURN_TIME135 3000 //135度回転する
 #define go_straight(t) OnFwdSync(OUT_BC,SPEED,0); Wait(t); Off(OUT_BC); //前進する
 #define go_back(t) OnRevSync(OUT_BC,SPEED,0); Wait(t); Off(OUT_BC); //後進する
 #define turn_right(t) OnFwd(OUT_B,SPEED); Wait(t); Off(OUT_B); //時計回りに回転する
 #define turn_left(t) OnFwd(OUT_C,SPEED); Wait(t); Off(OUT_C); //反時計回りに回転する
 #define pen_up RotateMotor(OUT_A,-SPEED,180); Off(OUT_A); //ペンを上げる
 #define pen_down RotateMotor(OUT_A,SPEED,180); Off(OUT_A); //ペンを下げる

-「花」のくさかんむりの部分
 go_straight(1800); //最初はペンを下げた状態にして書き始めます
 pen_up;
 go_back(1400);
 turn_right(TURN_TIME90);
 go_back(1250); //タイヤからペンまで距離があるため、少しロボットを後退させます
 pen_down;
 go_back(500);
 pen_up;
 turn_left(TURN_TIME90);
 go_straight(250);
 turn_right(TURN_TIME90);
 go_back(1000); //タイヤからペンまで距離があるため、少しロボットを後退させます
 pen_down;
 go_back(500);
 pen_up;

-「花」のイの部分
 turn_right(TURN_TIME135);
 go_back(1100); //タイヤからペンまで距離があるため、少しロボットを後退させます
 pen_down;
 go_straight(800);
 pen_up;
 go_back(1050);
 turn_left(3600);
 go_back(2200); //タイヤからペンまで距離があるため、イの2画目を1画目にくっつけるためにロボットを後退させます
 pen_down;
 go_back(1000);
 pen_up;

-「花」のヒの部分
 turn_left(TURN_TIME45);
 go_straight(1200);
 pen_down;
 go_back(800);
 pen_up;
 go_straight(500);
 turn_right(TURN_TIME45);
 go_back(700); //タイヤからペンまで距離があるため、少しロボットを後退させます
 pen_down;
 go_back(1200);
 pen_up;
 go_straight(500);
 turn_left(TURN_TIME90);
 go_back(750);
 pen_down;
 go_back(800);
 pen_up;
 go_straight(1000);
 turn_right(TURN_TIME90);
 go_back(1000);
 pen_down;
 go_back(600);
 pen_up;

このプログラムによって書けた「花」がこちらです。

#ref(ロボティクス 花.png)

*反省と感想 [#h0b17c50]
プログラムの本体はできるだけ簡単にしなければならなかったのに、私の現在の能力では、これ以上簡単にすることができなかったのは反省点です。もっと関数などを使っていけばより簡単になると思うので、関数等のプログラムについてもう一度学びなおして次回からは使っていけるようになりたいです。タイヤとペンとの距離を考えながらの微調整やロボットを回転させることはどれだけ調整しても少しのずれが生じてしまったので「花」だと認識できるような文字を書くことは大変でしたが、全く形になっていなかったものが少しずつ調整するごとに形になっていく過程はとても面白く、最後に字が完成した時にはとても感動することができました。次回の課題までにプログラミングの腕を上げて、よりスムーズにプログラムを作れるようになりたいです。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS