- 追加された行はこの色です。
- 削除された行はこの色です。
下のもんを確認してくだせぇ~
ホームページ作成者スアマとalpha(ハンドルネームです)
見ましょう~
#contents
*課題1:お絵描きロボット [#ra01ba88]
A3用紙に相手の似顔絵を書くロボットを作成する。~
以下のお達しがありその制限の元に作らせていただきました。~
・一人一プログラム!~
・ペン以外はキットしか使用不可!~
・輪ゴムをきるな!~
・後の改良や調整のためにプログラムは可能な部分はサブルーチン、関数、マクロを使え!~
**合体!LEGOロボ! [#w80dcc28]
***基礎ロボ作成 [#uf7892f5]
さて待望のロボ作りです!僕たちが渡されたLegoMindStormsには1,2,3,・・・さまざまな部品がたくさんありました。まあ、二人とも初めてなんで説明書見ながらあくせくと足がキャタピラタイプのを作ってみました〜〜~
ところがいろいろと問題があったのでこの形に落ち着きました。次のペンを持たせるに写真掲載。(相棒のS君力作!)
ところが、ペンを持たせて図形を描かせるには問題点がありました。次の「ペンを持たせる」で詳しく説明します。(相棒のスアマの力作)
***ロボにペンを持たせてみよう〜 [#ebdb8b80]
***ロボとペンは使いよう [#ebdb8b80]
ロボにペンを持たせる段階で一番の考えどころはやっぱりペンの上げ下げですね。まさか一筆書きで似顔絵を書かそうなんていうチャレンジャーなことは(少しだけしか)するつもりありませんでしたよ。まあ、実際やってみると意外とすいすいできて取り付けたわれらがロボの勇姿は下をご覧ください。
#ref()完成前、キャタピラ付、筆高めのロボット
&ref(2008b/A1/課題1右/完成前キャタピラ上部筆.JPG);
ところがペンをつけてみると意外と位置が高い。よって次の変形はこうなりました。
#ref()完成前、キャタピラ付、筆定位置ロボット
&ref(2008b/A1/課題1右/完成前キャタピラ下部筆.JPG);&ref(2008b/A1/課題1右/完成前キャタピラ下部筆b.JPG);
しかしいざ書かせてみると、キャタピラだとガタガタ揺れてそりゃもうギアがずれるわ、まともに円も書けんわで大変で急遽大幅路線変更!!キャタピラから安定性の高いタイヤへとカスタマイズ!ほんとに間に合うのかこれ?
#ref()完成前、車輪付、不安定
&ref(2008b/A1/課題1右/完成ー工夫1.JPG);
まあ、何回も書くのもあれなんで、ぶっちゃけ重心が不安定で前後に行くとペンを持つ側に倒れるので最終形態を見てわかるとおりこうやって安定させました。
#ref()最終形態!完成系
&ref(2008b/A1/課題1右/完成上部写真.JPG);最終形態!完成系
**ロボの頭脳、プログラム [#n2c19ea8]
いよいよプログラミングです!正直な話相手の顔を書くなんて自分の手でも難しいのにロボにやらせるなんて思うわけですよ。愚痴を言っても始まらないので書いてみました。
まずは顔の部分それから相手のめがねと目最後に口。
asdfawdfasdgfasd
#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;
}
完成〜〜〜!!