2018a/Member

ロボットの選択

僕たちはNXTの機体を選んだ。NXTはモータの回転を測定することができるという利点から、他とは違うような機体でプログラムできると思ったからである。

課題  

これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを製作せよ。

選んだ文字

三重県の「平田」という地域の名前を選ぶことにした。

ロボットの作成

機体

機体全体

機体は本体は動かないアーム駆動式にした。人の肩から腕にかけての構造を参考にして関節をモータで代用した。この構造の利点はそれぞれの関節を別々に動かすことで、X,Y軸型では難しい払いや跳ねといった斜めの線を描くことができ、人が書く文字に近い文字がプログラムによっては描けるということだ。

細部

関節部

・関節部分はモータを縦、横、縦の順で取り付け本体側からC,B,Aとなっている。

関節部

・関節部分には、強い負担がかかりやすいので、他パーツで補強を施している。

脚部
  • 脚部には普通なら縦に使うべきタイヤを、横に倒した状態で用いることで、本体の滑り止めとして活用した。
  • タイヤのゴムは滑り止めとしては優秀で、しっかりと本体を支えてくれた。
  • 取り付けも、取り外しも容易で、しかも高さを安定させるために補助パーツをつけることでかなりの安定感を出せるため、本機にはピッタリの仕組みであった。
    ペン部分
  • 初期段階では、ペンを垂直に支える形にする予定であった。
  • 垂直では、紙にペンが引っ掛かり直線ではなく点線のようになってしまった。
  • ペンの角度を出すため写真のようにモータからペン先が離れるように組み立てた。
  • この角度は線は書けるものの、本体からの距離が離れてしまい、アームを動かした際のブレが大 きくなってしまった。

プログラム

  #define penDW RotateMotor(OUT_A,50,90);    //ぺんを下げる
  #define penUP RotateMotor(OUT_A,50,-86);   //ペンを上げる
task main()
{  
   
  RotateMotor(OUT_C,30,110);                     //初期位置へ移動
   RotateMotor(OUT_B,30,90);
   Wait(500);
   ResetTachoCount(OUT_BC);
   Wait(500);         
  penDW;                                         //平 …樟
   Wait(500);
   Off(OUT_A);
   RotateMotorEx(OUT_BC,50,-100,8,true,true);
   Off(OUT_BC);
   Wait(500);
   penUP;
   Off(OUT_A);
  RotateMotor(OUT_B,30,1);                    //平◆‥
   RotateMotor(OUT_C,30,-10);
   Wait(500);
   penDW;
   penUP;
   Off(OUT_A);
  RotateMotor(OUT_B,30,35);                 //平 点
   RotateMotor(OUT_C,30,35);
   Wait(500);
   penDW;
   penUP;
   Off(OUT_A);
  RotateMotor(OUT_B,30,35);             //平ぁ…樟
   RotateMotor(OUT_C,30,23);
   Wait(500);
   penDW
   Wait(500);
   Off(OUT_A);
   RotateMotorEx(OUT_BC,30,-70,-5,true,true);
   Off(OUT_BC);
   Wait(500);
   penUP;
   Off(OUT_A);
  RotateMotor(OUT_B,30,25);                     //平ァ―陳樟
   RotateMotor(OUT_C,30,43);
   Wait(500);
   penDW;
   RotateMotor(OUT_C,40,-30);
   RotateMotor(OUT_B,40,30);               //田 中の棒
   penUP;
   Off(OUT_A);
  RotateMotor(OUT_B,30,28);               //田 外側
   RotateMotor(OUT_C,30,30);
   penDW;                                               
   RotateMotor(OUT_B,30,-23);
   Wait(500);
   Off(OUT_A);
   RotateMotorEx(OUT_BC,30,-60,-5,true,true);
   Off(OUT_BC);
   RotateMotor(OUT_B,30,27);
   Wait(500);
   RotateMotorEx(OUT_BC,30,60,12,true,true);
   Wait(500); 
   penUP;
   Wait(500);
   RotateMotor(OUT_B,30,-5);                  //田 横棒
   Wait(500);
   penDW;
   Wait(500);
   Off(OUT_A);
   RotateMotorEx(OUT_BC,30,-50,-5,true,true);
   Off(OUT_BC);
   Wait(500);
   penUP;
   Off(OUT_A);
    }

結果

平田

決して上手な文字とは言えない。人によっては読めないかもしれない。同期回転がうまくできていないことから直線が円弧のようになっていると考えられる。また、ペン先のブレによって各線の最後が乱れることで余計文字として認識しにくい。やはりもう少し、ロボットの形を考えるべきであっただろうか。まだまだ改善の余地は大いにあると感じる結果となってしまった。

工夫したこと

  • アーム式にしたことで、かける線の種類を増やした。
  • タイヤをアメンボの足のように用いて滑り止めとした。
  • 関節部の補強をした。
  • ペンを角度をつけて固定することで紙に引っかかることを防いだ。
  • プログラムにおいてNXTの利点である回転角度測定を多く用いて、成功率を高めた。
  • ペンの持ち上げと持ち下げの角度をずらして後半ほど筆圧が強くなるようにした。

苦労したこと

第一にロボの組み立ての段階で強い負担に耐えられる仕組みを考案することに苦労した。重すぎるとモータで出力を出す分どうしてもブレが大きくなり、また軽すぎるとモータが回転に耐え切れずに外れてしまうため、何度も試行錯誤して今の形にたどり着いた。

そして第二にプログラムにおいてその時々で回転角度がまばらであるため「♯define」で動作を簡略化できず、毎回角度を調整しながら試行錯誤をしていた。また直線を引くには、方向によって同期回転の調節が絶妙で、かなり根気が必要であった。さらに、ペンを本体から話していた分ブレが大きくなるのは必然で、そのブレを考慮に入れてプログラムを考えることが大変であった。

反省・感想

正直、この仕組みを採用したことに一番後悔している。組み立ては大変で、さらに角度調整は本当に時間と根気がいる作業であった。それに対してできた文字は拙く、自分の知識不足と力不足を多く自覚した。プログラムに関しても、教授によると三角関数などの関数を用いることでもっとうまくできたかもしれないとアドバイスをいただけたことから、情報の収集不足であったことが分かった。ここまでの活動を通してプログラムの簡略化の大切さと多様性について多くを学べた。ロボットの形にあったプログラム作る際の目的意識、効率化を図るための知識、それらを結びつける技術をこれからしっかりと学んでいきたい。


添付ファイル: fileIMG_2480.JPG 16件 [詳細] fileIMG_2479.JPG 16件 [詳細] fileIMG_2476.JPG 17件 [詳細] fileIMG_2474.JPG 15件 [詳細] fileIMG_2473.JPG 17件 [詳細] fileIMG_2472.JPG 15件 [詳細]

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