目次

課題1 似顔絵を描くロボット

課題  相方の似顔絵を描くロボット

  • 注意点
  • 紙は固定してはいけない
  • ロボットにペンを持たせて描く
  • ロボットを動かし始めたら、止まるまで触れてはいけない。

ロボット本体

これが自分たちのグループが作ったロボットです。

1015.2

見た目は悪いですがロボットのバランスをとることを優先しました。NXT本体は、上と下でしっかりと固定してあります。

56.8

ペンの上げ下げは、上の写真のようにタイヤでペンを挟み込み、上下に動かせるようにしました。タイヤのゴム部分で、ペンをしっかりと固定できるようになってます。そこで問題となったのは二点。どうやってモーターをとりつけるか、とどうやってペンを垂直に固定するかでした。いろいろと試したあげく、モーターを逆さに取り付けることで、同時にペンを垂直に取り付けることができました。

57.5

このようにしてペンをロボットの重心に置けるようにしました。。そのため、ふらつきを軽減できました。

51.5

予定としては、このように描けるプログラムを書きました。しかし、本番では

46.2

このように輪郭だけになってしまいました。原因は途中でペンがあがってしまったことです。

プログラム

sub spin_ahead(int z)        //右へ回る
{ 
   OnFwd(OUT_A,40);
   Wait(z);
}
sub back(int y)          //後ろに下がる
{
   OnRev(OUT_AC,35); 
   Wait(y);
   Off(OUT_AC);
}
sub pen_down()           //ペンを下げる
{
   OnFwd(OUT_B,30);
   Wait(510);
   Off(OUT_B);
}
sub pen_up()                        //ペンを上げる
{
   OnRev(OUT_B,30);
   Wait(500);
   Off(OUT_B);
}
void go_straight(int x)      //前に進む
{
   OnFwd(OUT_AC,20); 
   Wait(x);
   Off(OUT_AC);
}
task main()
{          
     go_straight(600);				// ヾ蕕領愕圓鯢舛
     spin_ahead(4200);
     go_straight(600);
     pen_up();					//ペンを上げる
     back(600);                                 //◆〔椶鯢舛位置へ移動するために一度後退して直進後、もう一度後退します。
     spin_ahead(1400);
     Off(OUT_AC);
     back(300);
     pen_down();				//ペンを下げる
     go_straight(600); 			    //左目を描く
     pen_up();    		        	//ペンを上げる
     go_straight(700);                          //目と目の間隔をとる
     pen_down();      		         	//ペンを下げる
     go_straight(400);             //右目を描く
     pen_up();					//ペンを上げる	
     back(1000);                 //鼻を描くために一度後退して曲がり、もう一度後退します。
     OnFwd(OUT_A,35); 
     Wait(2000);
     Off(OUT_A);
     back(400);
     pen_down();				//ペンを下げる
     go_straight(500);				// 鼻を描く
     Off(OUT_AC);   
     OnFwd(OUT_C,35);               //この時直線だけではなく、最後少しだけ曲げるようにしました。
     Wait(250);
     Off(OUT_A);
     pen_up();					//ペンを上げる
     back(400);                   //口を描くために一度後退して曲がり、もう一度後退します。
     OnFwd(OUT_C,35);
     Wait(1500);
     Off(OUT_C);
     back(300);
     pen_down();				//ペンを下げる
     OnRev(OUT_C,35);				//ぁ仝を描く
     Wait(1200);
     Off(OUT_AC);                //終了
}

かなり単調なプログラムですが、多くの時間を費やしました。顔の輪郭は、最初は円をベースにする予定でしたが、紙からロボットがはみ出てしまう点から、長い楕円を用いて描きました。目を描くプログラムで左右の走行時間が違うのは、何度走らせても左目だけが短くなってしまったので、左右のバランスを考えたうえでこのようになりました。

感想

紙を動かさずに描く、これが最大の難関でした。 最初に描こうとしていた絵では、紙が動いてしまい、途中から描けなくなってしまいました。そこで、絵のクォリティーを下げて紙の上からロボットが出ないようなプログラムにしました。電池残量によっても、モーターの速度が変わり微調整に苦労しました。また、ロボットが絵を描いているうちにペンが紙から離れてしまいペンを上げ下げするプログラムを何度も変更してみましたが、結局改善できず、本番でも途中でペンが浮いてしまったことがくやしいです。


添付ファイル: fileTS3V0093tt.jpg 118件 [詳細] fileCIMG1499tt.jpg 119件 [詳細] fileTS3V0093t.jpg 70件 [詳細] fileTS3V0092t.jpg 119件 [詳細] fileTS3V0092.JPG 65件 [詳細] fileCIMG1502t.jpg 123件 [詳細] fileCIMG1499t.jpg 82件 [詳細] fileCIMG1534t.jpg 160件 [詳細] fileCIMG1534.JPG 79件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-06-21 (木) 23:22:28 (2613d)