「水」とロボットに書かせる

一番最初のロボット

ロボットの写真

どのようにして書道ロボットにしようかチームで考えました。 まず上下式が書きやすいという結論になりましたが、いまいち思いつかなかったので、まずはペンを振り回して書くという 単純なロボットにしました。

移動形式は元々足にしていましたが、話し合いの結果「移動がかなり不便&かなりの誤差が生じるのでは?」ということでタイヤ移動にしました。

最初の方のプログラム

task main()
#define PEN 12
{
OnFwd(OUT_B); 
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(200);
Off(OUT_A+OUT_C);

OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(140);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
Wait(170);
Off(OUT_A+OUT_C);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(105);
Off(OUT_A+OUT_C); 

OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(50);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);

OnFwd(OUT_A);
OnRev(OUT_C);
Wait(50);
Off(OUT_A+OUT_C);

OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(110);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B); 

OnFwd(OUT_A);
OnRev(OUT_C);
Wait(170);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
Wait(260);
Off(OUT_A+OUT_C);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(170);
Off(OUT_A+OUT_C);

OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(90);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B); 

OnFwd(OUT_C);
OnRev(OUT_A);
Wait(20);

OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);
}

前からみた写真です

ロボットの写真

ボールペン版 かっこいい後ろ姿です。

ロボットの写真

なんとか「水」書けました!!うまくいけば、かなり普通の「水」です(1画目が直線なのは気にしないでください)。 ただし、少し問題があります。それはペンを回転させて「書く」「書かない」を調節しているため、最初のペンの「角度」「高さ」によって誤差が生じるため、「水」っぽくないこともちらほらです!  「では回転式を止めて、上下式にすればいいじゃないか!」とつっこみたくなるところですが、そうすると、線がかなり真っ直ぐの直線になるため、その作戦は遂行しませんでした。微妙にくにゃくにゃしている方が「水」っぽい!ということに気づいてしまった僕たちはその感性を大切にして、あくまで回転式を貫きました(半分手抜きのようにも思えますが)!!  また全く関係ありませんが、このロボットの腕の振りを長くするとゲームFF7のクラウドというキャラの決めポーズみたいにペンをまわすというかっこよさに魅かれたからという理由もあります。  話は戻りますが、もちろんその後上下式の装備も作りました。こちらもシンプルながらしっかりした作りでした。

最終プログラム

task main()
#define PEN 12
{
OnFwd(OUT_A+OUT_C);
Wait(6);
Off(OUT_A+OUT_C);
OnFwd(OUT_B); 
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(144);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);

OnFwd(OUT_A);
OnRev(OUT_C);
Wait(162);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
Wait(150);
Off(OUT_A+OUT_C);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(80);
Off(OUT_A+OUT_C);

OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(58);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);

OnRev(OUT_A+OUT_C);
Wait(45);
Off(OUT_A+OUT_C);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(20);
Off(OUT_A+OUT_C);

OnFwd(OUT_A+OUT_C);
Wait(40);
Off(OUT_A+OUT_C);

OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnRev(OUT_A+OUT_C);
Wait(80);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);

OnFwd(OUT_A);
OnRev(OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
Wait(150);
Off(OUT_A+OUT_C);

OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnRev(OUT_A+OUT_C);
Wait(63);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);
OnRev(OUT_A+OUT_C);
Wait(5);
Off(OUT_A+OUT_C);

OnRev(OUT_A+OUT_C);
Wait(25);
Off(OUT_A+OUT_C);

OnFwd(OUT_A);
OnRev(OUT_C);
Wait(75);

OnFwd(OUT_A+OUT_C);
Wait(60);       
Off(OUT_A+OUT_C);
OnFwd(OUT_B);
Wait(PEN);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(PEN);
Off(OUT_B);
}

苦戦したこと

大まかな形は早々から書けました!しかし2画目の「フ」の部分がなかなか書けませんでした。というのもペンが車体の後ろについているため、ただ単に回転するだけだと、きちんと曲がり角がくっつかないのです。しかし、ペンを上げて数秒戻ってから回転させることで、なんとか微妙につながりました。

右半分は練習では「フ」と同様にした結果つながったのですが、ペンの位置により多少の誤差が生まれ、提出用の字ではうまくつながりませんでした。

製作とプログラムに分かれて作業したことにより、お互いが楽しく、また得意なところを活かせれたと思います。

  • コメント部分を付け加えさせていただきました。これからは付けといてくださいね。 -- ゆき(TA)? 2006-05-26 (金) 15:18:13
  • サブルーチンやマクロを使うと、プログラムがすっきりしますよ。 -- ゆき(TA)? 2006-05-26 (金) 15:18:34
  • 写真はぜひ載せて見てください。やり方がわからなければ、授業中に気軽に質問してくださいね。 -- ゆき(TA)? 2006-05-26 (金) 15:20:02
  • プログラムにはできるだけコメントをつけましょう。人が見て見やすいだけでなく、あとで改造するときにコメントがないと非常に困ります。文字を書くプログラムは今後改造することはあまりないかと思いますが、今のうちからコメントをつける練習をしておいたほうが、あとあと(特にロボコンのときとか)良いと思います [wink] -- まいける(TA) 2006-06-24 (土) 12:23:12


添付ファイル: fileロボティクス「水」05.JPG 204件 [詳細] fileロボティクス「水」01.JPG 184件 [詳細] fileDSC00052-small.jpg 205件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-03 (月) 19:28:43 (4796d)