-->

2016年12月11日日曜日

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

ここでは"全(技術)力スプラトゥーン"でGamePadのエミュレーションを実現するための開発環境を紹介します。エミュレーションを実現するために必要な機能は以下のものです。

  • 無線LAN接続機能
    WiiU本体とJetson TK1を無線LANで接続する機能が必要です。WindowsでいうところのSSIDを選択してセキュリティキーを入れたりAOSSとかで接続するということをやってくれる機能となります。Linuxでは通常"hostap"や"wpa_supplicant"などのソフトウェアでこのような機能を実現しますが、WiiU本体とGamePad間の無線通信は既存の規格から少し改変(このあたりを参照)されているのでそのままこれらのソフトウェアを使用することはできません。この機能に関してはもうすでに実現されているソフトウェア(ミドルウェア?)である"drc-hostap"が存在しますので素直にそれを使用することにします。
  • 通信機能
    WiiU本体と無線で接続した後は、実際に通信する機能が必要です。WiiU本体からGamePadにはGamePadに表示する動画や音声といったものが飛んできます。逆にGamePadからWiiU本体へはキーの入力情報が送信されます(これ以外にもいろいろ飛んでいるのですがここでは割愛します)。通信自体は通常のUDP(TCPじゃない方)なのでソケットプログラミングで実現できます。通信プロトコルはこのあたりに書かれているようで書かれていないので、"drc-sim"の処理を解析して実装しています。
  • 画面表示機能
    WiiU本体から送信された画像データはH264で圧縮されているので、これをデコード&表示する必要があります。デコードにはFFMPEG、表示にはOpenCVを使用しています。表示はもうちょっとちゃんとしたものを使用した方がいいのかもしれませんが、面倒くさいので…。
  • 音声出力機能
    画面同様GamePadには音声も飛んできます。が、音声は必須ではないのでまあ、いいかと考え、現時点ではこの機能は未実装です。PulseAudioとか使用すれば音声出力は実現できそうです。

エミュレーションには上記の機能を実現する必要がありますが、無線LAN接続機能のみ既存のもの("drc-hostap")を使用して、その他の機能はC言語で実装しています。
使用している既存のソフトウェアについては以下のものです。

  • "drc-hostap"
    既存の"hostap"を改変したものらしい。ここにあるソースをコンパイルして使用。
  • gcc
    これがないと始まらない。コンパイラ。
  • ffmpeg
    H264に圧縮された動画のデコードに必要。ライブラリを組み込んで使用する。パラメータは"drc-sim"で使用されているものをチラ見。
  • OpenCV
    画面表示と画像認識で使用。画像を取り込めれば簡単に画面表示ができるので楽。しかし、あくまで画像処理ライブラリなので音声は扱えない。


次→そのうち

2016年11月5日土曜日

MakerFaireTokyo2016に出展しました

MFT2016で"全(技術)力スプラトゥーン"を展示してきました。が、当日会場の無線環境が悪く実演はできませんでした。なので、1日目はシステム展示のみで2日目は擬似的に入力した擬似デモとなりました。以下、総括です。

良かったところ
  • やっている内容についてすべて記載したパネルを展示した
    すべての来場者の方に展示内容の詳細を口頭で説明することは不可能なので、あらかじめシステムの構成や何をやっているのかということをすべて説明パネルに記載して展示しました。これは、興味はあるけどわざわざ出展者に説明を聞くほどでもない人や、そもそも出展者に話しかけるのが苦手という人も来場者の中にはいると思っているので、読みたい人は勝手に読めば良いし、それを読んで興味が出てきたら所長に聞いてネ♪という考え方の出展方法です。この展示方法はMFT2015から採用していますが、最適かどうかはわかりませんが間違ってはいないように思います。
    展示したパネルにはやってみてわかったことや制作過程で苦労した点なども記載しました。この辺は他の複数のメイカーさんに面白い内容だと言われました。やはり同じメイカーとして共感できる部分があるのだと思われます。

悪かったところ
  • デモができなかった
    今回のシステムは無線が必須のシステムだったので、それが使えなかった時点でいろいろ破綻しました。2日目は擬似的にGamePadの画面を入力してデモをしたので、まだましだったと思います。イベント会場の無線環境をなめていました。
  • システムが複雑すぎた
    いかんせん一目で何をやっているのかがわかりにくかったと思います。まだ、動いているところを見せれれば違っていたのかもしれませんが…。

総括
題材はスプラトゥーンという一般にそこそこ浸透しているものなので知名度がありましたが、如何せんシステムが複雑すぎる&実演ができなかったということで何をやっているのかわかりにくいダメダメな内容となりました。今考えれば、結局何を見せたかったのかということが明確でなかった(作品を見せたかったのか、技術を見せたかったのか)というのが敗因だと思います。来年は子供でも分かるような内容で体験ができる形の展示にしようかと思います。

掲載情報
マイナビニュースにNVIDIAのJetson繋がりで取り上げてもらいました。

"作りたい人"のお祭り「Maker Faire Tokyo」が今年も開催 - 夏休み開催で子ども連れも多数 | マイナビニュース
http://news.mynavi.jp/articles/2016/08/09/maker/

スプラトゥーンにモザイクかかってる!権利の関係上そうなっているんですかね。
展示に他社の著作物を使うというのは厳密には微妙なところだと思います。(非営利なのでOK?)

展示の様子


こんな感じでした。

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のエミュレーション(②参考サイトまとめ)

2016年7月5日火曜日

「MakerFaireTokyo2016」の出展証届く

毎年思うけど、この宛名で届くのはかなり恥ずかしい。

















別にいいんですけどねー。

「MakerFaireTokyo2016」に出展します

MakerFaireTokyo2016にハードウェアとか研究所として出展します。






出展者紹介のページはこちら
いつもながらプロフィールとか画像が適当すぎると自分でも思います。

出展物に関しては技術的な問題もひと段落したので、あと残り1か月頑張りたいのですが、問題が…。
7/7(木)にニンテンドー3DS「カルドセプトリボルト」が発売されるのです。



ちなみに前作「カルドセプト」のプレイ状況はこんな感じです。

















「スプラトゥーン」が発売されるまで毎日やっていた記憶があります。やってる暇あるのかねー。