*お絵かきロボットを作ろう!! [#f54c9060] #contents **ロボット紹介 [#f941f472] 今回お絵かきロボットを作成するために製作したロボットを紹介します。 ***ロボットの構造 [#l5f6ac99] 今回顔を書くために製作したロボットは基本の構造はレールで紙を挟みその上をペンを保持した台車を横に走らせ顔を書く方法です。 #ref(2011b/A4/課題1右/honntai.gif,100%,ロボットの外形) ***縦の線を描く。 [#fd10e5fe] 縦の線を描くためにレールを前後させる必要があります。本体部分の横にモーターを取り付けて前後できるようにします。本体は基本的に前後の動きしかしません。 #ref(2011b/A4/課題1右/nxt_honntai.gif,100%,本体の図) ***横の線を描く [#t5810647] 横の線を書くためにはレールの上をペンを左右に動かす必要があります。 #ref(2011b/A4/課題1右/daisya.gif,100%,台車の図) **ロボットの製作 [#f718f293] 私たちが作ったロボットは大きく4つに分かれます。本体(前後運動)、レール、レール上を走る台車(左右運動)、ペンの上下部の4つです。 ***本体(前後運動) [#y8afbb03] 本体の構造はバランスをとるためNXT本体をなるべく低くしました。その結果NXT本体をタイヤで挟む構造になりした。&br; 前後運動させるにはなるべく直線のずれを少なくするために四輪で車輪と車輪の間を広く取りました。またモーターの動力を伝える車輪は左右を連結させました。&br; モーターを1つ使う。 ***レール [#obbe40b9] レールは上にペンを持った台車を走らせるためのものです。レールには台車を走らせるための幅、台車の重さに絶えるための強度が必要です。しかし、パーツ数の都合上レールを上下に組み合わせることができなかったので、レールのつなぎ目を横から覆う形にしました。 #ref(2011b/A4/課題1右/PH_236.jpg,50%,レール部分) ***台車(左右の移動) [#gb575856] 左右の移動はレールの上を走る台車によって行います。太いタイヤは本体で使ってしまい細いタイヤしかなかったため筆の摩擦に勝てないのではないかと思いましたが、実際に作ってみたところ問題なく動きました。また、ペンの上下と一体化しており、左右移動用のモーターは立った状態でセットされています。&br; モーターを1つ使う。 #ref(2011b/A4/課題1右/PH_241.jpg,50%,台車ユニット) ***ペンの上下部 [#l4a6a3f4] ペンを上下する機構はオームギアをラックとして使い、回転運動を上下運動にするために使用しました。丸の部分にもう一つギアを入れてモーターからの回転を伝えています。モーターは台車ユニットに寝かせた状態で配置しています。また、L字型のパーツを3本使ってマジックハンドを作り、ゴムで固定しています。&br; モーターを1つ使う。 #ref(2011b/A4/課題1右/PH_238.jpg,50%,ラック部分) ***このロボットの構造上の問題点と解決策 [#q1e946ff] -あ -あ -あ -あ -あ -あ -あ -あ **顔を書くプログラム [#ca71c02a] ***志村 [#y84fb7f1] #define NANAME_TIME 570 //直角にかかる時間(Aモーター25% 90度、Bモーター45% 180度) #define TORQUE 35 //モータースピード35 sub pen_up() { RotateMotor(OUT_C,50,-180); //Cモーター50のスピードで-180度 } sub pen_down() { RotateMotor(OUT_C,50,180); //Cモーター50のスピードで180度 } task main() { RotateMotor(OUT_A,TORQUE,-90); //Aモーター、-90度(原点から書き出しへ。)以下指示のないモーターのスピードは35% Off(OUT_A); pen_down();//ペンを下ろす。 RotateMotor(OUT_A,TORQUE,-180); //Aモーター、-180度(顔の輪郭を書き始めます。) Off(OUT_A); OnRev(OUT_A,25);//斜め線を書く。(顎左) OnRev(OUT_B,45); Wait(NANAME_TIME); Off(OUT_B); Float(OUT_A);//斜め線を書く。(顎右) OnRev(OUT_B,45); OnFwd(OUT_A,25); Wait(NANAME_TIME); Off(OUT_AB); RotateMotor(OUT_A,TORQUE,180); //Aモーター、180度(顔の輪郭終わり。) RotateMotor(OUT_B,TORQUE,390); //Bモーター、360度、修正30度(頭を書き始めます。) Off(OUT_A); Float(OUT_B); OnFwd(OUT_A,25);//斜め線書く。(頭左) OnRev(OUT_B,23); Wait(NANAME_TIME); Off(OUT_AB); RotateMotor(OUT_B,TORQUE,-220); //Bモーター、-180度角度、修正40度 Off(OUT_B); OnRev(OUT_B,23);//斜め線を書く。(頭右) OnRev(OUT_A,25); Wait(NANAME_TIME); Off(OUT_AB);//頭終わり pen_up(); RotateMotor(OUT_A,TORQUE,-60); //Aモーター、-60度(鼻の始めに移動) RotateMotor(OUT_B,TORQUE,180); //Bモーター、180度 Off(OUT_AB); pen_down(); RotateMotor(OUT_A,TORQUE,-60); //Aモーター、-60度(鼻を書く。) RotateMotor(OUT_B,TORQUE,-45); //Bモーター、-45度 Off(OUT_AB); pen_up(); RotateMotor(OUT_A,TORQUE,75); //Aモーター、75度(右目始まりへ移動) Off(OUT_A); pen_down(); RotateMotor(OUT_B,TORQUE,-90); //Bモーター、-90度(右目を書く。) Off(OUT_B); pen_up(); RotateMotor(OUT_B,TORQUE,225); //Bモーター、270度(左目始まりへ移動) Off(OUT_B); pen_down(); RotateMotor(OUT_B,TORQUE,-90); //Bモーター、-90度(左目を書く。) Off(OUT_B); pen_up(); RotateMotor(OUT_A,TORQUE,-135); //Aモーター、-135度(口の始まりに移動) Off(OUT_A); pen_down(); RotateMotor(OUT_B,TORQUE,-90); //Bモーター、-90度(口を書く。) Off(OUT_B); pen_up(); RotateMotor(OUT_B,TORQUE,225); //Bモーター、225度(原点に戻す。) RotateMotor(OUT_A,TORQUE,270); //Aモーター、270度 Off(OUT_AB); } 今回このプログラムは基本的に回転角度を使うことにしました。&br; ロボット完成後、実際にロボットを走らせて90度でどれほど書くことが出来るのか調べこの様なプログラムにしました。&br; 斜め線を書くときには二つのモーターを同時に動かすため時間により制御します。製作したロボットで調べたところ前後モーターは50%のスピードで285/1000秒同様の時間で左右モーターは45%のスピードで前後左右90度回りました。&br; 修正角度が数ヶ所含まれますが、ペンの抵抗によってレールが曲がってしまったのをプログラムで修正しています。 ***松澤 [#r551186b] #define pen_up RotateMotor(OUT_C, 50, -180);Off(OUT_C); #define pen_down RotateMotor(OUT_C, 50, 180);Off(OUT_C); #define MOVE_TIME 570 #define MOVE_HALF 275 #define move_left pen_down;RotateMotor(OUT_B, 50, -60);Off(OUT_B);pen_up; #define move_down RotateMotor(OUT_A, 50, 30);Off(OUT_A); task main () { pen_down;//ペンを下げる RotateMotor(OUT_A, 50, -45);//上に45度移動 Off(OUT_A); OnFwd(OUT_B,45);//右斜め上に移動 OnRev(OUT_A,25); Wait(MOVE_TIME); Off(OUT_AB); OnFwd(OUT_B,45);//右斜め下に移動 OnFwd(OUT_A,25); Wait(MOVE_TIME); Off(OUT_AB); RotateMotor(OUT_A, 50, 45);//下に45度移動 Off(OUT_A); OnRev(OUT_B,45);//左斜め上に移動 OnRev(OUT_A,25); Wait(MOVE_TIME); Off(OUT_AB); OnRev(OUT_B,45);//左斜め下に移動 OnFwd(OUT_A,25); Wait(MOVE_TIME); Off(OUT_AB); RotateMotor(OUT_A, 50, 90);//下に90度移動 Off(OUT_A); OnFwd(OUT_B,45);//右斜め下に移動 OnFwd(OUT_A,45); Wait(MOVE_HALF); Off(OUT_AB); RotateMotor(OUT_B, 50, 180);//右に180度移動 Off(OUT_B); OnFwd(OUT_B,45);//右斜め上に移動 OnRev(OUT_A,45); Wait(MOVE_HALF); Off(OUT_AB); RotateMotor(OUT_A, 50, -90);//上に90度移動 Off(OUT_A); pen_up;//ペンを上げる RotateMotor(OUT_B, 50, -45);//左に45度移動 Off(OUT_B); move_left;//ペンを下げつつ左に60度移動してペンを上げる RotateMotor(OUT_B, 50, -75);//左に75度移動 Off(OUT_B); move_left;//ペンを下げつつ左に60度移動してペンを上げる RotateMotor(OUT_B, 50, 110);//右に110度移動 Off(OUT_B); move_down;//下に30度移動 pen_down;//ペンを下げる RotateMotor(OUT_A, 50, 45);//下に45度移動 Off(OUT_A); pen_up;//ペンを上げる move_down;//下に30度移動 RotateMotor(OUT_B, 50, 45);//右に45度移動 Off(OUT_B); pen_down;//ペンを下げる RotateMotor(OUT_B, 50, -120);//右に120度移動 Off(OUT_B); pen_up;//ペンを上げる } **感想 [#y4289b05] ***志村 [#xf0f1cef] 今回の課題はお絵かきロボットでしたがロボット製作に多くの時間を使い何回か作り変えました。ほぼすべてのパーツを使ったため強度に多少不安を残す結果ですが今後のロボット作りの糧になると思います。 ***松澤 [#xf3e7969] **コメント [#vc97c908] - 気になることがありましたら、ご自由にコメントしてください。 -- [[志村]] &new{2011-11-10 (木) 22:20:44}; #comment