課題 : 似顔絵ロボット ( Ozawa男 & その相方 )

課題の概要

その壱) A3用紙に相棒の似顔絵を書くロボットの製作@

その弐) 指定のキットを使用すれば構造は自由@

その参) なるべく相棒に似せる@

ロボット〜本体について〜

製作過程

はじめはペンをロボットの中心に垂直に立て、上下させる方法ですすめていた。こうすることで、前後左右の動きに対して安定して書け、ロボットの回転中心の軌跡とペンの軌跡にずれがなくスムーズに書けるからである。

しかし、

テンションの調整が難しく、強すぎると車体が浮いてしまうし、弱いとうまい具合に線が描けない、また既存の車体ではペンと動作機構が入るスペースがないなど、トラブルが多々あった。

解決しようと、ゴムをサスペンション代わりにしたり、ギヤ比の調整でペンの降下速度を鈍くしてプログラムしやすくするなどした。

何回もこころみたが妥協。

おもいきってペンの作動方法を変更した。

完成体

写真をみての通り!!

動力部のうえにクレーン部をのせたシンプルな構造。

kuren3.jpg syatai3.jpg= zenbu1.jpg

工夫点

動力部

クレーン部

hude2.jpg

ロボット〜プログラムについて〜

O男編

最初は定義@

まず、メイン・サブルーチンのなかで繰り返し使うものをあらかじめマクロでインプット。

                #define  up_pen     OnRev(OUT_B);Wait(60);Off(OUT_B);                  //  ペンをさげる
                #define down_pen    OnFwd(OUT_B);Wait(60);Off(OUT_B);                  //  ぺんをあげる
                #define  go_st(t)   OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_B);         //  t/100 秒間まっすぐ走る
                #define  turn_l90   OnFwd(OUT_A);OnRev(OUT_C);Wait(65);Off(OUT_A+OUT_C);   // 左90°回転

続いて、メインルーチンのなかで繰り返して使うものをサブルーチンでインプット。

    sub st_op()               // すべてをストップさせ、0,5秒まつ。
                    {  
                      Off(OUT_A+OUT_C+OUT_B); 
                      Wait(50);     
                    }
    
    sub make_ang()            // 左90°の角を作成
                    { 
                      up_pen; 
                      go_st(50); 
                      turn_l90; 
                      OnRev(OUT_A+OUT_C); 
                      Wait(41); 
                      Off(OUT_A+OUT_C); 
                      Wait(50); 
                      down_pen; 
                    } 
    
    sub  ago_45()             // 左45°の角を作成
                    { 
                      up_pen; 
                      go_st(47);
                      OnFwd(OUT_A); 
                      OnRev(OUT_C); 
                      Wait(33); 
                      Off(OUT_A+OUT_C);
                      OnRev(OUT_A+OUT_C);
                      Wait(43);
                      Off(OUT_A+OUT_C);
                      Wait(50);
                      down_pen;    
                    }

メインの命令   

    task main()
                    {
                      OnFwd(OUT_B);  // ペンのセット
                      Wait(183);
                      st_op();
                      
                      go_st(100);    // 輪郭作成
                      st_op();
                      ago_45(); st_op(); go_st(30); st_op();
                      ago_45(); st_op(); go_st(50); st_op();
                      ago_45(); st_op(); go_st(30); st_op();
                      ago_45(); st_op(); go_st(100);st_op();
                      make_ang();   
                      st_op();
                      go_st(95);
                      st_op();
                      
                      up_pen;        //目作成
                      go_st(50);
                      turn_l90; 
                      OnRev(OUT_A+OUT_C);
                      Wait(41);
                      st_op();
                      go_st(25);
                      st_op();
                      go_st(50);
                      turn_l90;
                      OnRev(OUT_A+OUT_C);
                      Wait(41);
                      st_op();
                      go_st(13);
                      st_op();
                      down_pen;
                      st_op();
                      go_st(25);
                      st_op();
                      up_pen;
                      st_op();
                      go_st(22);
                      st_op();
                      down_pen;
                      st_op();
                      go_st(25);
                      st_op();
                      
                      up_pen;       //鼻作成
                      st_op();
                      OnRev(OUT_A+OUT_C);
                      Wait(35);
                      st_op();
                      down_pen;
                      st_op();
                      OnRev(OUT_A);
                      OnFwd(OUT_C);
                      Wait(27);
                      st_op();
                      go_st(15);
                      st_op();
                      
                      up_pen;         //口作成
                      st_op();
                      go_st(30);
                      st_op();
                      down_pen;
                      OnRev(OUT_A);
                      OnFwd(OUT_C);
                      Wait(50);
                      st_op();
                      
                      up_pen;         //ペンをあげて完成!!
                     }

こんなお顔に、、、、、、、、、、、、いかすでしょ?この澄ました笑顔!  *見つめているとイライラしてくる可能性がありますkao.jpg

工夫点

プログラムは見やすく!速く!をモットーに作成。

サブルーチンやマクロで簡略化を図った。でも、もっと工夫できるはず。

円の輪郭も考えたが人間味をだすために角型輪郭にした。

鼻を高くしたかったので丸みのようそをいれてみた。

苦労

ペンを車体の中心でなく前方に設置したため、そのずれを考慮して遠回りなプログラミングをしなくてはならなかった。

特に輪郭の作成に手間がかかった。角をつくるのが難しいんですよ、、、

微々たる調整の違いで角がクロスしたり、離れたり、曲がったりで悩まされた。

90°の角をつくる手順

90.jpg

90°の角を作成しにロボが線を描きながら手前からやってきたとしよう。

前タイヤが第一ポイントまで差し掛かったとき、目安をご覧のとおり「差」によってすでに線は第二ポイントまで作成されている。

もうここでペンをあげて第二ポイントまで前進!

左に90度回転し、ペンをおろす、、、、、

ちょっとまてぃ。。

第三ポイントまで前輪をバックしなければ角がくっつかない

ってことでバック!!

ここでペンをおろして前進。

やっと90度の角の完成です。

日本語で考えると単純なんですけどプログラムにすると・・・・ってかんじです。(笑)

90sipai2.jpg90sipai.jpgひどいっ!www 緑の点線部分のことをまったく考慮してませんでした

45°の角も同じ要領でつくりました。とくに説明しません。

相方編

顔の制作

まず、どんな顔にするかを決めなければなりません。はじめは輪郭を丸にした簡単なものを考えたのですが、芸がないので今回のようなプログラムにしました。

形を決める

まず、どんな顔にするかを決めなければなりません。はじめは輪郭を丸にした簡単なもの を考えたのですが、360度スピンでは回転中心とペンの間隔が狭く円が小さすぎ、また芸がないので今回のようなプログラムにしました。

コメント

ありましたら、お願いしますm(_ _)m


ロボットの説明も詳しいし、工夫した点も良くかけています。   FI

1749

添付ファイル: filekuren3.jpg 360件 [詳細] filesyatai3.jpg 328件 [詳細] filegia2.jpg 379件 [詳細] filehude2.jpg 356件 [詳細] filesharin2.jpg 353件 [詳細] file90sipai2.jpg 344件 [詳細] file90sipai.jpg 57件 [詳細] filesyata.jpg 220件 [詳細] filesharinn.jpg 215件 [詳細] filekure-nn.jpg 183件 [詳細] filehude.jpg 213件 [詳細] filegia.jpg 179件 [詳細] file90.jpg 369件 [詳細] filekao.jpg 350件 [詳細] filehp syataii1.jpg 184件 [詳細] filezenbu1.jpg 301件 [詳細] fileF1000043 2.jpg 153件 [詳細] fileF1000043.jpg 166件 [詳細] filekure-n hp1.jpg 172件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-11 (木) 15:02:02