-->

2016年8月20日土曜日

WiiU GamePadのエミュレーション(③使用ハードウェア)

ここでは"全(技術)力スプラトゥーン"でGamePadのエミュレーションを実現しているハードウェアを紹介します。

まずはGPU関係から。
  • "NVIDIA Jetson TK1"(NVIDIA)
    OS:Linux For Tegra R21.4(Ubuntu 14.04 base)
    CPU:Cortex-A15 Quad-core + 1(max 2.32GHz)
    GPU:gk20a bKepler-based GPU with 192 CUDA core(max 852MHz)
    価格:\30,000ぐらい

    簡単に言うとLinuxが動く小っちゃいボード。別にこれでなくてもLinuxが動くPCとかでもGamePadのエミュレーションはできると思われ。これを使っている理由はコンパクトで持ち運びが楽だからです。オリオスペックという店で購入しましたがここが正規販売代理店みたいです(販売ページ)。Amazonでも販売してるけど…、ちょっと高くね?



    ちなみにRaspberry Pi 3では標準で無線LANが搭載されたようで、IEEE802.11nに対応しています。ということは、Raspberry Pi 3でエミュレーションができるのでは!と思いましたが、2.4GHz帯しか対応していないみたいです…。ざーんねーん(WiiU本体との通信は5GHz帯が必要)。
  • "Dual Band Wireless-AC 7260 867 Mbps+ Bluetooth 4.0 7260HMW"(Intel)&アンテナ
    対応規格:IEEE802.11 ac/a/b/g/n
    周波数帯:2.4GHz帯 & 5.2GHz帯
    価格:\3,000ぐらい(アダプタ) & \300ぐらい(アンテナ)

    Jetson TK1には無線LANが付いていないので、mini PCI-Expressカードであるこの無線LANアダプタを使用しています。当然ですがアンテナがないと通信できません(共にAmazonで購入)。別にUSBタイプの無線LANアダプタとかでも良かったのですが、ドライバのインストールが容易だったのでこちらを使用しています。実はこのカードを採用する前にPLANEXのUSB無線LANアダプタ(GW-450D2)を試していてドライバのインストールで挫折したのは内緒です。

     
  • その他
    液晶ディプレイ
    HDMIケーブル
    USBハブ
    USBマウス
    USBキーボード

    Jetson TK1は本当にボードだけなのでマウスやディスプレイが必要です。

通信相手であるWiiUも掲載しておきます。
  • WiiU



    そろそろ生産中止との話もありますが…。ちなみに所長はスプラトゥーンをするためだけにWiiUを購入しました。値段分はすでに遊んでいると思います。
以上がGamePadのエミュレーションを実現している構成となります。

次→WiiU GamePadのエミュレーション(④必要機能と開発環境)

2016年8月15日月曜日

WiiU GamePadのエミュレーション(②参考サイトまとめ)

ここではGamePadのエミュレーションの実現に関しての情報を収集したサイトを紹介します。


"libdrc" project
http://libdrc.org
総本山、WiiU本体とGamePadの通信内容やハードウェア構成について、すべてというわけではないですが、かなり詳しく記載されています。

Mema Haxx(Bitbucket)
https://bitbucket.org/memahaxx/
Memaって人は"libdrc"を作った人だと思われ、たぶんすごい人。ぶっちゃけ動くものがもうすでにここにあるので、"libdrc"のページに書かれていない情報があっても動かして確認すればよいわけです(というかそうした)。

上記のMemaさんのページにはいくつかのプロジェクトがあるのですが、各プロジェクトは"libdrc"に関連したものになっており、それらについて知っている限り記載しておきます。
  • drc-sim
    GamePadのシミュレータ、今回やりたいことがほぼ実現されています、が、Pythonです。個人的にはC言語が扱いやすかったのでこのPythonコードをC言語に移植しています。
  • drc-hostap
    WiiUと接続するための無線ミドルウェア、WiiUとの通信は既存規格をちょっと変えた方式をとるので通常のミドルウェア("hostap")では通信できない。そこで既存の"hostap"を改変したものが"drc-hostap"、"libdrc"を使う場合でもWiiU本体と無線接続しなければならないので、このプログラムは必須。
  • libdrc
    メインプロジェクト、PCと接続したGamePadに対して画像表示などが行えるライブラリです(たぶん)。
  • drc-x264
    WiiU本体からGamePadへの画面表示はH264を使用して圧縮しています。そのため"libdrc"を使用してPCからGamePadへ画面を送るときにはH264でのエンコードが必要になります。しかし、例によって既存のH264からちょっと変更した方式をとっているようで、"hostap"と同じくH264エンコーダーである"x264"を改変しているようです。なので、"libdrc"を使用する場合は必須と思われます
  • wudrnet
    よくわからん
  • rc-re-scripts
    リバースエンジニア用のツールっぽい
  • drc-wireshark-plugins
    "drc-wireshark"用のプラグイン?解析パケットの表示用?
  • drc-cap
    キャプチャツール?よくわからん
  • drc-mac80211
    ドライバ?よくわからん
  • drc-wireshark
    "wireshark"はパケットアナライザらしいので、今回の通信を解析するための改変版みたい

今回の目的はGamePadのエミュレーションなので"libdrc"とは逆です。ですので"libdrc"は必要ではありません。なので所長は全く触っていません。今回使用したのは"drc-sim"と"drc-hostap"、それと"drc-wireshark"です。


以下の2つは海外での"libdrc"のセットアップ解説記事です。"libdrc"を使用するためにはPCとGamePadを接続する必要があるのですが、そのためにはまずはPCとWiiU本体を接続する必要があって…、というややこしいセットアップ方法を解説しています。というか、この2つぐらいしかめぼしい情報はなかったです。

libdrc WiiU Linux Setup with rt2800usb | Yet another tech focused Blog
https://rememberdontsearch.wordpress.com/2014/01/05/libdrc-wiiu-linux-setup-with-rt2800usb/
"libdrc"を使用するまでのネットワーク接続の方法などを解説。"libdrc"のWebページの解説は少し抽象的で詳細が分からないところがあるのでこのような具体的な作業が記載されているのは大変助かります。

ZDoom on a Wii U GamePad with a Raspberry?Pi / fuzzy notepad
https://eev.ee/blog/2015/11/28/zdoom-on-wii-u-gamepad-with-raspberry-pi/
"libdrc"を使用してRaspberryPIとGamePadを接続して、GamePadで"ZDOOM"というゲームをプレイさせようとしている、最終的にはあきらめている模様。「BSSIDってこっちなのかよ!」っていう自分と同じミスをしているので親近感が湧く。最後の方での設定は間違っているような気がするのですが…。


以下の2つはGamePadシミュレータである"drc-sim"の亜種です。どっちもPython。

GitHub - justjake/drc-sim-keyboard: control your Wii U with keyboard, mouse, and Xbox 360 controller
https://github.com/justjake/drc-sim-keyboard
"drc-sim"にキーボード操作を追加したものみたい。一応使い方も書いてある

GitHub - aboood40091/drc-sim: Turn your PC into a Wii U gamepad/controller!
https://github.com/aboood40091/drc-sim
もともと"drc-sim"はPython2で書かれていて、これはPython3に直したものみたい。

ちなみに所長はPythonで動かそうとしたけど慣れてなくて、よくわからなくて結局どうあがいても動かせなかったのは秘密です。

次→WiiU GamePadのエミュレーション(③使用ハードウェア)

WiiU GamePadのエミュレーション(①はじめに)

ここでは"全(技術)力スプラトゥーン"で使用しているGamePadのエミュレーションについての情報を何回かに分けて記載していきます。


WiiU本体とGamePadは、持っている人なら知っていると思いますが、無線で接続されています。そして、WiiU本体とGamePadの通信方法はすでに2013年に解析されています。

Secrets of the Wii U GamePad
http://www.eurogamer.net/articles/digitalfoundry-secrets-of-the-wii-u-gamepad

解析した人のことやどのように解析したのかは詳しくは知りません。ただ、Web上の情報を見るに、無線通信は既存規格の"802.11n"を少し改変したものを使用しているようです。これは通信を実現するハードウェアは既存のデバイスで対応できるということを意味しています。

また、"libdrc"というライブラリがあります。これはPCがGamePadと通信するためのライブラリで、これを使用すればGamePadの画面に好きな動画を表示したりボタンの入力情報などを取得できます。"drc"というのはGamePad上のARMプロセッサの名前から来ているようです(たぶん)。ライブラリ自体は完成しているようですが、アップデートは2014年前半ごろで止まってしまっていて現在は更新されていません。

今回実現しているのは、この"libdrc"の逆です。PCとWiiU本体を接続します。ちなみにGamePadをコントローラとして使用することを考えたとき、画面出力がついた入力コントローラというのはロボットなどの操作インタフェースにかなり便利だと思うのですが、どうでしょうか?この"libdrc"にはWebページが存在し、そこにはかなり詳しいレベルでWiiU本体とGamePadの通信内容について記載されています。また、動作させるための各種プログラムもそろっています。
※正直、これらのWebページやソフトウェアがなければエミュレーションは実現できなかったと思います

というわけで、今回実現したGamePadのエミュレーションはすでに解析されている情報をもとにプログラミングしただけで別段すごいことではないのです。きっと、これを読んでいるあなたにもできるんではないかと思いますが…。


ソフトウェアについて
当研究所が作成したソフトウェアについてですが、配布の予定はありません。理由は、あまりよろしくない行為で任天堂が不利益を被る可能性があるためです。とは言え、所長がWebから情報を集めてこのソフトウェアを実現したように他の人にも実現は可能です。ですので、このようなソフトウェアを手に入れる方法としては、自分で作るかもしくは誰かが作ってくれることを祈りながら待つかのどちらかになります。おそらく自分で作った方が早く手に入ると思われますが…。技術は正しく使いましょう。
※任天堂が不利益になると判断した場合、このような情報は即削除する予定です

次→WiiU GamePadのエミュレーション(②参考サイトまとめ)