群制御を使ったお魚ゲーム

Created Date: 2019-10-16/ updated date: 2020-08-07
Owner & Collaborators
License
Summary
ボイズルールという群制御方法を用いてお魚の群れを天敵のサメから守るゲームを作る。Processingを用いて実装を行い、xbeeと3軸加速度センサでコントローラーを作製する

Materials

    Tools

      Blueprints

        Making

        • 魚の群れをサメが追いかけて、どんどん食べていく対戦型ゲーム。
          サメを操る人と、魚の群れを操る人の2人で、一定時間ゲームを続ける。
          サメが全部の魚を食べてしまったらサメの勝ち。逆に一定時間魚の群れを守り続ければ魚の群れの勝ちにする。

          ゲームの実装は"Processing"を使って行う。
          Processingがインストールされていれば、どんな環境でも動作でき、少ないコードで簡単にGUIを作成できる。
          コントローラは三軸加速度センサを使って、傾けて魚を操れるようにする。
          • Processigを使ってまず、魚の群れが泳ぐプログラムを作成した。
            魚の群れを再現するために、Boidsルールを用いた。
            • 群制御を実現するルールとして最も有名なものの1つに"Boids"ルールがある。
              "Boids"ルールには3つのルールが存在する。
              • 他の個体と近づき過ぎたら離れる
              • 近隣の群れの近くに行こうとする
              • 近隣の群れの進行方向に合わせる
              驚くことに、このたった3つのルールをプログラムで実装するだけでまるで魚の群れが泳いでいるかのような動きを実現できる。
              今回は、この3つのルールを"Processing"で実現した。

          • 魚を操るためのコントローラーを作成する。
            コントローラを傾けると魚が操れるようにしたいので、三軸加速度センサーを利用。
            コントローラにはxBeeを載っけて、ワイヤレスで操作できるようにする。
                • 抵抗240 k x2
                • 抵抗390 k x2
                • タンタルコンデンサ0.22 uF x2
                • xbee series2 x1
                • 3軸加速度センサ KXR94-2050 x1
                • 紙フェノール基盤 100x150 mm x1
                • 2mmピッチメスピンヘッダ
                • 2.54mmピッチメスピンヘッダ
                を1つのコントローラに使用する。
              • xBeeとは、無線でデータをやりとりするためのツール。
                簡単な設定で、ワイヤレス通信を簡単に実現できるのが魅力。
                40mぐらいは通信することができる。(見通しが良いところなら120m)
              • X-CTUをパソコンにインストールする。
                XbeeをUSB付きのアダプターにセットし、PCに接続する。
                X-CTUを起動し、"+"ボタンから、Xbeeと思われるデバイス名を選択する。
                "Finish"をクリックすると、設定画面が右側のウィンドウに表示される。

                今PCに接続されているXbeeに、"コーディネーター"のファームウェアを書き込む。
                PAN IDとチャンネル、アドレスをメモしておく。


              • 現在取り付けてあるXbeeを取り外し、コントローラー用に使用するXbeeをアダプターに接続する。
                コントローラー用のXbeeを"APIルーター"のファームウェアを書き込み、先ほど書き留めたPANID 、チャンネル、アドレスを設定欄に反映させる。
                こちらのXbeeには、AD0,AD1のアナログピンの情報を読み込んで、一定時間おきに値を送信するように設定する。
                通信ができれば成功。

                を参照した。
                (今後、細かな設定手順を追記するかも。)
              • EAGLEデータからkitmillを用いて基盤の切削を行った。
                完成後、さっそくハンダ付けを行い、動作確認へと...。
              • テストプログラムを使用して動作確認。
                テスト前にXbeeをPCに接続し、
                ls /dev/tty.*
                をターミナルで実行。
                Xbeeらしきデバイス名をコピー。
                プログラムのvoid setting()内のダブルコーテーションで囲まれたデバイス名を書き換えること。
                (これをしないとプログラムが実行できない。)
                準備が終わったら、Processingの再生マークを押して、プログラムを実行。
                コントローラーを傾けてみる。
                コントローラーテストプログラム
                Xbeeとの通信は無事成功!
                しかし、加速度センサーから送られるデータがおかしく、傾けてもほとんど反応しない....。

              • Xbeeは加速度センサーからのアナログ信号を読み取って、信号を送信している。
                原因はここの回路にあった。
                加速度センサーの値がXbeeで読み取れるように、抵抗で分圧してちょうどいい電圧になるように設計していた。
                が、分圧の回路に配線ミスがありXbeeに適切な信号が送られていなかった。
              • EAGLEデータを修正して、新しいコントローラを再度作成した。
                このサイトに上がっているEAGLEデータは修正が終わったものなのでそのまま使える。
              • Xbeeとの通信が適切に行われ、かつコントローラーを傾けると、テストプログラムに映し出されたボールがそれに対応して動くことを確認!
                これでコントローラーは完成!
              • 子供でも操作しやすいように、タッパーにパッケージ化した。
            • コントローラーが完成したので、
              いよいよお魚ゲームの実装へ!
              ゲームは1:30の制限時間で巨大魚に魚が食べられてしまうのか、生き残るかを競うようにした。
            • 実際に遊んでみた感じだと、少し、巨大魚が強すぎる...。
              なかなか小魚が生き残らない...。
              もう少しサメの大きさを小さくする、動きを遅くする。
              もしくは、小魚の群れを早く泳がせた方がいいのかもしれない...。

              Add Card Order

              References

                Usages

                  Project comments