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

  • パートナーの似顔絵を描くロボットを作る。

ルール説明

  • ロボットに似顔絵を描くプログラミングを入力し、ペンを使って紙に似顔絵を描く。
  • ロボットの動作中は、ロボットに触れてはならない。
  • 紙のサイズはA4で、固定してはならない。

ロボット本体

NXCの説明書に載っていた前輪2個後輪1個のロボットに前にもう1個モーターを設置し、ペンをゴムで固定し上下に動かせるよう改良したものです。 向きを変えたとき、できるだけペンの先がずれないように車体を小さくしました。 。 出きるだけ、ずれないようにペンは真ん中にして、摩擦を減らすためにペン先の角度を斜めにしました。これで何度も似顔絵を描いてみた結果、ほとんどの確率でずれなくなりました また、重量を増やして紙を押さえつける様にしました。

ロボット

ロボットが描いた似顔絵

似顔絵
  • 以下の順に描くようにしました。
    ヾ蕕領愕
    口
    H毛
    ぬ
    ド
    θ韻量
    似顔絵

プログラム

//nxtプログラム 似顔絵
#define	turn90		370
#define	turn45		185
void bturn_r(int i){	//右輪後ろ回転
	Float(OUT_BC);
	RotateMotor(OUT_B,-50,i);
	Wait(200);
	Off(OUT_BC);
	Wait(200);
}
void bturn_l(int i){	//左輪後ろ回転
	Float(OUT_BC);
	RotateMotor(OUT_C,-50,i);
	Wait(200);
	Off(OUT_BC);
	Wait(200);
}
void fturn_l(int i){	//右輪前回転
	Float(OUT_BC);
	RotateMotor(OUT_B,50,i);
	Wait(200);
	Off(OUT_BC);
	Wait(200);
}
void fturn_r(int i){	//左輪前回転
	Float(OUT_BC);
	RotateMotor(OUT_C,50,i);
	Wait(200);
	Off(OUT_BC);
	Wait(200);
}
void go(int i){	//前進
	Float(OUT_BC);
	OnFwd(OUT_BC,20);
	Wait(200);
	RotateMotor(OUT_BC,50,i);
	Wait(200);
	Float(OUT_BC);
	Wait(200);
}
void back(int i){		//後進
	Float(OUT_BC);
	OnRev(OUT_BC,20);
	Wait(200);
	RotateMotor(OUT_BC,-50,i);
	Wait(200);
	Float(OUT_BC);
	Wait(200);
}
void up(){	//ペン上げる
	Wait(200);
	OnRev(OUT_A,30); 
	Wait(400);
	Off(OUT_A);
	Wait(200);
}
void down(){		//ペン下げる
	Wait(200);
	OnFwd(OUT_A,20); 
	Wait(400);
	Off(OUT_A);
	Wait(200);
}
task main(){
	int i;			//顔の輪郭
	for(i=0;i<=1;i++){
		down();
		go(100);
		up();
		go(140);
		bturn_l(turn45);
		back(45);
	}
	down();
	go(60);
	up();
	go(140);
	bturn_l(turn45);
	back(45);
	for(i=0;i<=1;i++){
		down();
		go(100);
		up();
		go(140);
		bturn_l(turn45);
		back(45);
	}
	bturn_l(turn45);
	go(115);
	down();
	go(30);	//口
	up();
	go(60);
	bturn_r(turn90);
	go(80);
	fturn_r(turn90);
	back(250);
	down();	//眉
	back(50);
	up();
	back(15);
	down();
	back(50);
	up();
	fturn_r(turn90);
	go(20);
	bturn_r(turn90);
	down();	//目
	back(37);
	up();
	back(22);
	down();
	back(37);
	up();
	bturn_r(turn90);
	go(20);
	fturn_l(turn90);
	go(52);
	fturn_l(turn90);
	back(200);
	down();	//鼻
	go(50);
	up();
	go(140);
	bturn_l(turn45);
	back(45);
	down();
	go(20);
	up();
	bturn_r(turn45);
	back(180);
	fturn_l(turn45);
	down();	//髪の毛
	go(70);
	up();
	repeat(5){
		back(90);
		bturn_l(turn90);
		back(20);
		fturn_r(turn90);
		go(2);
		down();
		go(55);
		up();
		}
	
}

問題点

  • タイヤが紙の外に出てしまうと、紙がずれやすくなる。
  • スピードが速すぎても、遅すぎても紙がずれてしまう。

工夫した点

  • ペン先の方向を斜めにすることで紙との摩擦を減らした。
  • 紙がずれないように描く絵を小さくし、ロボットのスピードを調節した。

感想

初めてのロボット製作とプログラミングだったので、解らないことばかりだったので不安でした。でも、パートナーと協力して取り組んだおかげで進めることができました。ロボットを作る際の一番の課題が紙をずらさないことでした。それに対して、速さを調節し、絵を小さくするなどの工夫をすることができました。


添付ファイル: filenigaoekakijun.jpg 215件 [詳細] file20120525160836a.jpg 232件 [詳細] file20120525160836.jpg 118件 [詳細] file20120525155634a.jpg 235件 [詳細] file20120525155634.jpg 129件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-06-08 (金) 15:18:52