自由研究:pygame対応の自作ゲーム機開発プロジェクトの進捗報告
現在の状況
完了したこと
- BBM(ブレッドボードモデル)によるサンプルゲーム動作確認済み
- ハードウェアのパーツ等選定済
- コントローラー基板の設計・発注完了
- 筐体のサイズチェック完了
1か月以内に完了予定
- プラスチック筐体の3Dモデル生成
- pygameのデータを読み込み管理するネイティブアプリ 実装
- 展示用プロトタイプの組み立て最終チェック
これまでの作業の流れ
開発の意義など
ソフトウェアとハードウェアの開発チームMulesとして、これまでなかった開発する喜びを実感できる、学ぶ機会を拡充するようなカスタムしやすいゲーム機の製作にチャレンジした記録です。
既存のゲーム機では、製作技術の秘匿の必要性からハッキングが難しい構造になっています、これはビジネス上やむを得ない措置と理解しています。
一方昨今のOSSの進展、電子工作ノウハウの民主化の進展の流れを汲み、OSSなどMITライセンスなどの自由度が高い技術を中心にゲーム機をつくることによって、コードによるカスタム、電子工作による拡張がやりやすい等、
プログラミング~電子工作について工学全般の教育上有意義なメリットがある、技術者が開発の楽しみを実感できるゲーム機があると面白いのではと考えオープンな開発を進めました。
BBM(ブレッドボードモデル)は動作確認完了・プロトタイプ1号の最終パーツの手配発注組み立てテスト完了予定であり、現在Maker Fair Tokyo への出展を申請中です。
構造図概略
下記のような構造で製作を進めています。
OS選定 とフレームワーク選定
中核ハードウェアについて
中核ハードウェアはラズベリーパイ3を採用しました。これはコマンドもコードも実行できるLinux環境であり、価格面なども含めカスタムのしやすさから迷わず採用しました。
OS選定について
ラズパイだと画面が切れて、動きもなにかおかしい・・・ラズパイのアーキテクチャが想定されてないのかもしれない、UbuntuMateのようにラズパイアーキテクチャがターゲットとして開発されたOSのほうがより良いかもということで採用見送りました。
- Ubuntu Mate
Ubuntuのように画面が切れたりしない、ラズパイ向けにセッティングされている感じで良い。しかし、1点だけ、自前のゲームの起動ソフトウェアがElectron製で実装中だが、UbuntuMateでは動かない可能性があり、見送りました。
- Windows IoT Core
Windows IoT Core は、Unityやpygameなどのフレームワークをラズパイ上で実行という目的は想定されていないようで、インストールには成功してデモをいじってみたものの、今回の目的は達成できない仕様なので見送りました。
ちょっと進捗。windows10 IoT core インストール成功。これで試行錯誤幅が広がるかな… ぼちぼちやろ… pic.twitter.com/1XMMmoAK7v
— mawa (@k_mawa82) 2019年4月2日
Raspbianを採用
→結局、Electornプロジェクトの動作確認ができるかつ、pygameの動作確認ができるRaspbian を採用することになりました。
ゲームのビルド形式・対応フレームワークの検討について
AWS S3にjsファイル群をアップロードして静的ホスティング配信を試しましたが、HTTP通信だとラズパイでは遅すぎるので採用を見送りました。(スマホすごいと実感。)
- Unity Android Build
これだと専用ソフトがいるなど設定がマニアックになりすぎる
- Unity for Linux Build
RaspbianOSでLinuxBuildが動作確認とれず。検証中。
結論
pygameを採用
→python製ゲームフレームワークの実装カスタマイズの手軽さが際立っていました。サンプルゲームの主要コードもpythonファイル1つだけ計400行程度という理解しやすいボリュームであること。ラズパイなどのPythonフレンドリーな基板もあるためコントローラー開発もUSBにつなげば即実行可能であること、また、python製フレームワークの多い機械学習フレームワーク(ex. tensorflow, chainer等)があることを背景に、ゲームAI開発もpythonコードに直接組み込めるので教育用に向いていると判断。サンプルゲームの動作確認もとれたので採用しました。
3:BBM(ブレッドボードモデル)製作
コントローラーの回路実装 →キーボードのキーを指定した回路により 過去のゲームも遊びやすくできるようにする
秋月電子で購入何度も通いました^^
久しぶりの秋月!(^-^)/ 半年ぶりくらいかな…(^-^) pic.twitter.com/KhKdjOauOh
— mawa (@k_mawa82) 2019年3月28日
キーボード回路の実装部品・キット専門のお店にも訪問しました^^
今日はキーボードまわりの仕組みが知りたくて秋葉原の自作キーボードのお店に行きました!(^-^)/ 遊舎工房ってお店です。いい感じでした!(^-^)/ #遊舎工房 pic.twitter.com/Z6DKK8ryQx
— mawa (@k_mawa82) 2019年4月5日
ハード開発は自宅のこちらで行ってます。
今週も始まりました頑張るぞ~(^-^)/ 今週も試行錯誤していきます! pic.twitter.com/dIOA2cDzvY
— mawa (@k_mawa82) 2019年4月8日
ピンヘッダの並びが互換基板だと同じではない模様。
arduino互換機のwhat's next?を試しにLチカ。 #電子工作 pic.twitter.com/n5E3mPAFlO
— mawa (@k_mawa82) 2019年4月6日
ArduinoUNOが見た目多機能そうで自宅に在庫があったので、実装ためしたところ、キーボード化のモジュール非対応でした・・・ ArduinoLeonard、ArduinoMicroなどが対応機種だったようです。もういちど秋月に行ってトライ!
ArduinoMicroで再チャレンジ。まずは1キーのキーボードを製作。
【画面が暗すぎたため再投稿】今日の進捗。"a"だけが打てる自作キーボードを組み立ててみました(^-^) #arduino pic.twitter.com/FMflGZnK4S
— mawa (@k_mawa82) 2019年4月11日
左右、スペースキーを割り当てた3キーをブレッドボードにセット。無事BMMが動きました^^
無事プロトタイプが動いたので最近チャレンジしてるものを公開します(^-^)自分で好きなだけカスタムできるオリジナルのゲーム筐体です(^-^)/ ゲームは #pygame のサンプルです。自分は主にハードウェア担当してます #Arduino #RaspberryPi pic.twitter.com/SDe0P5YtJB
— mawa (@k_mawa82) 2019年4月12日
なお、ディスプレイは3.5インチのものを採用。これはラズパイのGPIOピンの拡張モジュールつきQumanというメーカーのものを採用しました。そのため、GPIOピンは引き続き実装できます。電源ON・OFFボタンを実装予定です。
4:コントローラー部分の基板製作
Kicadを利用しました。KicadとEagleを知ってましたが、Eagleはたしか基板情報の利用可能範囲がKicadより狭いという情報を聞いたのと、以前Kicadの基礎を指南いただく機会があったため慣れ親しんでいるKicadで開発しています。
まずはBBMで最初に作った1キーキーボードを回路設計。デバッグも行えることを確認。
回路設計中…オッ!それっぽい・・・^^ 今週はやるぞう^^/ pic.twitter.com/rMlFcivcB5
— mawa (@k_mawa82) 2019年4月22日
Lチカの簡単な回路発注まではしたことがありましたが、複雑な回路設計は初めてで、ここで2層以上で配線の必要に迫られました。
ウッ!ピンがたくさんあると1面だけの配線は厳しいことがあるんだな!(>_<) 明日以降にチャレンジ! pic.twitter.com/knu13NIqCa
— mawa (@k_mawa82) 2019年4月22日
と、いうことで、貫通ビアのノウハウを仕入れました。楽々2層配線。
裏をくぐらせる技を習得!^^/ 貫通ビアという裏面に抜ける導線つき穴をあけるという意味合いのようです^^ #kicad pic.twitter.com/bUZuAdCziL
— mawa (@k_mawa82) 2019年4月23日
2層でもなかなか整理しながら配線しないと絡まってしまいうまく行きません。
配線を本番仕様にキーを8個に増やすと結構スパゲッティになってやりなおし・・・ 回路設計の難しい部分が段々見えてきてるのは進捗かな^^ #kicad pic.twitter.com/yydOo4RqNk
— mawa (@k_mawa82) 2019年4月24日
整理整頓しながら、ようやく8キーコントローラーを配線無事できました。
ででん!ゲームコントローラー8ボタン設置できた~^^/ 筐体は相方が段ボールから生成中なので、来月は実際の基板テストだ^^/ #kicad pic.twitter.com/lyfIw8fGZp
— mawa (@k_mawa82) 2019年4月24日
記念クレジットを記入。
発注前にチームメンバーなどクレジットを刻印しておこう... こういうのは好き^^ #kicad pic.twitter.com/4Tyb1Ia1SK
— mawa (@k_mawa82) 2019年4月26日
3Dビューアーで確認した状態の基板のデータです。
Elecrowにて発注しましたので、到着を待っています。 到着後に実装テストです。
5:プロトタイプの筐体部分の制作
段ボールにて長さを計測。モデル生成に活かす。
ディスプレイ付属のケースを元に全面部デザインを考えます。
こんな感じかな~(^-^) pic.twitter.com/8R4l9wDB97
— mawa (@k_mawa82) 2019年4月17日
バッテリーは外付けで色々なものを利用できるような設計にしています。汎用性と安全性が高い分分厚くなってしまったがご愛敬・・・スマホすごいなと改めて再認識。
アッ!バッテリー入れつくるとめっちゃ分厚くなってしまう笑 うむむ… ま、最初はいっか… pic.twitter.com/IbxfIWgUrm
— mawa (@k_mawa82) 2019年4月17日
切り出しました。
段ボール切り出し完了~(^-^) セロテープで仮固定してみよ pic.twitter.com/NYyb08Kufz
— mawa (@k_mawa82) 2019年4月17日
セロテープで組み立て、長さを各辺計測してモデリング担当チームに引き継ぎました。
今日の進捗です。筐体モデリング前の長さとかの目安にするための段ボール工作をしました。外付けバッテリーの配線やらなんやら課題が見えてきました(^-^) #ラズパイ pic.twitter.com/wQmnTjv5pJ
— mawa (@k_mawa82) 2019年4月17日
今後の作業予定
プラスチック筐体の生成
段ボールの仮筐体での計測結果をもとにBlenderでモデリングを行い、3Dプリントサービス発注手配で完成予定です。
7:プロトタイプのソフトウェア制御部分の実装
デスクトップアプリとして、モダンなフレームワークのひとつ、Electronで行う予定です。 動作確認済み、スタイリッシュなゲーム管理ができるように実装中です。
プロトタイプ組み立て
コントローラー基板とプラスチック筐体が届き次第組み立てテストを行う予定です。