#contents [#e4e9d40e]
ロボティクス入門で最初に出された課題は
の二つ。配布されたロボットキットでロボットを組み立て、それにプログラムを入力し似顔絵を描かせなければならない。プログラミングの作成にはNQCを使用した。
今回ロボットを作成する際に取り入れたかった要素は
の4点。それを実現するために分解と構築を何度も繰り返してできたのがこちら。
1,キャスターひとつと駆動輪二つの三輪化したことで滑らかに旋回できるようになり、大きなタイヤと相まって機敏で速い動きができるようになりました。
2,ベースの中央には穴があいており、その上に設置したキャタピラにペンを輪ゴムで固定し、上下させて線を書くという仕組みになっています。ただ、これだと筆圧が弱くなってしまい、最初はうまく書けませんでした。筆圧を強めるためにペンを下げる方向にモーターで出力を加え続ければ解決しましたが、ペンを固定する輪ゴムとモーターに負荷がかかり続けるため、動力を伝える歯車の一つに一定以上の力がかかると空回りするタイプのものを使い、力の逃げ場を作りました。
3,キャタピラは二つの駆動輪の間にあり、回転軸のほぼ真上の位置にくるように付けました。これにより旋回時のペンの位置のずれがほとんどないため、位置を修正するプログラムを作る手間をだいぶ省くことができました。
他に細かいところでは、
最初からこつこつとプログラミングしていってもいいのだが、どうやったら効率的にできるか考えてみた。
1,まず相方の顔をロボットでも書けるように簡略化し、とりあえず書いてみる。
2,顔を輪郭、髪、顔のパーツに分割し、パーツごとにプログラムを仕上げていく。
3,それぞれのプログラムを合体させる。
こうすることでパーツごとにテストや修正することができ。時間が短縮できた・・・と思います。~そしてできたプログラムがこちら。
task main() {
SetPower(OUT_B,07); OnRev(OUT_B);//penorosu Wait(20); //kao no rinkaku
OnRev(OUT_A+OUT_C);//tyokusin Wait(45); OnFwd(OUT_A);//hidari kaiten Wait(18); OnRev(OUT_A+OUT_C);//tyokusin Wait(50); OnFwd(OUT_A);//hidari kaiten Wait(32); OnRev(OUT_A+OUT_C);//tyokusin Wait(45); OnFwd(OUT_A);//hidari kaiten Wait(18); OnRev(OUT_A+OUT_C);//tyokusin Wait(60); //kao no rinkaku owari //kami no rinkaku Off(OUT_A);OnRev(OUT_C);//hidari ka-bu Wait(79); OnRev(OUT_A+OUT_C);//tyokusin Wait(28); Off(OUT_A);OnRev(OUT_C);//hidari ka-bu Wait(79); OnRev(OUT_A+OUT_C);//tyokusin Wait(10); OnFwd(OUT_A);//hidari kaiten Wait(50); OnRev(OUT_A+OUT_C);//tyokusin Wait(22); OnFwd(OUT_C);//migikaiten Wait(24); OnRev(OUT_A+OUT_C);//tyokusin Wait(22); OnFwd(OUT_A);//hidari kaiten Wait(24); OnRev(OUT_A+OUT_C);//tyokusin Wait(22); OnFwd(OUT_C);//migikaiten Wait(24); OnRev(OUT_A+OUT_C);//tyokusin Wait(22); OnFwd(OUT_C);//migikaiten Wait(24); OnRev(OUT_A+OUT_C);//tyokusin Wait(26); OnFwd(OUT_A);//hidari kaiten Wait(68); OnRev(OUT_A+OUT_C);//tyokusin Wait(7); //kami no rinkaku owari //kao OnFwd(OUT_B);//pen ageru Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnFwd(OUT_A);OnRev(OUT_C);//hidari kaiten Wait(60); OnRev(OUT_A+OUT_C);//tyokusin Wait(15); OnFwd(OUT_C);OnRev(OUT_A);//migi kaiten Wait(10); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_B);//penorosu Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_A+OUT_C);//tyokusin Wait(15); Off(OUT_A+OUT_C);//tomaru Wait(70); OnFwd(OUT_B);//pen ageru Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_A+OUT_C);//tyokusin Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_B);//penorosu Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_A+OUT_C);//tyokusin Wait(15); Off(OUT_A+OUT_C);//tomaru Wait(70); OnFwd(OUT_B);//pen ageru Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnFwd(OUT_A);//hidari kaiten Wait(80); OnRev(OUT_A+OUT_C);//tyokusin Wait(30); //me
OnFwd(OUT_C);OnRev(OUT_A);//migi kaiten Wait(20); OnRev(OUT_A+OUT_C);//tyokusin Wait(7); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_B);//pen orosu Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_A+OUT_C);//tyokusin Wait(20); OnFwd(OUT_A);OnRev(OUT_C);//hidari kaiten Wait(55); OnRev(OUT_A+OUT_C);//tyokusin Wait(8); //hana Off(OUT_A+OUT_C);//tomaru Wait(70); OnFwd(OUT_B);//pen ageru Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnFwd(OUT_C);OnRev(OUT_A);//migi kaiten Wait(30); OnRev(OUT_A+OUT_C);//tyokusin Wait(26); OnFwd(OUT_C);//migi kaiten Wait(50); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_B);//pen orosu Wait(20); Off(OUT_A+OUT_C);//tomaru Wait(70); OnRev(OUT_A+OUT_C);//tyokusin Wait(15); OnFwd(OUT_B);//pen ageru Wait(20); //kuchi //kao owari Off(OUT_B+OUT_A+OUT_C); }
で、これで書けた顔がこれ。
#define pen_up OnRev(OUT_B);Wait(20);Off(OUT_B); #define pen_down SetPower(OUT_B,3);OnFwd(OUT_B);Wait(50); #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(40);Off(OUT_A+OUT_C);Wait(50); #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(40);Off(OUT_A+OUT_C);Wait(50); #define straight(u) OnFwd(OUT_A+OUT_C);Wait(u);Off(OUT_A+OUT_C);Wait(50); task main() { pen_down; OnFwd(OUT_A+OUT_C); Wait(50); Float(OUT_C); Wait(235); OnFwd(OUT_C); Wait(50); Float(OUT_C); Wait(235); Off(OUT_A+OUT_B+OUT_C);//輪郭 pen_up; turn_right; straight(10); pen_down; straight(10); pen_up;//右目 straight(10); pen_down; straight(10); pen_up;//左目 turn_left; straight(50); turn_left; pen_down; straight(25); pen_up;//口 OnRev(OUT_A+OUT_C);Wait(15);Off(OUT_A+OUT_C); turn_left; straight(15); pen_down; straight(10); pen_up;//鼻 }
最初、ロボットを組み立てるのに夢中になってしまい、『改良』称して破壊と創造を繰り返した結果、ロボが完成してプログラミングとWebに差し掛かったのは期限の二日前になってしまった。徹夜を繰り返したものの期限に間に合わず、しかも徹夜で体調を崩し他の授業が残念なことに・・・。
だけどそれで完成したロボットは納得の出来だったし、書いた顔も若干手を抜いたが、なかなかの出来でよかったと思う。ただプログラムは工夫次第でもう少しシンプルにできただろうなーと思います。
まあ、『提出期限に間に合うよう、一部にこだわりすぎずに要領よくやりましょうね。』ということを実感した。
ロボットをいろいろ改良するために遅くまで学校に残り大変だったがロボットが完成した時はとてもうれしかった。