今回の課題レポートは書道ロボットで自分の漢字を書き出すというものです。 私は自分の漢字から「添」という文字を選び、プログラムを作成していくことに決断しました。 先に結果を述べ、そのあとに考察と反省を述べていきます。 #contents *書道ロボット製作の結果 [#ofacd7a2] **ロボットの画像 [#yf05f778] &ref(2015a/Member/ko-rusuro-/Mission1/DSC_0187.jpg,20%); &ref(2015a/Member/ko-rusuro-/Mission1/DSC_0186.jpg,20%); **組まれたプログラム [#zda8635a] ***定義 [#gbe56aca] #define hijimigi(s,t) OnRev(OUT_C,s);Wait(t); #define tekubimigi(s,t) OnFwd(OUT_B,s);Wait(t); #define downpen OnFwd(OUT_A,10);Wait(1900);Float(OUT_A); #define uppen OnRev(OUT_A,10);Wait(1000);Float(OUT_A); #define tekubihidari(s,t) OnRev(OUT_B,s);Wait(t); #define hijihidari(s,t) OnFwd(OUT_C,s);Wait(t); #define douji(x,y,z) OnFwd(OUT_B,x);OnRev(OUT_C,y);Wait(z); #define kyuukei Off(OUT_ABC);Wait(1000); まず作成した機械を人間の腕として見る。リモコンの近くにあるモーターから順に「肘」「手首」「指」と見てプログラム名に[hijimigi]など簡単に判別出来るように名前を付けた。 例を挙げると、引数に与えた値が0以上ならば[hijimigi]でリモコン側から数えて一つ目のモーターが右に曲がり、[tekubihidari]で二つ目のモーターが左に曲がる。[uppen],[downpen]はペンを上げる、下げるという動作を表している。 [douji]は時計回りを正として肘と手首を同時に動かす動作である。[kyuukei]は動作を確認するための時間を空けるために定義したものであったが、除くことにより不具合が生じることがあったためプログラムに残している。 ***プログラムの内容 [#ace21173] sub sanzui(){//さんずいを書き始める hijihidari(15,300); kyuukei; OnFwd(OUT_A,10);Wait(2000);Float(OUT_A);//最初の一太刀 kyuukei; douji(30,-15,180); kyuukei; uppen;//一画目終了 kyuukei; douji(25,-20,600); kyuukei; downpen; kyuukei; tekubimigi(30,150); kyuukei; uppen;//二画目終了 kyuukei; douji(20,-20,600); kyuukei; downpen; kyuukei; douji(-20,25,250); kyuukei; uppen;//三画目終了 } sub uenoyatu(){//添の上のほうを書き始める douji(-25,25,1000); kyuukei; downpen; kyuukei; douji(-32,20,400);//四画目終了 ここからアームがおかしくなる kyuukei; uppen; douji(-25,30,200); kyuukei; downpen; kyuukei; douji(25,17,400);//五画目終了 kyuukei; uppen; douji(20,-20,400); kyuukei; downpen; kyuukei; douji(-40,20,350);//六画目終了 kyuukei; uppen; douji(30,-15,300); kyuukei; downpen; kyuukei; douji(18,30,300);//七画目終了 kyuukei; uppen; } sub syoumodoki(){//添の下の小の部分を書き始める douji(-30,-30,200); kyuukei; downpen; kyuukei; douji(-35,30,400); kyuukei; douji(10,-30,260);//八画目終了 kyuukei; uppen; hijihidari(30,400); kyuukei; downpen; kyuukei; douji(-30,35,200);//九画目終了 kyuukei; uppen; tekubimigi(30,300); kyuukei; downpen; kyuukei; hijimigi(35,200);//十画目終了 kyuukei; uppen; tekubimigi(30,100); kyuukei; downpen; kyuukei; hijimigi(35,150);//十一画目終了 kyuukei; } task main(){ sanzui(); kyuukei; kyuukei; uenoyatu(); kyuukei; kyuukei; syoumodoki(); OnRev(OUT_A,10);//ペンを上げて終了 Wait(2000); } **書き出された「添」という文字 [#jdae9c80] 注)右に90度回転させて見るのが正しい見方である。 注)時計まわりに90度回転させて見るのが正しい見方である。 #ref(2015a/Member/ko-rusuro-/Mission1/DSC_0190.jpg,20%); ***作成時間 [#ef5bb0f0] ロボットの組み立て時間 約4時間 プログラム作成時間 約13時間 レポート作成時間 約2時間半 *考察と反省 [#hb42bcc3] ここでは前に示されたような字を描くロボットの製作過程での克服した点、その反対に克服できなかった点を述べていく。 **ロボットの組み立て [#va46bdd3] グループ三人で集まり自分が思い描く書道ロボットを説明していき、どのロボットが漢字を上手く描くことが出来るかを考え、意見を一致させて作りだすことが出来た。頭の中ではどんな字も描けるロボットになっていました。 この時に考えられる最良の策を試しているので反省点は無い **プログラム制作初期 [#qd066939] メンバーが様々な問題に気づき始めました ***解決可能だった問題 [#ac5bad59] -アームの先端が重く動くたびにロボットが最初の位置からずれる。 --これは二つのタイヤを滑り止め、バッテリーをおもりとして根本に付けることで安定することに成功した。 -ロボットがもろく崩れやすかった --他のパーツで補強、またはぴったり合う、つまりがっちりと固定されて動かなくなるような部品を使うことで解決した。 ***解決には至らなかった問題 [#wef53bc1] -プログラムが同じだが動かすたびに動きが変わっていく --電池の消耗、初めのペンの位置の微妙な変化によるものだと推測される。 -電池が減ることにより力が足りずギアが回らなくなる **プログラム制作中盤 [#r4e71c16] 複雑な動きをするようになり現れた問題を解決していく ***解決した問題 [#ffc5e6c7] -BとCのギアを同時に動かす時Cのギアが左に回る時上手く噛み合わなくなる --ギアの部分に動く余裕が出来ていたためこのような事態が起きた。~なので、動かないように部品を足すことで解決した。 **プログラム制作終盤 [#z19d0b34] 初期に解決出来なかった問題はまだ解決出来ないまま諦め、最善の策を見つけることにした。 ***対応した問題 [#j25aa695] -電池の消耗によりギアが回らなくなる問題 --電池が消耗した状態でもある程度プログラムを作り、作り終えたところで新しい電池に変えて電池のパワーが一番強い状態でロボットを動かすようにする。 ***対応できなかった問題 [#p35736b2] -同じプログラムでも動かす度に動作が変わってくる *感想 [#qf8726a3] プログラムを組む前のロボットを造る過程でどのようなプログラムを作り動かすのか、それは簡単なプログラムなのか、繰り返しの動作が有効なのかなど色々なことを考えていかなければならないということを痛感しました。 困難だと感じたら立ち止まり、続けるべきか否かをゆっくりと考え、諦めることを躊躇しないということも重要だと思いました。