[[2008b/A5]] *課題1・・・相方の似顔絵をロボットに作成させなさい [#k843008e] #contents [#e4e9d40e] **課題について [#h9ff4584] ロボティクス入門で最初に出された課題は -相方の似顔絵をロボットに作成させなさい -このホームページを作成しそれにこのレポートを記述しなさい; の二つ。配布されたロボットキットでロボットを組み立て、それにプログラムを入力し似顔絵を描かせなければならない。プログラミングの作成にはNQCを使用した。 **ロボットの説明 [#we2357f1] 今回ロボットを作成する際に取り入れたかった要素は -できるだけコンパクトにする。 -スムーズに小回りができるようにキャスターをつけたい。 -旋回するときの回転軸上にペンをつけたい。 -キャタピラかっこいいからどこかに使いたい。 の4点。それを実現するために分解と構築を何度も繰り返してできたのがこちら。 &ref(2008b/A5/課題1左/右サイド.JPG); &ref(2008b/A5/課題1左/キャタピラ横.JPG); &ref(2008b/A5/課題1左/キャタピラテンショナー.JPG); &ref(2008b/A5/課題1左/キャタピラ1110.JPG); &ref(2008b/A5/課題1左/後ろ.JPG); &ref(2008b/A5/課題1左/上.JPG); &ref(2008b/A5/課題1左/前.JPG); ***工夫点 [#nb727d1f] 1,キャスターひとつと駆動輪二つの三輪化したことで滑らかに旋回できるようになり、大きなタイヤと相まって機敏で速い動きができるようになりました。 &ref(2008b/A5/課題1左/キャスター.JPG); &ref(2008b/A5/課題1左/キャスター横.JPG); 2,ベースの中央には穴があいており、その上に設置したキャタピラにペンを輪ゴムで固定し、上下させて線を書くという仕組みになっています。ただ、これだと筆圧が弱くなってしまい、最初はうまく書けませんでした。筆圧を強めるためにペンを下げる方向にモーターで出力を加え続ければ解決しましたが、ペンを固定する輪ゴムとモーターに負荷がかかり続けるため、動力を伝える歯車の一つに一定以上の力がかかると空回りするタイプのものを使い、力の逃げ場を作りました。 &ref(2008b/A5/課題1左/空転歯車.JPG); 3,キャタピラは二つの駆動輪の間にあり、回転軸のほぼ真上の位置にくるように付けました。これにより旋回時のペンの位置のずれがほとんどないため、位置を修正するプログラムを作る手間をだいぶ省くことができました。 &ref(2008b/A5/課題1左/本体穴 下 .JPG); &ref(2008b/A5/課題1左/本体穴 上 .JPG); 他に細かいところでは、 -車体の安定化のためにキャスターのアームを延長してホイールベースを伸ばし、重量物であるRCXを三つあるタイヤのほぼ中心に置いた。 -キャタピラがたるみがちだったので、内側のローラーの一つを若干外側に移し、張りを保たせた。 -キャスターのアームや、キャタピラのベースが動かないように補強を加えた。 &ref(2008b/A5/課題1左/キャスター台座補強.JPG); **プログラムについて [#de902e86] ***S助の場合 [#sd9976cc] 最初からこつこつとプログラミングしていってもいいのだが、どうやったら効率的にできるか考えてみた。 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); } で、これで書けた顔がこれ。 &ref(2008b/A5/課題1左/似顔絵.JPG); &ref(2008b/A5/課題1左/似顔絵2.JPG); ***マサの場合 [#zbfe7f45] #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;//鼻 } *感想 [#uf51fff7] -S助 ~最初、ロボットを組み立てるのに夢中になってしまい、『改良』称して破壊と創造を繰り返した結果、ロボが完成してプログラミングとWebに差し掛かったのは期限の二日前になってしまった。徹夜を繰り返したものの期限に間に合わず、しかも徹夜で体調を崩し他の授業が残念なことに・・・。 ~だけどそれで完成したロボットは納得の出来だったし、書いた顔も若干手を抜いたが、なかなかの出来でよかったと思う。ただプログラムは工夫次第でもう少しシンプルにできただろうなーと思います。 ~まあ、『提出期限に間に合うよう、一部にこだわりすぎずに要領よくやりましょうね。』ということを実感した。 -マサ ~ロボットをいろいろ改良するために遅くまで学校に残り大変だったがロボットが完成した時はとてもうれしかった。 - 写真ちゃんと載せてください。 -- [[なかむら]] &new{2008-11-12 (水) 17:12:12}; - 似顔絵の出来はすばらしいです。これからもがんばってください。 -- [[なかむら]] &new{2008-11-28 (金) 17:30:28}; #comment()