2012b/Member

ロボコン2

課題 紙パック運搬ロボット

紙パックを所定の位置から所定の位置に運搬する。

100,ロボコン図

フィールドの説明

  • フィールドは課題1で使用した紙を2枚つなぎ合わせる (向きは自由)
  • 白い紙パックと黒い紙パックがそれぞれ3個づつ対角のゴール(課題1のゴール)に置かれている (前1個、後2個の2列に配置する)
  • 2枚の紙のつなぎ目に断面が約3cm×4cmの角材を両面テープまたは押しピンで貼り付ける。
  • 黒い線の幅は20mmとする

ルール

基本ルール

  • 白い紙パックと黒い紙パックを入れ替える。
  • 競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
  • 課題1のスタート地点からスタートする。
  • スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。
  • 開始の合図から5秒以内にスタートボタンを押す作業を完了すること。
  • 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
  • 途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。
  • 最終的にゴールに運び込まれた紙パックの数で点数を計算する。

基本得点の計算方法

  • 運びこまれた紙パックに1個つき3点5点。ただし、紙パックを2段または3段に積み上げた場合は、2段目の紙パックを6点、3段目の紙パックを9点とする。
  • 紙パックが半分以上ゴールからはみ出している場合は、1個2点1点、はみ出している部分が半分未満の場合は1個2点3点とする
  • 一部がゴールの外にはみ出た出た紙パックの上に積み上げられた紙パックは、何段目であっても各3点とする。

技術点の計算方法 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。

得点の目安:

  • 紙パックまでたどり着く動作 (3点)
  • 紙パックを運ぶ動作(2点)
  • 障害物を越える動作 (4点)
  • 2台以上のロボット、あるいは単体のロボットの場合は2台のRCX,NXTの連携の良さ(3点)
  • 自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
  • その他 (4点)

メンバー紹介

  • yoshi・・・機体の制作からプログラミングまで主要な作業を黙々とこなすエリート、みんなの希望の星。
  • toshi・・・yoshiとともに機体の制作やプログラミングに携わる。彼の助言は大いにチームを救った。
  • scar・・・主に音楽担当。ドラム経験者。完璧を追求しようとするため音楽制作は困難を極めた。
  • blackcat・・・このページの製作者。主に音楽担当。チームのみんなからはネタ担当と呼ばれるが本人は認めていない。前回のロボコンでは呪いの曲を制作したことで一部で有名になった。今回はscarを引き込み音楽を作ることに全力をかけた。

ロボット紹介

  • 私たちが最終的に作ったロボットは次のようなものです。
  • これが完成するまでに何度も改良がなされました。
  • 紙パックがうまくつかめない度に改良されていったのでかなり時間がかかりました。
  • ちなみにロボットは二台ありますが、今回はほぼ同じ機構でほぼ同じプログラムを時間差で遂行するというものなので紹介するのは片方だけです。
ロボ図
  • まず、赤い線で囲まれた紙パックを回収するための機構について解説します。
ロボ図
ロボ図
  • 上の図のようにロボット上部の機構は動きます。
  • かなりシンプルな動きです。
  • しかし、この機構には様々な工夫がなされています。
ロボ図
  • まず、上図の黄色い線で囲まれたモーター部分についてですが、ロボットの腕(紙パックを回収するための機構)がモーターに直接ついていると腕の自由度が少なく、うまく動かさないと腕が空中で固定されてしまうことがしばしばあります。
  • 特に紙パックを回収するときが問題でした。
  • そこで、ゴムによる弾性力を活かして腕に伝わる力を弱め腕の自由度をあげてあります。
ロボ図
  • 次に上図にある腕の部分についてですが、黄色い線のなかのタイヤと赤い線で囲まれた棒はパックを捕獲する際に重要な役割を果たします。
  • タイヤはゴムの摩擦力でパックを引き寄せたり、腕の先端の重みをますことによりモーターと連動する輪ゴムの効果も相まって腕がパック捕獲時にちゃんと地面まで届くようになっています。
  • 赤い線のなかの棒は、パック捕獲時の精度をより一層あげることに一役かっています。
ロボ図

            ↓

ロボ図

            ↓

ロボ図
  • うまくいけば上図のような状態までもっていくことができます。
  • 紙パックを押すときは下図のように腕は完全にあげた状態で機体の前部に取り付けられた棒で押します。
ロボ図

             ↓

ロボ図

             ↓

ロボ図

考察

  • 欠点をあげるとするならばアームが弱すぎることと光センサーが意味もなく取り付けられていることだろう。
  • まず、アームについてはモーターの力が弱まると、つまり電池が切れてくると輪ゴムとの連動により余計に腕に力が入らず、なんとも歯切れの悪い運動になってしまいがちだ。
  • そして、アーム自体ももろく紙パックの捕獲が正常に行われない場合(紙パックが倒れたり、斜めになったりした場合)に機体は無理やり運ぼうとするが、腕が耐え切れずに先に破損してしまう。
  • なんとも脆弱なやつなのだ。
  • 次に光センサーについてだが、なぜこんなところにプログラム上では使用しなかった光センサーがついているかというと、もともとはライントレースをする機体だったからだ。
  • しかし、ライントレースをしながら紙パックを運ぶのは、私たちの力ではなかなか困難を極めるという結論に至り、ほぼタイマーに頼るという暴挙にでた。
  • よって、数世代前の名残として光センサーは取り付けられたまま残っているのだ。
  • 誰も取り外して機体を軽量化させようとしなかったことがすごい。

プログラムの紹介

主なプログラムは下のURLを参照してください。

[http://yakushi.shinshu-u.ac.jp/robotics/?2012b%2FMember%2Fyoshi%2FMission2]

私はscarさんと音楽づくりに没頭していたので音楽のみのプログラムを貼り付けておきたいと思います。

ちなみに曲は誰もが一度は耳にしたことのあるであろうゼルダの伝説のメインテーマです。

ゼルダの伝説のメインテーマ

まず、はじめに音階をすべて定義することから始めたのですが、音域があまりにも広いので苦労しました。

音階は一オクターブあがるごとに周波数が二倍になることを考慮して、頑張って計算しながら作りました。

#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 

下の曲のプログラムは決して完璧ではないです。間違いもあります。しかし、調整の甲斐あってどうにか聞けるレベルには達していると思います。

私たちの汗と涙の結晶です。

 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 ;
}

反省点

  • やはり、音楽の才能が本気で皆無の私が関わって作ったため、当初、完璧な音楽を作ろうと意気込んでいたにもかかわらず、最後の最後まで音階が分からず投げ出してしまったことをscarさん含めチームのみんなに申し訳なく思う。
  • 曲自体はscarさんと代わりばんこで作った。よって、私の調節した箇所は、scarさんと精度が違う。
  • それでも前回の課題のときよりは格段に腕は上達した気がする。いや、それは間違いない。
  • 結果的には、曲をロボコンで流すことによりパフォーマンス点がもらえたので頑張った甲斐はあったと思う。
  • 次にまた曲を作る機会があれば、音をはずすということだけは避けられるようにしたい。

ロボコンの成果

私たちのチームは努力の甲斐あって、6チーム中3位という結果になりました。これには大いに驚き、喜びました。

ちなみに得点は紙パックを運んだ得点5点と技術点15.8点で合計20.8点でした。

ロボ図

これはロボコンの景品です。最近のLEGOのパーツはすごい進化してるなと感じました。

まとめ

反省点

今回、私は音楽制作ばかりに没頭していて、完全に作業は分担されていたのですが、もっとアイデアを提供したりすればよかったかなと感じます。(いや、実際は出しても却下されていたのだが・・・)

感想

  • 今回は前回の課題のときとは違い、仲間とちゃんと連携してやっていけたことがとてもよかったと思います。
  • チームワークもほかのチームは脱落者がいたりもしましたが、このチームはほぼ毎回みんな集まるし、すごくいいチームでした。
  • ロボットには初心者の集まりだったのに、ロボコンで最後にちゃんと結果を残せたことを誇りに思います。ロボコンでは、とても感動しました。
  • 私は、プログラムを組むのはこの授業が初めてで、正直全くついていけていませんでしたが、最後まで頑張ってやってきてよかったと心から思いました。

添付ファイル: filea13.jpg 138件 [詳細] filea12.jpg 63件 [詳細] filea11.jpg 130件 [詳細] filea10.jpg 126件 [詳細] filea9.jpg 138件 [詳細] filea8.jpg 131件 [詳細] filea7.jpg 116件 [詳細] filea6.jpg 141件 [詳細] filea5.jpg 125件 [詳細] filea4.jpg 132件 [詳細] filea3.jpg 134件 [詳細] filea2.jpg 129件 [詳細] filea1.jpg 140件 [詳細] fileロボコン2.png 121件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-02-13 (水) 04:38:26 (2381d)