#contents #counter * 作り主 [#ud2b3ee0] &size(20){''あんぜりか&たけぽん''}; * 目的 [#qd96ef96] -LEGO 社の RISの細かい部品を組み立てて、8bit CPUを積んだコントローラ (RCX 2.0)を心臓とするロボットキットを完成させる。 -実際にNQC(Not Quite C)を使って簡単なプログラムを組んでみる。 -最終目的として字を書けるロボットを創る。 * ロボットの紹介 [#g3fd0b52] |BGCOLOR(orange):&ref(2007a/A6/課題1左/S3700159.JPG,40%,全体図);| *** &size(25){名前:ピロシキ号};&heart; [#q41546c8] このロボットは、2人の汗と涙の結晶の子供で、まだまだ成長途中の有望株です☆☆ *** 詳細 [#c8985126] 車のbodyは、基本的なトラクター型を使用しています。初めは、キャタピラー型を使用していましたが、文字を書くにあたって、小回りが効かなかった為、トラクター型を使用しました。アーム部分は、最初はクワ型を使用していましたが、モーターの威力があまりにも強かった為、歯車を付け足して威力を軽減しました。 * プログラム [#jdc03806] **「井」 [#i8641c95] #define penmoving 40 sub pen_down() { OnFwd(OUT_B); Wait(penmoving); Off(OUT_B); Wait(50); } sub pen_up() { OnRev(OUT_B); Wait(penmoving); Off(OUT_B); Wait(50); } task main() { pen_down(); OnFwd(OUT_A+OUT_C); // first stroke Wait(100); // length of first stroke Off(OUT_A+OUT_C); Wait(50); pen_up(); OnRev(OUT_A); // second stroke preparation OnFwd(OUT_C); Wait(15); // turning angle OnRev(OUT_C); // back Wait(130); OnFwd(OUT_A); Wait(15); // make a right angle Off(OUT_A+OUT_C); Wait(50); pen_down(); OnFwd(OUT_A+OUT_C); // second stroke Wait(130); Off(OUT_A+OUT_C); Wait(50); pen_up(); OnRev(OUT_A+OUT_C); // third stroke preparation Wait(110); OnRev(OUT_C); OnFwd(OUT_A); Wait(85); // turning in right angle OnRev(OUT_A+OUT_C); // back to more than first stroke Wait(100); Off(OUT_A+OUT_C); Wait(50); pen_down(); OnFwd(OUT_A+OUT_C); // third stroke Wait(100); Off(OUT_C+OUT_A); Wait(50); pen_up(); OnFwd(OUT_A); //fourth stroke preparation OnRev(OUT_C); Wait(20); // turning angle OnRev(OUT_A); // back Wait(130); OnFwd(OUT_C); Wait(20); // make a right angle Off(OUT_A+OUT_C); Wait(50); pen_down(); OnFwd(OUT_A+OUT_C); // fourth stroke Wait(130); Off(OUT_A+OUT_C); Wait(50); OnRev(OUT_B); Wait(penmoving); Off(OUT_B); //pen up } ** 「長」 [#h859c434] #define penmoving 40 #define go_hud 100 // define on 100s coz it makes moving simple void pen_down() { OnFwd(OUT_B); Wait(penmoving); Off(OUT_B); Wait(50); } void pen_up() { OnRev(OUT_B); Wait(penmoving); Off(OUT_B); Wait(50); } void go_right() { OnFwd(OUT_A+OUT_C); Wait(go_hud); Off(OUT_A+OUT_C); Wait(50); } void go_left() { OnRev(OUT_A+OUT_C); Wait(go_hud); Off(OUT_A+OUT_C); Wait(50); } void turn_right() { OnRev(OUT_C); Wait(81); } void turn_left() { OnRev(OUT_A); Wait(81); } task main() { pen_down(); // 1 stroke go_right(); pen_up(); go_left(); turn_right(); pen_down(); // 2 stroke OnFwd(OUT_A+OUT_C); Wait(70); Off(OUT_A+OUT_C); Wait(50); pen_up(); OnRev(OUT_A+OUT_C); // move for 3 stroke Wait(50); Off(OUT_A+OUT_C); Wait(50); turn_left(); pen_down(); //3 stroke go_right(); pen_up(); OnRev(OUT_A); // move for 4 stroke OnFwd(OUT_C); Wait(15); OnRev(OUT_C); Wait(60); OnFwd(OUT_A); Wait(15); Off(OUT_A+OUT_C); Wait(50); pen_down(); // 4 stroke go_right(); pen_up(); go_left(); // move for 5 stroke OnRev(OUT_A); OnFwd(OUT_C); Wait(15); OnRev(OUT_C); Wait(30); OnFwd(OUT_A); Wait(15); Off(OUT_A+OUT_C); Wait(50); pen_down(); // 5 stroke OnFwd(OUT_A+OUT_C); Wait(130); // most long line that in the middle of character pen_up(); OnRev(OUT_A+OUT_C); // move for 6 stroke Wait(150); turn_right(); pen_down(); // 6stroke OnFwd(OUT_A+OUT_C); Wait(60); pen_up(); OnRev(OUT_A); Wait(200); //trianle pen_down(); // 7 stroke OnFwd(OUT_A+OUT_C); Wait(80); // it makes a triangle pen_up(); OnRev(OUT_C); OnFwd(OUT_A); Wait(15); pen_down(); // last stroke OnRev(OUT_A); Wait(20); OnRev(OUT_A+OUT_C); pen_up(); // it makes a cross line with 7stroke } * 苦労した点 [#rf9f3e8d] **ロボットに関する点 [#o6805ded] ロボットをつくりあげるにあたっては、正直玩具を作るっていう感覚が強かったです。 しかし、その部品の細かさ、繋いだ時の完成間によって自分が本当に目的がある物体を 作るんだっていうことを実感し始めました。 ロボットは作ったものの、動かしてみたら地面やその時の部品の小さい揺れとかで 毎回調整しなおさなければなりませんでした。 ***ロボットキット編 [#jc71421a] 大変だったのは、''アームを動かすモーターが想像以上に強力''だった点。本当に悩まされた。白い歯車を入れないと、アームがものすごい勢いで上げ下げを繰り返し、ロボットキットを壊さんばかりの勢いだった…っていうのは少しおおげさかもしれないが、とりあえずものすごい勢いだった。それを白い歯車をを噛ませることにより、多分&color(red,){40%ぐらいの出力ダウンに成功};し、アームの動きも滑らかになった。 |CENTER:COLOR(gray):''☆頑張ったモーター部分☆''| |BGCOLOR(red):&ref(2007a/A6/課題1左/S3700156.JPG,30%,モーター);| ***プログラム編 [#vcd8b377] -井 ; 漢字の書き方の順番に気を付けて、アームの動きが右から始まるか、左から始まるかを決めました。文字の見栄えを良くするため、画と画の間隔が均等になるようにモーターが回る時間を一定にしました。井という字はそんなに複雑ではないため、sub命令はモーターBの上下動きだけにして、プログラム自体はそんなに長くはならなかったです。でも、プログラムを組む時はちゃんと紙で一画の長さと間隔を計算して数字を入れましたが、実際にやってみると毎回少しずつ字のバランスがずれて、ロボットが動いてる地面の環境によってでも、すこし訂正が必要な場合がありました。 -長 ; 最初に長の字を書くための動きを考えるとき、長は井より一定のルールでくめる動きが多いのに気づきました。長を二等分して考えてみると、真ん中の画を基準に、上半分は単純な構造ですが、下半分は三角形を描く時の場合を応用し、二つの三角形を足し合わせた構造と考える工夫が必要でした。上の字と同様、理論値と実際の動きにズレが生じ、その補正に手間取りました。上半分は関数とdefineを使ってソースコードを美しくすることができました。 **制作にあっての現実的な苦労 [#k17b3ccb] 授業中はもちろん抜かりなくしっかり出ましたが、ほかの時間に二人で会って作業するのはなかなか難しかったです。お互い時間が合わなくて夜遅くにしか会えない状態で問題を解決していくのは、とても大変でしたが、その分密の濃い時間を費やすことができたと思います。 *反省点 [#idb1e5dd] ロボットのアーム部分と本体の接続部分が少し不安定な点。 など「もっと時間があれば…。」と思う部分が残ってしまったところは次回に生かしたい。 *先生、TAの方々のコメント [#y5c1add3] &color(blue,){何かありましたら、コメントの方お願いしますm(_ _)m}; -お疲れ様でした。感想等の部分は具体的でよいのですが、写真を載せるとさらによかったと思います。 -- [[ヒロヤ]] &new{2007-05-24 (木) 00:59:01}; -プログラムの解説、コメントをもう少し詳しくつけて、ロボがどういう風に動いているかの説明が欲しいですね。 -- [[まいける(TA)]] &new{2007-05-24 (木) 08:07:39}; -コメントありがとうございます。まだまだ未熟者ゆえ、。日々精進していきます。 -- [[製作者]] &new{2007-05-25 (金) 00:31:10}; -写真に表題をつける、文字を強調する、など見やすくなっていると思います。 -- [[ヒロヤ]] &new{2007-06-06 (水) 22:16:39}; #comment &color(red,){ちょっとだけ更新しました(@_@;)};