[[2019a/Member]]

*課題1 [#j424412d]
これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙の範囲内に書くロボットを製作せよ。
**選んだ文字 [#t1559273]
信州大学に在学しているので「信州」という文字を選んだ。
*機体の説明 [#kba7ce64]
#ref(./9542B47C-6BC4-4F74-8A30-71B21AF9C1FB.jpeg,50%,今回製作したロボット)
今回文字を書く機体を製作するにあたって私たちのチームはモーターを三つ使用した。三つのそれぞれに、
x方向(文字の横移動)
y方向(文字の縦移動)
z方向(ペンの上げ下げ)
の役割を持たせることで、機能を分割してスマートに文字を書くこと目標とした。なお「信」の字の一画目のように斜めの線を描く際にはx方向とy方向のモーターを同時に駆動することで描くことを想定した。機能の詳細は以下の説明による。

**x方向 [#p22b9650]
x方向の移動に関してはRIS付属のレールを利用して、これをモーターに噛ませることで横にスライドする機構を利用した。
#ref(./0CD5F7A6-B4EB-45D9-811C-5681B882C76A.jpeg,50%,レール)
製作の経緯に至っては、ロボットの展開等の複雑なプログラムを軽減できる点においてこの構造を製作することを決定した。なお文字を書く際のペンはこのx方向レールの右端に装着した。

***問題点と対策 [#vc87c58d]
この機構の最大の問題点は重量が大きい点であった。実際稼働中に前部が損壊することなども多くあった。この対策としては、レール部分によって前かがみになった重心を安定させるために後方にコンピュータを設置したこと、前方部分を安定させるために追加で前に車輪を取り付けて五輪構造にしたことを行った。
#ref(./7F4A866C-9305-4E49-A435-28FAF40F16A7.jpeg,60%,タイヤ)
実際に字を書いてみるとそれでも左右の重心にばらつきがみられたのでペンと反対方向のレール上にブロックを積むことで左右の重心の安定化を図った。また試行中にはレールが振り切れることが多々あった。この対策として実際字を書く際には、レールの限界部分にブロックを設置することで振り切れ防止のストッパーとして機能させた。

**y方向 [#l98c7504]
y方向の移動に関しては、一つの車輪(右前方)にモーターをつなげ車輪どうしを連結することで移動を可能にした。
#ref(./5BBFB1C5-0C9D-46A5-8E81-9269B8526949.jpeg,60%,車輪)
**z方向 [#o370f1b6]
z方向は主にペンの上げ下げとして機能した。機構としてはモーターを噛ませた歯車に、2本の棒(アーム)を接着することで上下の動きが可能になっている。(以下写真)
#ref(./881B57DC-3971-4511-AFAE-E3F0C20109EA.jpeg,50%,上げ下げ)
製作当初の段階では、タイヤを二つつかってペンを挟むことで上げ下げをする機構を考えていたが、x方向のスライドパーツとの組み合わせに難航したため、このような形をとった。細長いアーム2本でx方向の機構を支えることに不安もあったが、アームの後方部をブロックで丁寧に固定するなどの対策を経て安定した動きをすることができた。
**その他の特徴 [#o63f0957]
この機体の持ち運びの際には以下のような分解を行った。
#ref(./72028D66-BC1B-4C9D-87BB-D76DA90E7C26.jpeg,50%,分解)
見ても分かるように不具合が生じるたびに改良を行いパーツを加えていったために、少々複雑な構造をとっていて再現性に欠ける点が難点となった。次回のロボット製作の際には、最小限のパーツでよいパフォーマンスを行えるように、心掛けたい。

*プログラムの説明 [#s47b5877]
**はじめに [#w8091579]
今回プログラムにおいてAはx方向の機構。Bはz方向の機構。Cはy方向の機構。にそれぞれ対応している。またプログラムを作成するにあたって、各線のながさ(Waitの時間)の調整は、x方向とy方向において初めにwait50で進む距離を測り比を用いて長さを計算することで行った。初めに理想の数値を代入して製作した鋳型となる型は以下写真の通りである。
#ref(./28ACB87F-3920-42E7-8688-27512256FF26.jpeg,50%,鋳型)

**difine [#l792399f]
**define [#l792399f]
プログラムを書くにあたって、準備段階として今回定義したプログラムを紹介したい

 #define pen_down OnRev(OUT_B);Wait(15);Off(OUT_B);Wait(30);Float(OUT_B);Wait(100);
ペンをおろす動作である。おろした後に滑らかに着地するようにFloatを利用した。

 #define pen_up OnFwd(OUT_B);Wait(38);Off(OUT_B);
ペンをあげる動作である。持ち上げる際、自重によって若干動作が鈍くなったのでwaitの時間は微調整した。
 #define freez Off(OUT_ABC);Wait(120);
停止と静止を組み合わせたプログラムである。工夫した点としては OffをABCすべてに利かせることで逐一プログラムを書かなくしたこと、またfreezタイムとして静止時間を設けることでより安定した記述をできるように目指したことが挙げられる。
 #difine uee OnRev(OUT_C);
 #difine shita OnFwd(OUT_C);
 #difine migi OnFwd(OUT_A);
 #difine hidari OnRev(OUT_A);
 #define uee OnRev(OUT_C);
 #define shita OnFwd(OUT_C);
 #define migi OnFwd(OUT_A);
 #define hidari OnRev(OUT_A);
それぞれプログラム時の記述を簡略化するためのものである。ueeは上の方向(↑)。shitaは下の方向(↓)。migiは右の方向(→)。hidariは左の方向(←)。にそれぞれ動くようにモーターの回転を定義した。 
**「信」のプログラム [#o1f6d2db]
 task main()
 {    SetPower(OUT_A,1);      //セットパワーを最初は設定していなかったがx方向の動きを制御するために試行錯誤の末powerは1とした。なおy方向はデフォルトでpowerは7となっている。
 pen_down;
 shita;hidari;Wait(30);freez;   //一画目のはらいである。同時に↓と←に動かすことで斜めの動きを可能にした
 pen_up;
 uee;migi;Wait(20);freez;
 pen_down;
 shita;Wait(60);freez;     //二画目
 pen_up;
 migi;Wait(45);freez;
 uee;Wait(75);freez;
 pen_down;
 shita;Wait(10);freez;     //三画目
 pen_up;
 shita;Wait(10);freez;
 hidari;Wait(35);freez;
 pen_down;
 migi;Wait(60);freez;     //四画目
 pen_up;
 shita;Wait(14);freez;
 hidari;Wait(18);freez;
 pen_down;
 hidari;Wait(20);freez;     //五画目
 pen_up;
 shita;Wait(11);freez;
 pen_down;
 migi;Wait(20);freez;     //六画目
 pen_up;
 shita;Wait(11);freez;
 migi;Wait(12);freez;
 pen_down;
 shita;Wait(20);freez;     //最後の口の四角形は一筆書きでおこなった。
 hidari;Wait(40);freez;
 uee;Wait(20);freez;
 migi;Wait(40);freez;
 pen_up;
 }
***特徴 [#ubd0f4ed]
信のプログラムの特徴は主に#defineを酷使して残りは時間の調整をするだけにすることによって、複雑なプログラムになることを避けた点が挙げられる。難点としては関数をうまく使えていない点と、それによりプログラムが長くなってしまったことが挙げられる。書き順は以下の通りである。

#ref(./6FDDFAB1-D605-46D5-A213-D645A092E952.jpeg,50%,信)

**「州」のプログラム [#ea12bee3]
    SetPower(OUT_AC,1);      //serpowerを州の際には両方1にすることにした。縦の棒が多いため、より安定した縦線を書くためである。
 int n=1;    //for関数をもちいて一画目と二画目の繰り返しを行うことで文字を書いた。なおnの初期値は1とした。
 for (n=0;n<3;n++)      //n<3は二回まで動作を繰り返すことを表す。繰り返しは{}の間で行われる。
 {pen_down;
 shita;Wait(20);freez;      //一画目である。はらいは繰り返し関数を生かすために無視した。
 pen_up;
 uee;Wait(60);freez; 
 migi;Wait(15);freez; 
 pen_down;
 shita;Wait(100);freez;     //二画目。 
 pen_up;
 migi;Wait(15);freez;      //繰り返しに備えた移動。縦の秒数に関しては初期位置に戻るように設定してある。
 shita;Wait(60);freez; 
 };      //以上繰り返し(二回)
 }

***特徴 [#re1795fc]
州のプログラムの特徴は繰り返しのためにfor関数を用いたことである。これによって大幅にプログラムが簡略化され、スマートに仕上げることができた。信の文字に比べて動作が少ないこと、単純であることなどの理由によって、プログラミングもスムーズに行うことができた。次回があるならば、一画目のはらいにも挑戦したいところである。書き順は以下の通りである。
#ref(./AEDEFA1D-19D9-468F-BA95-A05EB4B5A75F.jpeg,50%,州)
*完成した作品 [#r2c509de]
#ref(./C07293E8-57CC-4812-8628-1048A131F94F.jpeg,70%,信州)

以上の機体とプログラムによって実際に「信州」を描くことができた。自分にしてはうまくできたのではないかと思う。


*反省と感想 [#y19b2e7e]
とにかくロボットを作り、それに見合ったプログラムを作ることがいかに大変かを痛感した一回目の課題だった。しかし時間を多くかけた分、作品が完成した瞬間はとても感動的でやりがいのある課題だったと思う。
主な反省点は、前述したとおり機体の構造が若干複雑になってしまった点と、setpowerやギアの調整がうまく行えずに、終始挙動が早くなっていた点である。
次回からは単純なパーツで組み立てることと、全体的にゆっくりと安定した挙動で行えるように気を付けたい。またより多くの関数を使うことも心掛けたいと思う。最後に、製作の際にとてもお世話になったパートナー、様々なアイディアを提供してくれた周りの方々、先生、そして上手く動いてくれたロボット君への感謝を込めて、終わりたい。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS