scar 僕です。音楽制作を頑張りました。blackcatさんと切磋琢磨して作りました。
toshi 僕から言わせると神でした。アイデアの神です。
yoshi 僕から言わせると神でした。創造神です。
blackcat 彼にはセンスがありました。ボケの。
紙パックを所定の位置から所定の位置に運搬する。
フィールドの説明
フィールドは課題1で使用した紙を2枚つなぎ合わせる (向きは自由)
白い紙パックと黒い紙パックがそれぞれ3個づつ対角のゴール(課題1のゴール)に置かれている (前1個、後2個の2列に配置する)
2枚の紙のつなぎ目に断面が約3cm×4cmの角材を両面テープまたは押しピンで貼り付ける。
黒い線の幅は20mmとする
白い紙パックと黒い紙パックを入れ替える。
競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
課題1のスタート地点からスタートする。
スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。
開始の合図から5秒以内にスタートボタンを押す作業を完了すること。
競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。
最終的にゴールに運び込まれた紙パックの数で点数を計算する。
運びこまれた紙パックに1個つき5点。
紙パックが半分以上ゴールからはみ出している場合は、1個1点、はみ出している部分が半分未満の場合は1個3点とする
以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。
得点の目安:
紙パックまでたどり着く動作 (3点)
紙パックを運ぶ動作(2点)
障害物を越える動作 (4点)
2台以上のロボット、あるいは単体のロボットの場合は2台のRCX,NXTの連携の良さ(3点)
自立型のロボットとしての形や動作の美しさ、斬新さ(3点) その他 (4点)
最初の頃はロボコンのコースの障害である木材を越えようと、箱を挟んで持ち上げる構造をモーター一つで成し遂げようとしました。しかし、テストなどもあり、なかなかメンバーで集まれなくロボット作成の時間も疎かになったのでそれは諦めました。そして試行錯誤して出来たのがこのロボットです。
基本的にシンプルな構造になりました。あまりにもごちゃごちゃするとプログラムを考える時間がなかったので良かったです。前に付いているアームをモーターで動かし、木材の向こう側にある紙パックを囲み、引くというスタイルに落ち着きました。
紙パックを運ぶ機構については非常にわかりやすいyoshiさんとtoshiさんの説明があるのでそちらのurlを貼っておきます。
http://yakushi.shinshu-u.ac.jp/robotics/?2012b%2FMember%2Fyoshi%2FMission2#w85034af
http://yakushi.shinshu-u.ac.jp/robotics/?2012b%2FMember%2Ftoshi%2FMission2#z3e6d840
一番の反省点は仕方ないといえばいい訳になりますけど、アイデアが出なくてあまりロボット製作に関われなかったことです。前のロボコンのロボットなどを参考にして色々考えたらよかったです。
僕たちは全ての箱を運ぶプログラムを作るにはあまりに時間がなく、能力もなかったので時間指定で確実に2個の箱を運ぶことにしました。 ですが、僕とblackcatさんはあまり役にも立たないのと時間指定のプログラムに4人もいらないのとで暇になってしまったので、ゼルダの伝説のメインテーマ(作曲 近藤 浩治さん)の音楽作成をすることになりました。
まず、箱を運ぶプログラムはyoshiさんのurlを貼っておきます。
http://yakushi.shinshu-u.ac.jp/robotics/?2012b%2FMember%2Fyoshi%2FMission2#o721ccc9
次に音楽のプログラムですが、ゼルダの伝説のメインテーマ自体少し長いのでそれをプログラムで表現しようと思ったら非常に長くなってしまいました。
まずは定義ですが、見てもわかるように音域はたくさんあります。音域が1オクターブあがると周波数も2倍になることを計算してまで高い音を表現しました。
#define DO1 523 #define DO2 554 #define RE 587 #define REE 622 #define MI 659 #define MII 685 #define FA 698 #define FAA 740 #define SO 784 #define SOO 831 #define RA 880 #define RAA 932 #define SI 988 #define DO 1047 #define DOO 1108 #define RE2 1174 #define REE2 1244 #define MI2 1318 #define FA2 1396 #define FAA2 1480 #define SO2 1568 #define SOO2 1662 #define RA2 1760 #define RAA2 1864
次に音楽プログラムですが、区切りのいい所で行を空けています。 play_musicというサブルーチンでtask mainで流します。
task play_music() { while (true) { /* 時間の単位は1/1000秒 */ PlayTone(RAA,950); Wait(1000); PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,100); Wait(300); PlayTone(SOO,100); Wait(150); PlayTone(RAA, 700); Wait(800);
PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,70); Wait(120); PlayTone(RAA,100); Wait(300); PlayTone(SOO,100); Wait(150); PlayTone(RAA, 700); Wait(800);
PlayTone(RA,200); Wait(400); PlayTone(FA,600); Wait(900); PlayTone(RAA,100); Wait(250); PlayTone(RAA,100); Wait(80); PlayTone(FA,100); Wait(100); PlayTone(RAA,100); Wait(130); PlayTone(RAA,100); Wait(130); PlayTone(DOO,100); Wait(130); PlayTone(REE2,500); Wait(800); PlayTone(FA2,100); Wait(150); PlayTone(FA2,100); Wait(150); PlayTone(FAA2,100); Wait(150); PlayTone(SOO2,440); Wait(550); PlayTone(RAA2,100); Wait(150); PlayTone(RAA2,100); Wait(150); PlayTone(SOO2,100); Wait(150); PlayTone(FAA2,100); Wait(150); PlayTone(SOO2,100); Wait(400); PlayTone(FAA2,100); Wait(150); PlayTone(FA2,400); Wait(700);
この上の音楽だけは最後まで頑張っても表現しきれませんでした。
PlayTone(FA2,300); Wait(400); PlayTone(REE2,100); Wait(200); PlayTone(REE2,70); Wait(100); PlayTone(FA2,70); Wait(100); PlayTone(FAA2,500); Wait(800); PlayTone(FA2,150); Wait(200); PlayTone(REE2,150); Wait(200); PlayTone(DOO,100); Wait(200); PlayTone(DOO,70); Wait(100); PlayTone(REE2,70); Wait(100); PlayTone(FA2,500); Wait(800); PlayTone(REE2,150); Wait(200); PlayTone(DOO,150); Wait(200); PlayTone(DO,100); Wait(200); PlayTone(DO,70); Wait(100); PlayTone(RE2,70); Wait(100); PlayTone(MI2,500); Wait(800); PlayTone(SO2,400); Wait(500); PlayTone(FA2,100); Wait(200);
PlayTone(RAA,100); Wait(400); PlayTone(FA,600); Wait(900); PlayTone(RAA,100); Wait(120); PlayTone(RAA,100); Wait(120); PlayTone(DOO,100); Wait(120); PlayTone(REE2,100); Wait(120); PlayTone(FA2,100); Wait(120); PlayTone(FA2,600); Wait(1000);
PlayTone(FAA2,100); Wait(300); PlayTone(SOO2,100); Wait(120); PlayTone(SOO2,100); Wait(120); PlayTone(SOO2,100); Wait(120); PlayTone(RAA2,400); Wait(800); PlayTone(DO2,500); Wait(600); PlayTone(DOO,100); Wait(300); PlayTone(RA,500); Wait(800);
PlayTone(FA,300); Wait(400); PlayTone(FAA,900); Wait(1300); PlayTone(RAA,300); Wait(400); PlayTone(RA,100); Wait(450); PlayTone(FA,600); Wait(900); PlayTone(FA,300); Wait(400); PlayTone(FAA,900); Wait(1300); PlayTone(RAA,300); Wait(400); PlayTone(RA,100); Wait(450); PlayTone(FA,600); Wait(900);
PlayTone(DOO,300); Wait(400); PlayTone(REE2,900); Wait(1300); PlayTone(FAA2,300); Wait(400); PlayTone(FA2,100); Wait(450); PlayTone(DOO,600); Wait(900); PlayTone(RAA,300); Wait(400); PlayTone(DO,100); Wait(200); PlayTone(DO,70); Wait(100); PlayTone(RE2,70); Wait(100); PlayTone(MI2,500); Wait(800); PlayTone(SO2,400); Wait(500); PlayTone(FA2,100); Wait(200); } } task main() { start play_music ; }
箱を運ぶプログラムもtoshiさんとyoshiさんに任せっきりで僕は役に立たなかったことです。
後は音楽ですけど、このゼルダの伝説のメインテーマをしようとしたことが少し反省です。すごく長くてかなり辛かったです。やりはじめは音楽制作は慣れないので下手くそな音楽しか作れませんでしたけど、どんどんやっていくうちに慣れてきて最初の頃に作った音楽もクオリティアップのため作りなおすというかなり手間なことをしてしまったりもありました。でもこの意味のない作業もロボコンでも多少の意味はあっただろうし、1人も欠けなかった4人のメンバーの絆も深まった気がしたので良かったと思います。
ロボコンの結果は箱を1つ運べ、6チーム中3位という結果でした。
この子はその賞品です。先生、ありがとうございました!
正直このゼミは辛かったです。でも最後まであきらめたくないし、仲間のおかげで最後までいられました。このゼミを今後に生かせたらいいと思います。