-
Notifications
You must be signed in to change notification settings - Fork 42
ja_ProjectInq
「Project Inq」はスプラトゥーン用リアルタイム動画解析ソフト「IkaLog」を FPGA 評価ボードで利用できるようにしたものです。
Project Inq は「全部の環境にて確実に動く」ものではありません。 Project Inq のために購入したものが動かなかった、 Project Inq を試してために他の機械が壊れた、 Project Inq の作業過程でミスをしてデータを消したなど、 Project Inq で提供する内容によって得た一切の損失を保障しかねます。そのことを理解いただいた上で楽しめる方だけ楽しんでください。
- Digilent社製 PYNQ-Z1
http://www.pynq.io/
Project InqのSDカードイメージは下記のPYNQ向けイメージに対してIkaLogを追加したものです。
- Digilent PYNQ-Z1 ボード
- microSD カード 8GB以上
- HDMIケーブル 2本
- LANケーブル(PYNQ-Z1接続用)
- 7V〜12V(PYNQ-Z1電源供給用)
- Wii U、スプラトゥーン ソフトウェア
あると良いもの
- HDMIスプリッター
- HDMIケーブル さらに1本
前提とする環境
- DHCPサーバーが存在するインターネット環境であること
- PYNQ-Z1を有線LANで接続できること
- 一般的なNTPサービスへのアクセスが可能であること
その他
- PYNQ-Z1ボードによるビデオキャプチャはほかの一般的な製品とくらべてノイズに弱いです。HDMIケーブルは品質がよいものを利用すべきです。普段自分の環境で HDMI ビデオキャプチャなどが正常にできているからといっても、トラブルが発生している場合に既存の機器やケーブル類を過信しないでください。
本アーカイブに含まれるProject InqイメージをSDカードに書き込んでください。書き込みには Windows であれば専用のツール、LinuxやMacであればddなどを利用する必要があります。imgファイルを単純にコピーするわけではありません。
具体的な書き込み手順はRaspberry Piなど向けのSDカードを作る方法と一緒ですので、参考になりそうなURLを幾つか示します。
http://www.hiramine.com/physicalcomputing/raspberrypi/setup_makelinuxsdcard.html
http://qiita.com/ttyokoyama/items/7afe6404fd8d3e910d09
https://veryberrypi.wordpress.com/2013/05/04/
正しく書き込みができた場合、そのSDカードはWindowsやMacに接続すると下記ファイルが保存されているように見えるようになります。
BOOT.bin
devicetree.dtb
uEnv.txt
uImage
Windows や Mac からでは確認できませんが、これらのファイルのほかに、Linuxのイメージが含まれています。
- PYNQ-Z1に先のmicroSDカードを装着します。
- 起動モード選択ジャンパピンを「SD」に設定します。
- 電源選択ジャンパピンを「REG」(ACアダプタによる電源供給)に設定します。
- WiiUのHDMI出力をPYNQ-Z1のHDMI INに接続します。
- ACアダプタを接続します。
- とりあえず、なんでも良いのでPCにmicroUSBケーブルで接続します。
- PYNQ-Z1ボードの電源スイッチをONにします。
電源を投入すると下記の挙動が確認できます。
- PGOOD LEDが点灯する。
FPGAに最初のビットストリームが書き込まれたことを示します。 - 電源投入直後、microSD 付近の RX LED が一秒間に一回のペースでおよそ4回点灯する。
ブートローダが起動し、Linux OS の起動がはじまっている瞬間に下記パターンで点灯します。
本 LED は電源ON時点で microUSB ケーブルが接続されている場合にのみ点灯します。 - しばらくすると PYNQ-Z1 で Linux が起動し、ネットワークが設定されます。
- IP アドレス192.168.2.99/24 が設定されます。(PYNQ デフォルト動作)
- DHCPにより動的に割り当てられたIPアドレスをが設定されます。
- さらにしばらくすると、 IkaLog 用のビットストリームが FPGA にロードされ、PYNQ-Z1 に搭載されている LED 4つが数回点滅します。
- LED点滅後、30秒ほどでIkaLogがスタートします。IkaLogがスタートするとWebブラウザでIkaLogにアクセスできるようになります。
下記URLでIkaLogにアクセスします。WebブラウザでIkaLogのWebインターフェイスが表示されれば、無事に起動しています。
- http://IkaLog/ (Windows環境の場合)
- http://IkaLog.local/ (Mac環境の場合)
続いて次のポイントを確認してください。
-
IkaLog Webインターフェイスのプレビュー画面に、Wii Uの画像が表示されていることを確認します。
秒間数フレームしか表示されませんが、リアルタイムにプレビュー画面が更新されることを確認してください。表示に問題がなければ、正常にキャプチャできています。 -
IkaLog Webインターフェイスのプレビュー画面にて、「黒色の枠」が表示されないことを確認します。
「黒色の枠」はWii Uの画面設定において画面サイズを変更している場合に表示されます。キャプチャ自体は正常に行われていますが、IkaLogは画面サイズを最大に設定してある状態を前提としているため、黒色の枠がある状態では正常に画面認識されません。
IkaLog動作中は、PYNQ-Z1の HDMI IN から入力された HDMI 信号が HDMI OUT 側に再送出しています。このため、 HDMI OUT とテレビの HDMI 入力端子を接続すればテレビに Wii U の映像が映ります。
しかし、 HDMI OUT からの供給される電力によって PYNQ-Z1 の電源がちゃんと切れなくなり、リセットボタンなども効かないことがあります。 Project Inq が動作しているうちは良いのですが、システムの再起動時にトラブったりします。現時点で入手可能な Rev C では HDMI OUT に何かが接続されている限りどうにもならないようです。この問題を解決するためには、 HDMI OUT 端子からケーブルを抜き、電源供給を断ってください。
HDMI IN からの映像を HDMI OUT に再送出することで WiiU, PYNQ-Z1, TVを接続するだけでシンプルに利用できるがベストと思いこれまで実装してきましたが、ソフトウェアほどあっさりとはいっていません。正直、 HDMI スプリッタを用意して Wii U からの HDMI 信号を分岐し、HDMI スプリッタから PYNQ-Z1 基板と TV 接続したほうが、少なくとも現時点では簡単だと思います。
Project Inq 動作中にリザルト画面が画像認識されると、 Project Inq SD カード上にスクリーンショットが保存されます。保存されたスクリーンショットはネットワーク経由でアクセスし確認できます。
- Windows の場合: エクスプローラのパス枠に
\\IkaLog\
と入力します。 - Mac の場合: Finder で Cmd-K を押下し、サーバーアドレス smb://IkaLog/ にゲストアクセスします。
接続後、 IkaLog フォルダの中身を確認します。
- SDカードの作成に失敗している可能性があります。SDカードを作り直してみてください。
- ジャンパーピンの設定が間違っている可能性があります。
- USBケーブルもしくはACアダプタからの供給電力不足で起動できていない可能性があります。
- HDMI OUTに何か接続している場合は、HDMIケーブルをはずして、電源を入れ直してみてください。
- microUSB ケーブルを接続しないとそもそも TX/RX LED が点滅すらしないようです。
microUSB ケーブルで手元のコンピュータと接続した状態でPYNQ-Z1を起動してみてください。 - SDカードの作成に失敗している可能性があります。SDカードを作り直してみてください。
- ジャンパーピンの設定が間違っている可能性があります。
- HDMI OUTに何か接続している場合は、HDMIケーブルをはずして、電源を入れ直してみてください。
PYNQ-Z1 (Rev C)の設定上の問題として、HDMI OUT端子にテレビやディスプレイを接続していると、HDMI OUT端子から一定量の電力がまわりこんでくるため、完全に電源がきれないようです。この問題は Digilent の他のボード(ZYBO)でも確認しています。
何らかの理由でPYNQ-Z1ボードを完全に再起動するためには、ボードへの電源供給を完全に断つべく、HDMI OUT端子の接続を解除した上で電源オフする必要があります。
microUSB 経由でシリアルコンソールにアクセスしLinux環境の動作状況を確認してください。
貴方の環境の設定値で 192.168.2.99 とコンピュータが正しく通信できるかを確認してください。
同IPアドレスで接続するためには、利用しているコンピュータが192.168.2.99/24に接続できるようなIPアドレスやルートを持っている必要があります。TCP/IPネットワーキングに関して詳しくは解説しませんが、PYNQ-Z1とネットワークスイッチを共有しているネットワークだアダプタに192.168.2.0/24の範囲のIPアドレスを設定するなどしてみてください。
なお開発者の環境では、作業の都合上、ヤマハRTX1x00が192.168.2.254/24をエイリアスアドレスとして持たせてルーティングしてくれる環境にしてあり、各種コンピュータから192.168.2.99のノードと通信でできるようにしてあります。
何らかの理由で IkaLog が停止・再起動を繰り返しています。よくあるパターンを下記に示します。
- HDMI INコネクタにWii Uが接続されていないか、Wii Uから有効な信号が出力されていないため、IkaLogがキャプチャを開始できずに再起動を繰り返している。
Wii UとPYNQ-Z1をHDMIケーブルで接続し、Wii Uからの映像を確実に入力してみてください。 - 再起動を繰り返しているうちに状態がおかしくなり、IkaLogが更に再起動を繰り返している。
この場合はPYNQ-Z1ボードの電源を完全にオフし、再度電源オンします。 - IkaLogがバグでクラッシュした。
この経験はほとんどありませんが、IkaLogがクラッシュした場合は自動的に再起動され、そのタイミングで青色LEDが再度点滅するようになっています。
調査が必要な場合は PYNQ-Z1 の microUSB ケーブルでシリアルコンソールを接続し /var/log/syslog などを確認します。
- コマンドプロンプトやターミナルから PING コマンドを用いて PYNQ-Z1 と TCP/IP 通信できるかを確認します。
- IkaLog, IkaLog.local というホスト名が名前解決できているか。
- IkaLog, IkaLog.local から ICMP Echo Reply が正しく戻ってくるか。
- 青色LEDが点滅してから30秒ほどたってから、再度ブラウザでアクセスしてみます。
IkaLogの起動にはしばらく時間がかかります。 - さらなる調査が必要な場合は PYNQ-Z1 の microUSB ケーブルでシリアルコンソールを接続し /var/log/syslog などを確認します。
- キャプチャに失敗するとそもそも起動できないので、この状態はあまり想定されません。何か問題がおきている可能性があります。
- WebブラウザとIkaLog Webコンソールの通信断が発生し、画面が更新されていない
ブラウザでリロード操作を行います。 - HDMI INからの映像が途切れてキャプチャできなくなっている
最後にキャプチャされたフレームが引き続き表示されます。 HDMI INに有効な画像を入力し、ブラウザをリロードしたり、IkalogもしくはPYNQ-Z1を再起動したりしてください。
手元では下記のフォーマットで動作を確認しています。
- 720p
- 1080p
1080i はサポートしません。 1080i を指定すべきケースは非常にレアケースで、現在販売されている HDMI 対応テレビ/ディスプレイなどで 1080i を推奨するものはまずありません。 IkaLog はプログレッシブ映像を前提としています。
IkaLogは現時点で映像入力フォーマットの動的変更に対応していません。映像入力フォーマットが変化した場合はIkaLogもしくは PYNQ-Z1 基板を再起動してください。
- HDMI IN から確実に映像を入力してください。キャプチャボードの仕様などによっては、キャプチャ停止中にパススルー出力されていないことなどがあるようです。
- 使用している HDMI ケーブルの品質を疑ってください。 PYNQ-Z1 の HDMI 受信はシビアなのでケーブルの相性も出やすいです。
- Wii U 個体との相性を疑います。 Wii U によって動く場合、動かない場合があります。
- Wii U と PYNQ-Z1 の間に HDMI スプリッタ AV アンプ、 HDMI 切替器などを挟んでみてください。相性で Wii U の信号が受けられない場合でも、他の HDMI 機器を組み合わせると受けられるようになることがあります。
- 組み合わせている AV アンプ、テレビ、ディスプレイ、プロジェクタ、スピーカー、ビデオキャプチャデバイス、その他 HDMI 機器をすべてとの相性を疑います。
- stat.ink との連携設定を行い、プレイしてみてください。正しく動作していれば、ゲーム終了後数十秒で stat.ink にリザルトが反映されるはずです。
- stat.ink と連携できない場合は、プレイ後に IkaLog のファイル共有にアクセスしてみてください。ゲームリザルトがスクリーンショットとして保存されていれば、 IkaLog は動いているはずです。
- Project Inq が動作している PYNQ イメージに SSH ログインもしくはシリアルコンソールでシェル操作可能な状態であれば、 /var/log/syslog を見ると IkaLog の動作状況が出力されています。
Project InqのイメージではIkaLog用にFPGA内のブロックをカスタマイズしています。PYNQの機能を利用する場合はPYNQのイメージを利用してください。
現時点における、 Project Inqのイメージのおもな bitstream 相違点は下記のとおりです。
- SPI, Arduino, Pmod など IkaLog で使用していない I/O ブロックおよびIOプロセッサを削除
- DVI2RGB/RGB2DVI 改変。おもな変更内容:
- DVI2RGB が HDMI ソースに対して返答する EDID を変更
- HDMIライクな映像フォーマットのサポートを追加
- HDMI IN 側への Hot Plug Detect を常に HI に固定
- パススルー化。DVI2RGBが受け取った HDMI 信号などをそのまま再送出する。
HDMI('out') による映像は HDMI OUT から出力されません
別に止めはしませんが、苦労すると思います。色々な意味で。
おお、量産品との違いに気づかれたようですね!Wii U、テレビ、パソコン、プロジェクタなど各種HDMIを装備した機器が、ほとんど相性なしで相互接続できる事自体がすごい事なんです。
Project Inqではスプラトゥーンの画像解析ソフトウェアであるIkaLogのほか、HDMIスプリッター機能、HDMI受信機能などをIkaLogのために設計しFPGAに載せています。ハードウェア設計歴が半年もないような人がやっているプロジェクトなので過剰な期待はしないでください。また、動かないのを楽しむか、動くもので楽しむかは各自の自由です。
一般的にHDMI信号の送受信にはHDMI送受信専用に設計された、HDMIトランスミッタ/レシーバーLSIを併用します。今回はPYNQ-Z1で利用しているFPGAボードでは、そのようなLSIが搭載されておらず、このようなボードで100% HDMI相互接続できるようなものを作るのは非常に困難なことを、実際に作業をしていて改めて実感しました。
時間はともかく Project Inq を完璧に動かそうとすると、結局のところ基板から設計しなおす必要があります。 Project Inq は現状 Fun Project として趣味でやっているものなので投入した工数は無視するとしても、基板から作り始めてしまうと、基板だけで NREコスト(設計・開発段階で一度だけ発生するコスト)が車を購入できるレベルで発生します。
特に HDMI 信号などは 720p で 750MHz, 1080p で 1.5GHz クラスの高速な信号で、マジで作り始めるととっても大変な世界です。
さらに、基板の設計がうまくいって製造したとして、そこで作った基板(部品実装済み)の価格があなたの想像の範囲に収まるかは別の話です。 Project Inq の作業を行っていると、量産されているパソコンとHDMIキャプチャを組み合わせて動かすのが「確実に動くものとしては圧倒的に安い」ことがわかって面白いです。
本ドキュメント執筆時点において、PYNQ-Z1はDigilent社の通販から購入可能です。
Processor: Dual-Core ARM® Cortex®-A9
FPGA: 1.3 M reconfigurable gates
Memory: 512MB DDR3 / FLASH
Storage: Micro SD card slot
Video: HDMI In and HDMI Out
Audio: Mic in, Line Out
Network: 10/100/1000 Ethernet
Expansion: USB Host connected to ARM PS
Interfaces: 1x Arduino Header, 2x Pmod (49 GPIO)
GPIO: 16 GPIO (65 in total with Arduino and Pmods)
Other I/O: 6x User LEDs, 4x Pushbuttons, 2x Switches
Dimensions: 3.44” x 4.81” (87mm x 122mm)