2011b

目次

メンバー

ブラン ・・・繊維学部応用生物学系 レゴとロボは好きです

T.S . . . 工学部機械システム工学科 プラモとロボが好きです。

課題

  • A4の用紙に顔を描くロボットの作成。

ルール

  • ペンは各チームで用意する。
  • 「Mindstorms Robotics Invention System」にあるパーツのみ使用可能。それ以外はペンを除き使用できない。
  • 用紙はA4サイズ。
  • A4用紙はセロテープなどで固定してはいけない。
  • 期間は約2週間。
  • なるべく相棒の顔に見える絵を描くこと。

ロボットの紹介

  • ロボットの説明

プリンターをイメージして作ったロボット。
アームの動く距離が制限されるため大きな絵は描けないが、描画の正確性やプログラムの書きやすさに重点を置いた。

全体の画像



  • 前後移動用のタイヤは、モーター1個のみで動作可能。

動きを著しく遅くするウォームギアを用い、さらにギアを何枚もうまく重ね合わせること
により、精密かつ摩擦にも強い動作が可能になった。
また、前後輪が十分離れ安定した四輪の車体は、ペンが上下にぶれるのを防ぎ、一定の筆圧を保つことが出来た。

車輪の画像



  • 絵をかくに当たり、ペンの上げ下げは必須である。

このロボットの場合、ペンの太さに合わせて摩擦の強いタイヤを上に2個、下に2個配置し、ペンをしっかりと固定。
下のタイヤにはウォームギアとギアを用いて、ゆっくりと動くペンの上げ下げ機構を作成した。

ペンを支えるアーム
ペンの写真



  • 前後、上下ときたら最後に必要なのは左右である。

長いレゴパーツにペンを動かすアームを固定しラックをつけて、全体が左右に動くように
した。ラックの上のモーターはギア比1:5で接続した。
RCXについている凸凹にギヤを噛ませたモーターを装着し、横移動が可能となった。

スライド機構
スライド機構の写真



プログラム

ブラン

なるべく簡単なプログラムにするため関数で(ペンを上げる、下げる、右に動かす、左に動かす、前に動く、後ろに動く)の6つの基本動作だけを定義し、
引数で時間だけを調整すればどんな絵でもかけるようにして、メインタスクの中を関数のみで構成した。

輪郭の大きさを縦に5秒、横に5秒の長方形にすることで、10×10の座標上にパーツ正確にを描けるように工夫した。
なお、完成予想図の番号はプログラム中の番号におけるペンの位置を示している。

完成予想



#define PEN_TIME 50  //ペンを上げる時間

sub pen_up()   //ペンを上げる
{
    OnRev(OUT_C);
    Wait(PEN_TIME);
    Off(OUT_C);
} 

sub pen_down()   //ペンを下げる
{
    OnFwd(OUT_C);
    Wait(PEN_TIME);
    Off(OUT_C);
}


void right(int R)  //右に動かす
{
    OnFwd(OUT_B);
    Wait(R);
    Off(OUT_B);
}

void left(int L)  //左に動かす

{
    OnRev(OUT_B);
    Wait(L);
    Off(OUT_B);
}

void go(int G)  //前に動く

{
    OnFwd(OUT_A);
    Wait(G);
    Off(OUT_A);
}
void back(int B)  //後ろに動く

{
    OnRev(OUT_A);
    Wait(B);
    Off(OUT_A);
}


task main()
{
    back(500);
    right(500);
    go(500);
    left(500);   
    pen_up();  //輪郭
    
    back(100);
    pen_down();
    right(200);
    pen_up();
    right(100);
    pen_down();
    right(200);
    pen_up();  //
    
    back(150);
    left(100);
    pen_down();
    left(100);
    pen_up();
    left(100);
    pen_down();
    left(100); //
    
    go(100);
    right(100);
    back(100);
    pen_up();  //
    
    back(50);
    pen_down();
    back(50);
    right(100);
    pen_up();  //
    
    go(100);
    pen_down();
    go(100);
    right(100);
    back(100);
    pen_up();  //
    
    back(150);
    pen_down();
    back(50);
    left(300);
    go(50);
    pen_up();  //
    
    right(50);
    go(150);
    pen_down();
    go(50);
    right(50);
    pen_up();  //
    
    right(100);
    pen_down();
    right(50);
    back(50);
    pen_up();  //
    
    left(350); //ペンを下の位置に戻す
}

実際に描いた似顔絵

似顔絵の写真



T.S

下の図の順序で、パーツごとに調整しやすいようにプログラムした。 (目と瞳は左→右の順番) 縦最大5秒、横最大5,4秒を目安とした。

完成予想図↓

似顔絵の予想

↓1.3か所あるモーターのそれぞれの動作時間を一番最初に定義しておく

#define ARMa_TIME 500//車体を動かすときの時間
#define ARMb_TIME 540//リフトを動かす時の時間
#define ARMc_TIME 50//ペンを動かすときの時間

↓2.ペンの動作に関しては上げる時間も下げる時間も一定なので、マクロ機能を用いてあらかじめ定義しておく。

#define arm_down();OnFwd(OUT_C);Wait(ARMc_TIME);Off(OUT_C);//ペンを下ろす
#define arm_up();OnRev(OUT_C);Wait(ARMc_TIME);Off(OUT_C);//ペンを上げる

↓3.動作中はどうしてもずれが生じてしまいうまく絵が描けないので、 あえて誤差の埋め合わせを定義しておく。

#define  G_TIME 50//誤差修正

↓4.サブルーチンを使い、パーツごとに動作を設定しておく。 Waitの後に時間を数字にしないのは、1で定義した時間を変えることで、簡単に似顔絵のサイズ指定ができるようになっている。(誤差は除く・・・)

sub RINKAKU_drew()//輪郭を書く(1)
{
OnRev(OUT_A);Wait(ARMa_TIME);Off(OUT_A);OnFwd(OUT_B);Wait(ARMb_TIME);
Off(OUT_B);OnFwd(OUT_A);Wait(ARMa_TIME);Off(OUT_A);OnRev(OUT_B);Wait (ARMb_TIME);Off(OUT_B);
}
sub KAMI_drew()//髪の毛を書く(2)
{
repeat(3){
OnFwd(OUT_B);OnRev(OUT_A);Wait(ARMb_TIME/6);Off(OUT_A+OUT_B)
;OnFwd(OUT_B);OnFwd(OUT_A);Wait(ARMb_TIME/6);Off(OUT_A+OUT_B);
}
}
sub MAYUGE_drew()//眉毛を書く(3)
{
OnRev(OUT_B);Wait(ARMb_TIME/6);Off(OUT_B);arm_down();OnRev(OUT_B);Wait   (ARMb_TIME/4);Off(OUT_B);arm_up();OnRev(OUT_B);Wait(ARMb_TIME/4);&br; 
Off(OUT_B);arm_down();OnRev(OUT_B);Wait(ARMb_TIME/4);Off(OUT_B);arm_up();OnRev(OUT_B);Wait (ARMb_TIME/6);Off(OUT_B);
}
sub eye_drew()//目を書く(4)
{
arm_down();OnFwd(OUT_B);Wait(ARMb_TIME/4);Off(OUT_B);OnFwd(OUT_A);Wait (ARMa_TIME/5);
Off(OUT_A);OnRev(OUT_B);Wait((ARMb_TIME/4)+G_TIME);Off(OUT_B);OnRev(OUT_A);Wait(ARMa_TIME/5);
Off(OUT_A);
}
sub HITOMI1_drew()//左の瞳を書く(5)
{
arm_up();OnFwd(OUT_B);Wait((ARMb_TIME/9)+G_TIME);Off(OUT_B);arm_down();OnFwd  (OUT_A);
Wait(ARMa_TIME/10);Off(OUT_A);OnFwd(OUT_B);Wait(ARMb_TIME/9);Off(OUT_B);arm_up ();
OnRev(OUT_A);Wait(ARMa_TIME/10);Off(OUT_A);OnFwd(OUT_B);Wait(ARMb_TIME/4);Off (OUT_B);
}
sub HITOMI2_drew()//右の瞳を書く(6)
{
arm_up();OnFwd(OUT_B);Wait((ARMb_TIME/9)+G_TIME);Off(OUT_B);arm_down();OnFwd (OUT_A);
Wait(ARMa_TIME/10);Off(OUT_A);OnRev(OUT_B);Wait(ARMb_TIME/9+G_TIME);Off (OUT_B);arm_up();
OnRev(OUT_A);Wait(ARMa_TIME/10);Off(OUT_A);OnFwd(OUT_B);Wait(ARMb_TIME/3);Off(OUT_B);
}
sub NOSE_drew()//鼻を書く(7)
{
arm_down();OnRev(OUT_A+OUT_B);Wait(ARMa_TIME/10);Off(OUT_A+OUT_B);OnFwd(OUT_B);
Wait(ARMa_TIME/5);Off(OUT_B);
}
sub MOUSE_drew()//口を書く(8)
{
arm_down();OnRev(OUT_A);Wait(ARMa_TIME/10);Off(OUT_A);OnFwd(OUT_B);
Wait(ARMb_TIME/2);Off(OUT_B);OnFwd(OUT_A);Wait((ARMa_TIME/10)+G_TIME);Off (OUT_A);
}

↓5.パーツからパーツまでの移動プログラムを書き、残りはサブルーチンから引き出す形となっている。

task main()
{
RINKAKU_drew();//(1)
KAMI_drew();//(2)
arm_up();
OnRev(OUT_A);
Wait(ARMa_TIME/5);
Off(OUT_A);
MAYUGE_drew();//(3)
OnRev(OUT_A);
Wait(ARMb_TIME/4);
Off(OUT_A);
OnFwd(OUT_B);
Wait(ARMb_TIME/6);
Off(OUT_B);
eye_drew();//1つ目の目を書く(4)
HITOMI1_drew();//(5)
eye_drew();//2つ目の目を書く(4)
HITOMI2_drew();//(6)
OnRev(OUT_A);//
Wait(ARMa_TIME/18);
Off(OUT_A);
OnRev(OUT_B);//
Wait(ARMb_TIME/3);
Off(OUT_B);
NOSE_drew();//(7)
arm_up();
OnRev(OUT_B);
Wait(ARMb_TIME/3);
Off(OUT_B);
OnRev(OUT_A);
Wait(ARMa_TIME/5);
Off(OUT_A);
MOUSE_drew();//(8)
arm_up();
OnRev(OUT_B);
Wait(400);
Float(OUT_B);
}

実際に完成したのがこれです。

似顔絵2



似顔絵ロボット完成までの苦難

ロボット製作において

  • 車体のスピードを遅くするためにウォームギアを用いたが、ウォームギアはギアをしっ
    かりと噛ませないといなかったり摩擦に弱かったりと、クセが強くて厄介だった・・・。
    特に、走行中にパキパキと音がしたときはギアが壊れていないかとひやひやしました。
  • ロボットが壊れないように、なおかつ調整のために分解しやすいように、補強していくことが大変だった。
    特に上方向にブロックを積むと弱くなりがちで、外れないようにする工夫がいくつも必要だった。

プログラムにおいて

  • 当初から考えていたので、ほとんど苦労はしなかったが、機械的な誤差を調節することだけは時間がかかった。
    プログラム上は間違っていないだけに、修正場所を探すところから大変だった。

その他(気づいたことなど)

  • 今回の課題でギヤをうまく噛ませることが、プログラムを複雑にしたり、動作中にトラブルを起こさないようにするうえで非常に大切であることがよくわかった。
  • ウォームギアや初速度などによってロボットに誤差がある場合、プログラムだけで修正するのが難しかった。
    なるべく無理のない構造のロボットを作ることが大切だと感じた。

最後に、コメントがありましたら何でもどうぞ!



添付ファイル: fileスライド機構 .png 578件 [詳細] file似顔絵.png 528件 [詳細] filenigaoe2.JPG 527件 [詳細] file完成図.JPG 499件 [詳細] fileCA3A0034.jpg 219件 [詳細] file111107_1928~01.jpg 491件 [詳細] file111107_1854~02.jpg 508件 [詳細] file111107_1854~01.jpg 525件 [詳細] file111107_1853~02.jpg 451件 [詳細] file111107_1853~01.jpg 492件 [詳細] fileペン.png 767件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-11-18 (金) 03:51:30 (2709d)