ホームページ作成者スアマとalpha(ハンドルネームです) 見ましょう~ #contents *課題1:お絵描きロボット [#ra01ba88] A3用紙に相手の似顔絵を書くロボットを作成する。~ 以下のお達しがありその制限の元に作らせていただきました。~ ・一人一プログラム!~ ・ペン以外はキットしか使用不可!~ ・輪ゴムをきるな!~ ・後の改良や調整のためにプログラムは可能な部分はサブルーチン、関数、マクロを使え!~ **合体!LEGOロボ! [#w80dcc28] ***基礎ロボ作成 [#uf7892f5] さて待望のロボ作りです!僕たちが渡されたLegoMindStormsには1,2,3,・・・さまざまな部品がたくさんありました。まあ、二人とも初めてなんで説明書見ながらあくせくと足がキャタピラタイプのを作ってみました〜〜~ ところが、ペンを持たせて図形を描かせるには問題点がありました。次の「ペンを持たせる」で詳しく説明します。(相棒のスアマの力作) ***ロボとペンは使いよう [#ebdb8b80] ロボにペンを持たせる段階で一番の考えどころはやっぱりペンの上げ下げですね。まさか一筆書きで似顔絵を書かそうなんていうチャレンジャーなことは(少しだけしか)するつもりありませんでしたよ。まあ、実際やってみると意外とすいすいできて取り付けたわれらがロボの勇姿は下をご覧ください。 &ref(2008b/A1/課題1右/完成前キャタピラ上部筆.JPG); ところがペンをつけてみると意外と位置が高い。よって次の変形はこうなりました。 &ref(2008b/A1/課題1右/完成前キャタピラ下部筆.JPG);&ref(2008b/A1/課題1右/完成前キャタピラ下部筆b.JPG); しかしいざ書かせてみると、キャタピラだとガタガタ揺れてそりゃもうギアがずれるわ、まともに円も書けんわで大変で急遽大幅路線変更!!キャタピラから安定性の高いタイヤへとカスタマイズ!ほんとに間に合うのかこれ? &ref(2008b/A1/課題1右/完成ー工夫1.JPG); まあ、何回も書くのもあれなんで、ぶっちゃけ重心が不安定で前後に行くとペンを持つ側に倒れるので最終形態を見てわかるとおりこうやって安定させました。 &ref(2008b/A1/課題1右/ゴムからギアへ.JPG,20%);&ref(2008b/A1/課題1右/最後の形aaaaaaa.jpg); **ロボの頭脳、プログラム [#n2c19ea8] いよいよプログラミングです!正直な話相手の顔を書くなんて自分の手でも難しいのにロボにやらせるなんて思うわけですよ。 ***エントリーナンバー1 [#h0c9d615] 愚痴を言ってても始まらないのでとりあえず書いてみましょう。~ ―――と、いうわけでできたのがこれ。~ 前進、後退、右回転、左回転、ペンを離す、ペンを押し付ける、その場で回転、直角に左右、60°で左右を省略。これでだいぶ #define fwd(time) OnFwd(OUT_A+OUT_C); Wait(time); Off(OUT_A+OUT_C); //前進time分 #define back(time) OnRev(OUT_A+OUT_C); Wait(time); Off(OUT_A+OUT_C); //後進time分 #define right(time) OnRev(OUT_A); OnFwd(OUT_C); Wait(time); Off(OUT_A+OUT_C); //time分右回転 #define left(time) OnFwd(OUT_A); OnRev(OUT_C); Wait(time); Off(OUT_A+OUT_B); //time分左回転 #define penup OnFwd(OUT_B); Wait(5); Off(OUT_B); //ペンを浮かす #define pendown OnRev(OUT_B); Wait(5); Off(OUT_B); //ペンを押し付ける #define circle OnFwd(OUT_A); OnRev(OUT_C); Wait(200); Off(OUT_A+OUT+C); //360°回転する #define rightq OnRev(OUT_A); OnFwd(OUT_C); Wait(50); Off(OUT_A+OUT_C); //90°右回転 #define leftq OnFwd(OUT_A); OnRev(OUT_C); Wait(50); Off(OUT_A+OUT_B); //90°左回転 #define rightsixty OnRev(OUT_A); OnFwd(OUT_C); Wait(33); Off(OUT_A+OUT_C); //60°右回転 #define leftsixty OnFwd(OUT_A); OnRev(OUT_C); Wait(33); Off(OUT_A+OUT_B); //60°左回転 おお、完成した。ではいよいよテスト。~ 結構自信作なんだ。一発はありえないと思うけど、いい感じになるんじゃないか?~ じゃあ、勢い込んでやってみよ〜~ task main() { pendown; //顔の輪郭を描いています circle; back(8); //メガネのフレーム中央線 penup; back(16); pendown; back(4); penup; back(16); pendown; back(8); penup; rightq; //下側線の準備 fwd(4); leftq; fwd(8); pendown; //メガネフレーム下側線 fwd(16); penup; fwd(4); pendown; fwd(16); penup; fwd(8); leftq; //上側線の準備 fwd(8); rightq; back(8); //メガネのフレーム上側線 pendown; back(16); penup; back(4); pendown; back(16); penup; back(8); fwd(28); //下唇準備 rightq; back(2); left(17); pendown; //下唇 rightsixty; penup; fwd(28); //上唇準備 leftsixty; pendown; //上唇、口完成 back(28); penup; fwd(28); leftsixty; fwd(28); right(67); fwd(2); rightq; fwd(19); leftq; back(19); pendown; //メガネフレーム縦a back(8); penup; fwd(8); leftq; fwd(16); rightq; pendown; //メガネフレーム縦b back(8); penup; fwd(8); leftq; fwd(2); rightq; pendown; //メガネフレーム縦c back(8); penup; fwd(8); leftq; fwd(16); rightq; pendown; //メガネフレーム縦d back(8); penup; } ・・・・・・ナニコレ?~ 人の顔にさえなってません。思いっきりぬか喜びです、はい。~ 気を取り直してもう一度。~ &ref(2008b/A1/課題1右/へたくそ.jpg,30%); 今度こそ完成か?――この展開でもう一度とかだったらいやになるかも。語ってないけどチェックでいろいろ大変だったんだから・・・~ 気を取り直して今度こそ!!~ ***エントリーナンバー2 [#r57aaf31] こっちは相方のスアマのプログラミング。~ ここからはスアマにバトンタッチだ。~ **工夫にGO! [#db761990] とりあえず二人でがんばった工夫点とかを写真とか文章でいい感じにまとめようかと~ まあ、ここまできたら最後まで付き合ってやってください。 &ref(2008b/A1/課題1右/工夫2.JPG); 後輪代わり。実はこのロボ、二つしかタイヤがないというつくり。~ 不安定なのでこれで代わりにバランスをとってるが意外な問題点がこの後浮上した。~ &ref(2008b/A1/課題1右/工夫1.JPG); 実はこれがさっきの後にできた問題点を改善した工夫。~ 走らせて見てようやくわかったのだが、前に走らせて急に止まったり、逆走したりすると前のめりになって、前にも支えが必要だという結論に達した。~ 左右でモーターの速さが違うのにも苦労した。~ ペンの上下のタイミングをどうすればわからなくて描けてなかったり、逆にペン先を押しつぶしそうなほど紙に押し付けたりしてしまった。~ 最初はゴムで回転を伝達していたがペンを上下するのに使うこまごまとした動きに向いていなくて、ギアに変えるのに苦労した。~ 最初に設定されている速さが速過ぎて、ペンで書くのがついていけていない~ 等等、プログラミング関係で苦労した点は多々あり、列挙していけばきりがないのでここで打ち止めにします。エンドロールまであと少し。~ *締めに一言 [#ndff0e4d] ***<スアマ>から [#s4823d1b] ***<alpha>から [#zac98a66] とりあえずロボットを作ってるときが楽しかった。でもプログラミングがなかなかできないのに苛立った。~ いろいろ考えながら実践していき自分なりの正解に行き着くのはとても新鮮な体験だった。~ とりあえず最後にしゃれで作ったロボットです。~ &ref(2008b/A1/課題1右/ロボ君.JPG,75%); *Shall We コメント? [#uaa16f23] #comment