2008b/MemberOnly/進行状況A


似顔絵ロボットー突き刺し型ロボットー

製作者:コンボイ 零崎

目次


今回、我々のコンセプトはシンプルイズ•ザ•ベスト。 そのコンセプトで製作したのがアーム突き刺し型ロボットである。

突き刺し型ロボットの利点

  • 製作するのが簡単(ギアを一個も使わず作成できる)。
  • 自分で接地してくれるのでアームの上げ下げのプログラムの調整が不要(若干必要だが他のよりは簡単にできる)そのため、筆圧などのブレが生じにくい。
  • アームの上げ下げの見た目が早い。
  • すぐに解体できるので持ち運び便利。
  • 動きが大きいのでわくわくする!!
  • 取り外しが簡単なので持ち運びがらくちん!

これぞロボット!という感じを出したかったので突き刺し型にして、なおかつシンプルな方が見た目がスマートでいいということでこの形になりました。 動きがダイナミックなので、見ていて嬉しくなっちゃいます。

苦労した点

  •  1ペンの固定が難しくてアームを上げ下げするたびにペンが上下する。
  •  2アーム自体が柔いため筆圧が一定にならない。
  •  3上の二つを防ぐためにアームを改良したらモーター固定部分が耐えきれずに分解してしまう。
  •  4ペンの左右のブレ。
  •  5アームの駆動が強すぎて車体が浮く。

1と2と4は予想していた問題でしたが、3と5が起きたときは二人で爆笑したもんでした。しかし、笑っている場合ではなくて早急に直さないと部品が痛む可能性もあり色々と実験を重ねました。

その結果以下の改良を施すことになりました。

  •  1ペンがちゃんとアームに固定をできるように、とにかくガチガチに固定した。(下図参照)
  •  2さらに、ペンをアームにガチガチに固定することによって、アーム自体が重くなり、筆圧を一定にすることができた。
  •  3車体が浮くのはプログラムのアームの上げ下げの前にOffを入れることで改善
  •  4左右のブレに対しては一カ所で固定するのではなくて立体的に固定することでブレをなくした。

ペンを固定するために力のモーメントを考えて固定、2はやっていたら安定してきて気がついた。ただし2を行った結果アームがより強力になりモーター分解や車体が浮くのを増長した。 そのため3の提案は筆圧を一定するのに大きく寄与した。これに気がつくのに時間がかかった。 4は二人でペンをいじくり回した結果たどり着いた。ここらへんから机上の理論で終わるのではなく、とりあえず実験してみることの大切さを覚えていった。

アーム

''こちらアーム試作一号 こちら完成したアーム''
マシンマシン

ロボコンで戦わせたら串刺しにして勝てそうなぐらいふとましいアーム... これのお陰で早くて力強いペンさばきが実現しました! ちなみにどんな機構で動いているかというと、モーター回転させたら上下いたします!

製作したマシン

''こちらは試作一号機 こちら完成したマスィン''
マシンマシン

見た目がシンプルにできたのでかなりいい感じ(自分達的に) アームはでかいですが生き生きと動く姿はまさしくロボット!

似顔絵を書くプログラムの紹介

 - 1コンボイの場合

私はシンプルかつ見やすいプログラムを目指し、以下のようになりました。

/*-----似顔絵制作プログラム-----*/

void pen_up()	//アームを上げる関数		
{
	Wait(20);		//マシン動作安定のため、時間を少しおく
	OnRev(OUT_B);	 
	Wait(13); 
	Off(OUT_B);
	Wait(20);		//マシン動作安定のため、時間を少しおく
}

void pen_down()	//アームを下げる関数
{
	Wait(20);		//マシン動作安定のため、時間を少しおく
	OnFwd(OUT_B);
	Wait(11); 
	Off(OUT_B);
	Wait(10);
	Float(OUT_B);	//C出力のモータのトルクをなくす
	Wait(10);		//マシン動作安定のため、時間を少しおく
}

void move_fwd(int t)	//前進するための関数
{					//move_fwd(t);	tの値の時間だけ前進
	OnFwd(OUT_A + OUT_C);			
	Wait(t); 
    	Off(OUT_A+OUT_C);
    	Wait(10);			//マシン動作安定のため、時間を少しおく
}

void move_rev(int t)		//後進するための関数
{					//move_rev(t);	tの値の時間だけ後進
	OnRev(OUT_A + OUT_C);			
	Wait(t); 
    	Off(OUT_A+OUT_C);
    	Wait(10);			//マシン動作安定のため、時間を少しおく
}

void move_right(int t)	//向きを右にするための関数
{					//move_right(t); その場でtの値の時間だけ右折
	OnFwd(OUT_A);			
	OnRev(OUT_C);
	Wait(t); 
    	Off(OUT_A+OUT_C);
    	Wait(10);			//マシン動作安定のため、時間を少しおく
}

void move_left(int t)		//向きを左にするための関数
{					//move_left(t);その場でtの値の時間だけ左折 
	OnFwd(OUT_C);			
	OnRev(OUT_A);
	Wait(t); 
    	Off(OUT_A+OUT_C);
    	Wait(10);			//マシン動作安定のため、時間を少しおく
}	

task main()			//main関数
{
      	/*---初期設定---*/
	int i;			//繰り返しで使用する変数iの宣言
	
	SetPower(OUT_A,2);  //A出力のモータの出力を2に設定
	SetPower(OUT_C,2);  //C出力のモータの出力を2に設定
	/*---終了---*/

	/*---顔の輪郭を描く---*/
	pen_down();		//ペンを下げる
	OnFwd(OUT_C);		//C出力のモータのみ前進 → 左に大きく旋回
	Wait(1050);			//t = 1050の時間だけ現状維持
	Off(OUT_C); 		//C出力のモータを停止
	Wait(15);			//t = 15の時間だけ現状維持
	pen_up();			//ペンを上げる
      	/*---終了---*/
	
      	/*---位置微調整---*/
	move_left(80);		//t = 80の時間だけ左折
	move_rev(100);		//t = 100の時間だけ後進
    	/*---終了---*/
	 
      	/*---髪の線を描く---*/
	pen_down();		//ペンを下げる
	move_fwd(175);		//t = 175の時間だけ前進
	pen_up();			//ペンを上げる
      	/*---終了---*/

	/*---位置微調整---*/
	move_left(135);		//t = 130の時間だけ左折
	move_rev(25);		//t = 25の時間だけ後進
	move_left(135);		//t = 130の時間だけ左折
	move_rev(105);		//t = 105の時間だけ後進
      	/*---終了---*/
	
      	/*---目を描く---*/
	for(i = 1; i  <= 3; i++)	//3回繰り返す
	{
		if(i % 2 != 0) pen_down();	//繰り返しの2回目以外のときペンを下げる
		move_fwd(50);				//t = 50の時間だけ前進
		if(i % 2 != 0) pen_up();		//繰り返しの2回目以外のときペンを上げる
	}
      	/*---終了---*/
	
      	/*---位置微調整---*/
	move_fwd(25);		//t = 25の時間だけ前進
	move_right(130);	//t = 130の時間だけ右折
      	/*---終了---*/
	
      	/*---鼻を描く---*/
	pen_down();		//ペンを下げる
	move_fwd(40);		//t = 40の時間だけ前進
	pen_up();			//ペンを上げる
      	/*---終了---*/

      	/*---位置微調整---*/
	move_fwd(40);		//t = 40の時間だけ前進
	move_left(110);		//t = 110の時間だけ左折
	move_rev(30);		//t = 30の時間だけ後進
      	/*---終了---*/
	
      	/*---口を描く---*/
	pen_down();		//ペンを下げる
	move_right(150);	//t = 150の時間だけ右折
	pen_up();			//ペンを上げる
 	/*---終了---*/
	
} 

/*-----プログラム終了-----*/
''完成した似顔絵(処女作は紛失しましたT_T)''
マシン
(髪が傾きましたが)無難な似顔絵に終わりました。

プログラムで工夫した点は、A出力とC出力のモータの出力を下げ、1つ1つの動作の間に時間を少し設けることで、マシンの動作を安定させ、ペンをぶれないようにしたところです。そうすることで、しっかりとした線を書くことができました。また、見やすいプログラムを作ろうと関数を作り、プログラムの記述を減らしました。さらに、マシンの動作についてコメント文を細かく書き、初めて見た方でもわかりやすいように書きました。

 - 2零崎の場合    なぜだか上から目線になった。このようなプログラムにする気はなかったけど、面白いからそのままにしてみた。

#define PEN_TIME 20
sub up_arm() //ペンをあげるサブルーチン
{     
     OnRev(OUT_B);
     Wait(12);
     Off(OUT_B);
     Wait(5);
     }
    
    
sub  down_arm ()
 {
 OnFwd(OUT_B);//ペンをさげるサブルーチン
 Wait(11);    //モーターではあまり下ろさず重力で下ろすように工夫
Off(OUT_B);     
Wait(PEN_TIME);// このOffタイムでちゃんと接地するまで次に移項しないようにした
}






task main()
{   down_arm(); // 顔の輪郭
    OnFwd(OUT_C);                    
    Wait(830);              
   Off(OUT_A);//Offを入れることでアームの接地がぶれるのを防ぐ
   up_arm();
   OnRev(OUT_A); Wait(70);//目の作成に移る。 
   Off(OUT_A); //目をかく位置にまで微調整
   OnRev(OUT_C);  Wait(30);
   Off(OUT_C);
   OnRev(OUT_A+OUT_C);
   Wait(80);
   OnFwd(OUT_A+OUT_C); 
   Wait(50);
   Off(OUT_A+OUT_C);
   Wait(20);
   down_arm();//目をかいていく。
   OnFwd(OUT_A+OUT_C);
   Wait(30);
   Off(OUT_A+OUT_C);
   Wait(20);
   up_arm();
   OnFwd(OUT_A+OUT_C);
   Wait(30);
   Off(OUT_A+OUT_C);
   Wait(20);
   down_arm();
   OnFwd(OUT_A+OUT_C);
   Wait(30);
   Off(OUT_A+OUT_C);
   Wait(20);
   up_arm();   
   OnFwd(OUT_A+OUT_C);//鼻を書くために位置調整に入る
   Wait(40);
   Off(OUT_A+OUT_C);
   Wait(20);
    OnRev(OUT_A+OUT_C);
   Wait(5);
   Off(OUT_A+OUT_C);
   OnRev(OUT_C); OnFwd(OUT_A); 
   Wait(100); 
   Off(OUT_C+OUT_A);  
   OnRev(OUT_A+OUT_C);
   Wait(40);
   Off(OUT_A+OUT_C);
   Wait(20);
   down_arm();//ここから鼻を作る
   OnRev(OUT_A+OUT_C);
   Wait(15);
   Off(OUT_A+OUT_C);
   Wait(20);
   OnFwd(OUT_A+OUT_C);
   Wait(20);
    up_arm(); //鼻終わり
   OnRev(OUT_C); OnFwd(OUT_A);// 口をにっこりするために移動
   Wait(70);
      OnFwd(OUT_A+OUT_C);
   Wait(20);
   Off(OUT_A+OUT_C);
   down_arm();//回転を利用して口をかく
   OnRev(OUT_C); OnFwd(OUT_A);
   Wait(140);
   Off(OUT_A+OUT_C);
   up_arm();
   }
''零崎の処女作''
''処女作''
''そしてこちら発表作品''
''マシン
なぜだか誇らしげである

自分が気をつけた点は、こまめにOffを入れて車体が浮かないようにすることです。浮くとペンもぶれてかけなくなるので一個一個いれていきました。 なるべく、ロボットの動きが複雑にならないよう一筆書きで書けるように意識しました。 見下した感じになるのはびっくりしましたが、意外に面白くできたのでこのまま採用しました! しかし、眼鏡はつけたかった;;

プログラムの作成についての苦労

  • 突き刺し型で接地する際の調整はなかったが、アームを重くした分上げ下げでの力が強すぎて、車体が安定しなくなってしまった。
  • マシンの構造上、小回りが利かないので小さい円を書くのに苦労した。(実際は使用しないでかける方法に走った)
  • メガネや毛とかを後で書こうとしたら調整が逆に難しくなってしまった。(結局まにあわず)

コンボイと零崎の奮闘日誌

  • 10/23 コンボイが風邪でダウン ロボットがないために作成できず。お先真っ暗スタート。
  • 10/28 アーム作成に取りかかる。この段階ではアームはただ固定しただけの貧弱なものであったため、上げ下げするのとともにペンが上下したり、左右のぶれがひどくとても使えなかった。しかもB端子が使えずプログラムも作れない。先生に助けてもらうことに。
  • 10/29 先生のところにいき、無事B端子復活! ここから始まった。
  • 10/30 アーム改良に走る二人。ペンが上下しない用にするために固定しようと試みる。とりあえず、二人でいろいろしていたら完成していた。そのままプログラムをつくるが零崎が途中で集中力きれる。
  • 10/31 アームが強すぎてモーターが吹っ飛んだ。 モーターを固定できるように改良した。アームもそれに伴い修正。またもやこの後零崎の集中力がきれる
  • 11/4 零崎の処女作完成。なぜか見下した顔に。続いてコンボイの処女作も完成。無難にできてしまった。
  • 11/5 ペン圧の安定のためギアの出力、モーターの固定をして左右のぶれをなくすためのバンパーも改良。 零崎は絵を改良するも、やっぱり見下した顔に。初wikiいじり、絵がうまくアップできない。
  • 11/6 ついに発表会。我が子をみているようでハラハラ。二人とも似てないとかいわれたけれど誰よりも輝いてみえました!

反省点

  • 輪ゴムが切れてしまった。もっとデリケートに扱うものであったのです。
  • ペンを下ろす位置の関係で小さい円がかけなくなってしまった。今度は調整できるように最初の段階で設計に工夫をしていきたい。
  • レポート用に色々と写真を撮っておけばよかった。
  • 似顔絵がにてないって? もうちょっとメガネとか特徴的なものを付属させればよかったですが時間たりず。 基本プログラムでいっぱいいっぱいでした。もうちょっと全体像を決めてからプログラムすれば眼鏡や髪も書けたはず。

皆さんのコメント

よければコメントをどうぞ

  • テスト -- テスター? 2008-11-05 (水) 17:16:51
  • 詳しく書こうとがんばっていると思います。図や写真を使うとわかりやすいレポートになると思います。ロボットや似顔絵の写真を載せてください。 -- F.I? 2008-11-06 (木) 15:14:11
  • 良いレポートです。 -- なかむら? 2008-11-29 (土) 13:04:56


添付ファイル: filebunkai.jpg 100件 [詳細] filepen_set.jpg 121件 [詳細] filetaki-nigaoe.jpg 228件 [詳細] filepen02.jpg 228件 [詳細] filepen01.jpg 208件 [詳細] file課題1マシン_ペン2.jpg 117件 [詳細] filehappyou.jpg 222件 [詳細] filekannsei.jpg 245件 [詳細] filemikudasi.jpg 229件 [詳細] file課題1マシン_ペン1.jpg 121件 [詳細] file課題1マシン全体図1.jpg 262件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-03 (水) 11:39:07 (3913d)