[[2015a/Member]]
*書道ロボットR8班目次 [#p76987ba]
#contents

*課題内容 [#yf745b60]
今回の課題は「書道ロボット」。 Mindstorms Robotics Invention System(以下RIS)を用いて自分の名前に含まれる漢字(7画以上)を書けという内容だった。

今回は自分の字の「忠」を選択した。

**難点 [#b699b243]
+縦線と横線の書き分け
+小さすぎずに文字を書くこと
+斜めの線
+全体のバランス
+見やすいプログラムで作成すること

*ロボットの説明 [#jaea621d]
難点1を克服するためにも、縦、横、ペンの操作と、3つのモーターを用いて役割を分担する方法を採用した。

そのため、今回作成したロボットは大まかに分けて4つの部分から成り立つ。

**車体部分 [#i06cb4a9]
&ref(./body3.jpg,150%);
&ref(./body1.jpg,150%);
&ref(./body2.jpg,150%);

***ポイント [#ccc772c2]
-モーターを1つ使い、縦移動を担当。
-左右のタイヤをつなぐことによって縦方向の安定した走りを実現。
-RCXを左端に乗せることによりアームを取り付けた際にバランスを維持。
-後輪タイヤ横のL字ブロックでアーム土台を固定。

**アーム [#uf1c3011]
&ref(./arm1.jpg,150%);
&ref(./arm3.jpg,150%);
&ref(./arm4.jpg,150%);

***ポイント [#x40ca998]
-モーターを1つ使い、ペンの上下を管理。
-モーターに歯の数の多いギアをつないでペンの上下するスピードを低下。
-横に長い構造で可動範囲を増やすことによって難点2を克服。
-サインペンをテープで巻いて固定。

**アーム土台 [#x71fd83d]
#ref(./arm_base1.jpg,150%);

***ポイント [#d16a356e]
-バランスの取れる上限までチューブを使い、アームの上下のブレを軽減。
-チューブの凹凸の方向をアームの進行方向と平行にすることによってアームの動きを邪魔しない。
-ストッパーをして強度の向上。

**アーム稼働モーター [#d479a392]
&ref(./arm_motor1.jpg,150%);
&ref(./base_motor1.jpg,150%);
&ref(./base_motor2.jpg,150%);

***ポイント [#c1548d7b]
-モーターを1つ使い、ペンの横移動を担当。
-左右からブロックで挟むことにより、アームの左右のブレをなくす。
-ペン稼働モーターの余ったコードを邪魔にならないように括り付ける。
-モーター後方にも添えブロックを置いて安定性とバランス力の向上。

**ドッキング [#deaa30e8]
アーム、アーム土台、アーム稼働モーターを組み合わせることにより下記のものが完成する。

&ref(./docking1.jpg,150%);
&ref(./docking2.jpg,150%);

**完成 [#od8d9ad1]
上記の複合パーツ、車体部分を組み合わせることによって完成。

&ref(./compleat1.jpg,150%);
&ref(./compleat2.jpg,150%);
&ref(./compleat3.jpg,150%);

*プログラムの説明 [#t728cbb3]
**実際のプログラム [#hc9f8d41]
 #define WAIT_TIME 50
 #define go_side(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);
 #define back_side(t) OnRev(OUT_B);Wait(t);Off(OUT_B);
 #define go_length(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);
 #define back_length(t) OnRev(OUT_C);Wait(t);Off(OUT_C);
 #define up_pen OnFwd(OUT_A);Wait(5);Off(OUT_A);
 #define down_pen OnRev(OUT_A);Wait(5);Off(OUT_A);
 #define wait Off(OUT_ABC);Wait(WAIT_TIME);
 
 task main ()
 {
 	down_pen;
 wait;
 	go_side(25);
 wait;
 	back_length(10);
 wait;
 	back_side(25);
 wait;
 	go_length(10);
 wait;
 	up_pen;
 	go_length(7);
 wait;
 	go_side(12);
 wait;
 	down_pen;
 wait;
 	back_length(24);
 wait;
 	up_pen;
 wait;
 	back_side(12);
 wait;
 	back_length(6);
 	down_pen;
 wait;
 	repeat(2)
 	{
 		go_side(1);
 		go_length(3);
 	}
 wait;
 	up_pen;
 wait;
 	go_side(1);
 	go_length(3);
 wait;
 	down_pen;
 wait;
 	back_length(15);
 	go_side(20);
 wait;
 	up_pen;
 wait;
 	go_length(13);
 	back_side(6);
 wait;
 	down_pen;
 wait;
 	back_length(10);
 wait;
 	up_pen;
 wait;
 	go_side(6);
 wait;
 	down_pen;
 wait;
 	go_length(8);
 wait;
 	up_pen;
 }

**使用した関数 [#r95c5073]
 #define WAIT_TIME 50
 #define go_side(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);
 #define back_side(t) OnRev(OUT_B);Wait(t);Off(OUT_B);
 #define go_length(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);
 #define back_length(t) OnRev(OUT_C);Wait(t);Off(OUT_C);
 #define up_pen OnFwd(OUT_A);Wait(5);Off(OUT_A);
 #define down_pen OnRev(OUT_A);Wait(5);Off(OUT_A);
 #define wait Off(OUT_ABC);Wait(WAIT_TIME);

+待機時間を0.5秒に設定。
+ペンをt/100秒右に移動。
+ペンをt/100秒左に移動。
+ペンをt/100秒前に移動。
+ペンをt/100秒後ろに移動。
+ペンを紙から離す。
+ペンを紙につける。
+0.5秒待機。

**1〜3画目 [#o97234ce]
 task main ()
 {
 	down_pen;
 wait;
 	go_side(25);
 wait;
 	back_length(10);
 wait;
 	back_side(25);
 wait;
 	go_length(10);
 wait;
 	up_pen;

***ポイント [#y62c8b38]
-ペンの上下による多少のずれもなくすため、1〜3画目までは一筆書き。
-間に待機を入れることによって、角を際立たせた文字を作成する。

**4画目 [#qe9f0512]
 	go_length(7);
 wait;
 	go_side(12);
 wait;
 	down_pen;
 wait;
 	back_length(24);
 wait;
 	up_pen;

***ポイント [#e6cb3b5b]
-上から大胆に貫くことによって力強い字を描く。
-中として見たときに縦と横の割合を約1:1にすることで、心を足した後でバランスの良い字となる。

**5画目 [#xd0a57f2]
 	back_side(12);
 wait;
 	back_length(6);
 	down_pen;
 wait;
 	repeat(2)
 	{
 		go_side(1);
 		go_length(3);
 	}
 wait;
 	up_pen;

***ポイント [#dcb56a26]
-縦と横の線を待機を入れずに連続で引くことにより、難点3の斜めを描く。
-ペンを右に移動させたほうがしっかりとした字を書けるので、左下からの始動。
-repeat関数を用いて簡略化する。

**6画目 [#t6263c93]
 	go_side(1);
 	go_length(3);
 wait;
 	down_pen;
 wait;
 	back_length(15);
 	go_side(20);
 wait;
 	up_pen;

***ポイント [#pa8b1775]
-5画目と同様待機を入れないことによって斜めを形成。
-横を広くとることによって、力強い字を描く。

**7〜8画目 [#i3b6a362]
 	go_length(13);
 	back_side(6);
 wait;
 	down_pen;
 wait;
 	back_length(10);
 wait;
 	up_pen;
 wait;
 	go_side(6);
 wait;
 	down_pen;
 wait;
 	go_length(8);
 wait;
 	up_pen;
 }

***ポイント [#m9b057af]
-6画目の中に納まるように描くことによってバランスをとる。

**完成 [#jd3c68d0]
#ref(./tyuu.jpg,200%);

*反省 [#vc69d10b]
今回のロボット作成では、ペンを送り出した後の縦の線にぐらつきがあったため補強したかったものの、今度は車体のバランスが悪くなったりと、どこかを直しては、また問題が発生するという事態が多々おこった。まだまだ完璧な筆ロボットには程遠かったが、RISについてよく知ることができたと思う。

役割分担の方法を思いつく前にかなり迷走していたが、LEGOブロックをいじっているうちに突然ひらめくことができた。やはり、目的もなく組み合わせているだけでも何かがわかってくる。LEGOはそんなものなんだなと感じた。

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