ゲームの構想0魚の群れをサメが追いかけて、どんどん食べていく対戦型ゲーム。サメを操る人と、魚の群れを操る人の2人で、一定時間ゲームを続ける。サメが全部の魚を食べてしまったらサメの勝ち。逆に一定時間魚の群れを守り続ければ魚の群れの勝ちにする。ゲームの実装は"Processing"を使って行う。Processingがインストールされていれば、どんな環境でも動作でき、少ないコードで簡単にGUIを作成できる。コントローラは三軸加速度センサを使って、傾けて魚を操れるようにする。Add Annotation Order
まずは、Boidsルールで遊ぶ0Processigを使ってまず、魚の群れが泳ぐプログラムを作成した。魚の群れを再現するために、Boidsルールを用いた。Boidsルールとは?0群制御を実現するルールとして最も有名なものの1つに"Boids"ルールがある。"Boids"ルールには3つのルールが存在する。他の個体と近づき過ぎたら離れる近隣の群れの近くに行こうとする近隣の群れの進行方向に合わせる詳しくはこちら : Boidsシミュレーション-WonderPlanet DEVELOPER BLOG驚くことに、このたった3つのルールをプログラムで実装するだけでまるで魚の群れが泳いでいるかのような動きを実現できる。今回は、この3つのルールを"Processing"で実現した。Boidsルールで魚を動かしてみる0Processingで魚の群れが画面をおよくプログラムを作成した。以下のURLからプログラムをダウンロードできる。ボイズルールのプログラムProcessingで実行すると、魚の群れのように丸い玉が画面を自由に移動する。Add Annotation Order
Boidsルールとは?0群制御を実現するルールとして最も有名なものの1つに"Boids"ルールがある。"Boids"ルールには3つのルールが存在する。他の個体と近づき過ぎたら離れる近隣の群れの近くに行こうとする近隣の群れの進行方向に合わせる詳しくはこちら : Boidsシミュレーション-WonderPlanet DEVELOPER BLOG驚くことに、このたった3つのルールをプログラムで実装するだけでまるで魚の群れが泳いでいるかのような動きを実現できる。今回は、この3つのルールを"Processing"で実現した。
Boidsルールで魚を動かしてみる0Processingで魚の群れが画面をおよくプログラムを作成した。以下のURLからプログラムをダウンロードできる。ボイズルールのプログラムProcessingで実行すると、魚の群れのように丸い玉が画面を自由に移動する。
コントローラーの作成0魚を操るためのコントローラーを作成する。コントローラを傾けると魚が操れるようにしたいので、三軸加速度センサーを利用。コントローラにはxBeeを載っけて、ワイヤレスで操作できるようにする。必要なもの0抵抗240 k x2抵抗390 k x2タンタルコンデンサ0.22 uF x2xbee series2 x13軸加速度センサ KXR94-2050 x1紙フェノール基盤 100x150 mm x12mmピッチメスピンヘッダ2.54mmピッチメスピンヘッダを1つのコントローラに使用する。xBeeとは0xBeeとは、無線でデータをやりとりするためのツール。簡単な設定で、ワイヤレス通信を簡単に実現できるのが魅力。40mぐらいは通信することができる。(見通しが良いところなら120m)PC側のxBeeの設定0X-CTUをパソコンにインストールする。XbeeをUSB付きのアダプターにセットし、PCに接続する。X-CTUを起動し、"+"ボタンから、Xbeeと思われるデバイス名を選択する。"Finish"をクリックすると、設定画面が右側のウィンドウに表示される。今PCに接続されているXbeeに、"コーディネーター"のファームウェアを書き込む。PAN IDとチャンネル、アドレスをメモしておく。コントローラー側のXbeeの設定0現在取り付けてあるXbeeを取り外し、コントローラー用に使用するXbeeをアダプターに接続する。コントローラー用のXbeeを"APIルーター"のファームウェアを書き込み、先ほど書き留めたPANID 、チャンネル、アドレスを設定欄に反映させる。こちらのXbeeには、AD0,AD1のアナログピンの情報を読み込んで、一定時間おきに値を送信するように設定する。通信ができれば成功。細かい設定は:XBeeで作るワイヤレスセンサーネットワークを参照した。(今後、細かな設定手順を追記するかも。)回路の作成0コントローラの回路を作成する。下に回路設計ソフトEAGLEで作成した回路図を載っけた。EALGEのコントローラのスケマティックEAGLEのコントローラーのボード基盤の切削とハンダ付け0EAGLEデータからkitmillを用いて基盤の切削を行った。完成後、さっそくハンダ付けを行い、動作確認へと...。動作確認---->完成っと思いきや0テストプログラムを使用して動作確認。テスト前にXbeeをPCに接続し、ls /dev/tty.*をターミナルで実行。Xbeeらしきデバイス名をコピー。プログラムのvoid setting()内のダブルコーテーションで囲まれたデバイス名を書き換えること。(これをしないとプログラムが実行できない。)準備が終わったら、Processingの再生マークを押して、プログラムを実行。コントローラーを傾けてみる。コントローラーテストプログラムXbeeとの通信は無事成功!しかし、加速度センサーから送られるデータがおかしく、傾けてもほとんど反応しない....。原因特定へ0Xbeeは加速度センサーからのアナログ信号を読み取って、信号を送信している。原因はここの回路にあった。加速度センサーの値がXbeeで読み取れるように、抵抗で分圧してちょうどいい電圧になるように設計していた。が、分圧の回路に配線ミスがありXbeeに適切な信号が送られていなかった。EAGLEを修正。再度切削、ハンダ付け0EAGLEデータを修正して、新しいコントローラを再度作成した。このサイトに上がっているEAGLEデータは修正が終わったものなのでそのまま使える。動作確認確認 (再)0Xbeeとの通信が適切に行われ、かつコントローラーを傾けると、テストプログラムに映し出されたボールがそれに対応して動くことを確認!これでコントローラーは完成!パッケージ化0子供でも操作しやすいように、タッパーにパッケージ化した。Add Annotation Order
必要なもの0抵抗240 k x2抵抗390 k x2タンタルコンデンサ0.22 uF x2xbee series2 x13軸加速度センサ KXR94-2050 x1紙フェノール基盤 100x150 mm x12mmピッチメスピンヘッダ2.54mmピッチメスピンヘッダを1つのコントローラに使用する。
PC側のxBeeの設定0X-CTUをパソコンにインストールする。XbeeをUSB付きのアダプターにセットし、PCに接続する。X-CTUを起動し、"+"ボタンから、Xbeeと思われるデバイス名を選択する。"Finish"をクリックすると、設定画面が右側のウィンドウに表示される。今PCに接続されているXbeeに、"コーディネーター"のファームウェアを書き込む。PAN IDとチャンネル、アドレスをメモしておく。
コントローラー側のXbeeの設定0現在取り付けてあるXbeeを取り外し、コントローラー用に使用するXbeeをアダプターに接続する。コントローラー用のXbeeを"APIルーター"のファームウェアを書き込み、先ほど書き留めたPANID 、チャンネル、アドレスを設定欄に反映させる。こちらのXbeeには、AD0,AD1のアナログピンの情報を読み込んで、一定時間おきに値を送信するように設定する。通信ができれば成功。細かい設定は:XBeeで作るワイヤレスセンサーネットワークを参照した。(今後、細かな設定手順を追記するかも。)
動作確認---->完成っと思いきや0テストプログラムを使用して動作確認。テスト前にXbeeをPCに接続し、ls /dev/tty.*をターミナルで実行。Xbeeらしきデバイス名をコピー。プログラムのvoid setting()内のダブルコーテーションで囲まれたデバイス名を書き換えること。(これをしないとプログラムが実行できない。)準備が終わったら、Processingの再生マークを押して、プログラムを実行。コントローラーを傾けてみる。コントローラーテストプログラムXbeeとの通信は無事成功!しかし、加速度センサーから送られるデータがおかしく、傾けてもほとんど反応しない....。
原因特定へ0Xbeeは加速度センサーからのアナログ信号を読み取って、信号を送信している。原因はここの回路にあった。加速度センサーの値がXbeeで読み取れるように、抵抗で分圧してちょうどいい電圧になるように設計していた。が、分圧の回路に配線ミスがありXbeeに適切な信号が送られていなかった。
お魚ゲームの実装0コントローラーが完成したので、いよいよお魚ゲームの実装へ!ゲームは1:30の制限時間で巨大魚に魚が食べられてしまうのか、生き残るかを競うようにした。プログラムコード0ゲームプログラムを作成。XbeeをPCに接続し、テストプログラム同様、デバイス名を書き換えてプログラムを実行すること.お魚ゲームプログラムAdd Annotation Order
実際に遊ぶ0実際に遊んでみた感じだと、少し、巨大魚が強すぎる...。なかなか小魚が生き残らない...。もう少しサメの大きさを小さくする、動きを遅くする。もしくは、小魚の群れを早く泳がせた方がいいのかもしれない...。Add Annotation Order
Comments