#contents *課題1 似顔絵を描くロボット [#d05bb757] ペアの人の似顔絵を描くロボットを作成する。~ ~ **ロボットの作成 [#c30ebcf4] ***設計図どうりにロボットを組み立てる [#ha826f1e] 小さい部品に気をつけながら、設計図どうりに組み立てた。 #ref(2008a/A1/課題1右/NO6.JPG) ***ロボットにペンを取り付ける [#cb13da09] 次に取り掛かったのは似顔絵を描くためのペンを取り付けること。''取りあえずペンを固定する方針''で進めたところ一筆では描けないことが判明。構造を変えて''ペンの上げ下げができるような仕組みを作る方向''で進めた。思考錯誤の末、タイヤでペンをはさみモーターの回転によってタイヤをまわし、ペンを上下させることに成功した。~ #ref(2008a/A1/課題1右/NO5.JPG) ボールペンは先が尖っていて線を描くときに何度か紙がやぶけたので、ペンをマジックペンに変更。~ 後は、走るたび若干ずれるタイヤと、触るたびに壊れるロボを補強して無事完成。~ ~ **プログラムの作成 [#kcb09b5c] ***似顔絵を描くプログラム [#vc84df70] まず、題材となる似顔絵を二人で描きあったところ以下のような二作品ができあがった。 #ref(2008a/A1/課題1右/NO3.JPG) 見事にかぶりました・・・。~ そこで違いを出すため、輪郭を円と四角形で区別することに。~ 似顔絵をもとに以下のようにプログラムを作成した。~ #define TURN_TIME 86 #define TURN_TIME45 38 #define turn_left OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Float(OUT_A+OUT_C);Wait(15) #define turn_right OnRev(OUT_A);OnFwd(OUT_C);Wait(TURN_TIME);Float(OUT_A+OUT_C);Wait(15) #define turn_180 OnRev(OUT_C);OnFwd(OUT_A);Wait(172);Float(OUT_A+OUT_C);Wait(15) #define turn_left45 OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME45);Float(OUT_A+OUT_C);Wait(15) #define turn_right45 OnRev(OUT_A);OnFwd(OUT_C);Wait(TURN_TIME45);Float(OUT_A+OUT_C);Wait(15) #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Float(OUT_A+OUT_C);Wait(15) #define go_back(s) OnRev(OUT_A+OUT_C);Wait(s);Float(OUT_A+OUT_C);Wait(15) #define pen_up OnRev(OUT_B);Wait(6);Off(OUT_B) #define pen_down OnFwd(OUT_B);Wait(6);Off(OUT_B) #define circle repeat(38){OnFwd(OUT_A);Wait(20);OnFwd(OUT_C);Wait(5);Off(OUT_C);}Float(OUT_A+OUT_C) プログラムをわかりやすくするために、各動作を以下のように定義した。~ ~ TURN_TIME : 90度曲がる時の時間~ TURN_TIME45 : 45度曲がるときの時間~ turn_left : 左に90度曲がる~ turn_right : 右に90度曲がる~ turn_180 : Uターンする~ turn_left45 : 左に45度曲がる~ turn_right45 : 右に45度曲がる~ go_straight(t) : 100分のt秒間まっすぐ進む~ go_back(s) : 100分のs秒間後ろに進む~ pen_up : ペンを上げる~ pen_down : ペンを下げる~ circle : 円を描く~ ~ これを使い以下のプログラムが完成した。~ ~ task main() { circle; //輪郭の円を描く turn_left; //メガネの部分を描き始める go_straight(22); repeat(2){ //メガネの上部の四角形部分を書く turn_right; go_straight(10); turn_left; go_straight(22); turn_left; go_straight(10); turn_right; go_straight(22); } turn_180; go_straight(22); repeat(2){ //メガネの下部の四角形部分を書く turn_right; go_straight(10); turn_left; go_straight(22); turn_left; go_straight(10); turn_right; go_straight(22); } //メガネを描き終わる turn_left45; //口を描き始める pen_up; go_back(60); turn_right45; pen_down; go_back(40); //口を描き終わる Off(OUT_A+OUT_C); } ***ここで最大の問題が・・・ [#z6a8cb2a] ペンが重心とずれているため、方向変換の際に余分な線ができてしまう。 #ref(2008a/A1/課題1右/NO2.JPG) これをなくすために案を出し合った結果、以下のようなプログラムをつかって修正することができた。 sub turn_ls() //左に曲がるときの誤差を修正 { pen_up; go_back(3); turn_left; go_straight(3); pen_down; } sub turn_rs() //右に曲がるときの誤差を修正 { pen_up; go_back(3); turn_right; go_straight(3); pen_down; } sub turn_180s() //Uターンするときの誤差を修正 { pen_up; turn_180; go_straight(6); pen_down; } 後はこれをもとにして~ turn_left → turn_ls()~ turn_right → turn_rs()~ turn_180 → turn_180s()~ というふうに書き換えるだけ。~ そうして描けた似顔絵は・・・~ #ref(2008a/A1/課題1右/NO1.JPG) 無事成功!~ ~ **工夫・苦労した点 [#ecbb4c50] -工夫した点 ・ミリ単位で長さを計り、それにもとづいてロボットを動かす秒数を計算した。~ ・車体がふらつかないように前後につっかえ棒をとりつけた。~ ・車体を安定させるため、重りとしてタイヤをとりつけた。~ ・用紙に合わせて円を大きくした。 #ref(2008a/A1/課題1右/NO7.JPG) -苦労した点 ・なかなかペンが固定できなかった。~ ⇒ペンに輪ゴムをまきつけ、摩擦を強くした。~ ⇒タイヤを二個使い左右に動かないよう固定した。~ ・モーターを1個だけ使ってペンを上下させることが、回転の方向を考えたり、ペンの太さに合うような調度いい隙間を作らなければならなかったりしてとても難しかった。~ ⇒歯車を駆使し、同じ方向に回すことに成功した。~ ・曲がるときの誤差の修正に2日かかった。~ ⇒過去のレポートを参考にし、誤差の距離を何回も測ってなおした。~ **感想 [#l81f68fa] ・始めた当初は3時間程度で終わると思って油断していたら、全然終わらなかった。ロボを作る過程は非常に楽しくて時間が立つのを忘れたが、警備員のおじちゃんに入り口を閉められ、学校から出ることができなくなってしまったのにはちょっとびびった。ロボを作っているうちに、数理科の計算能力と機械システム科の物理の知識がいきてきて、はっきり言っていいコンビだなぁと思った。 ''(スギウラ)'' ・やればやるほど問題点がでてきた気がする。気がついたら1、2時間経っていたり作業は楽しかったがこんなに時間がかかるとは思わなかった。最後に集まったときロボがバラバラになり原型が分からなくなったのは焦った。''(キリハラ)'' ***コメントをお願いします [#i3aec133] #comment 良かった点 +課題をきちんとこなせるようなロボット、プログラムを工夫して作れています。 +ホームページも書くべきことをきちんと書けています。 +特に、どんな問題点があってそれをどう解決したかが説明されていて良かったです。 改善できる点 +工夫した点が文だけではわかりにくいので、図や写真を用いるといいと思います。写 真に説明を加えられるソフトもあります。 +説明書通りの車体ではなく、こまわりや汎用性を工夫したオリジナルな車体を作って みればさらによいロボットができると思います。 I