読者です 読者をやめる 読者になる 読者になる

Docker海賊Hypriotを使ってRaspberry Pi上でゼロから任意アプリを15分で起動する方法

概要

HypriotというLinux Distributionを15分ぐらいでラズパイにインストールして、Dockerで楽にアプリを動かしたり、環境構築したりしようっていう話です。 問題が発生しない限り、ラズパイにキーボードやディスプレイをつける必要もないです。

※15分かどうかはダウンロード速度に主に依存するので、15分ですまなくてもどうかお許しください。

用意するもの

  • Raspberry Pi 2
  • Wifiドングル(USB接続, Raspberry Piと互換性のあるもの)
  • Mac OS Xのマシン + マイクロSDカードリーダ・ライタ
  • SSID, パスワードがわかっているWifiアクセスポイント

Raspberry Pi 2 を動かしていて不満なポイントは?

以下のようなことです。

  • apt-get等でインストールにかかる時間が馬鹿にならない。
  • バージョンの問題等で失敗することも多く、ごそごそ修正する羽目になる
  • しばらく環境をいじっていると、どこをどういじったかわからなくなり、クリーンな状態からどうすれば、動かしたいアプリの実行環境になるのか、完全には把握できなくなる。
  • (きっちりシャットダウンせずに)電源抜き差しすることでSDカードが壊れやすく、壊れると上記理由で復活が面倒でガッカリする

Dockerの利用

上記の問題点は最近話題のDockerでおおかた解決可能なものです。環境セットアップをDockerfileの形で書いて残しておくこと、イメージをビルドしたら、docker hub等のリポジトリにアップロードしておくことが必要ですが、それさえできれば、以下のようなメリットが得られます。

  • dockerだけ入った素の環境から、 docker run 一発で高速、自動的にアプリの動作環境が再現できる
  • Dockerfileがあれば、どう作られたかは明らか
  • 公式を含む、他の人が作ったDockerイメージも流用、派生できるため、大きなモジュールのインストールに時間を割く必要もない。

便利!

残る課題

しかしながら、Dockerだけでは解決しない問題があります。それは、Dockerを動かす環境自体を作るところも結構面倒ということです。少なくとも、以下のようなものが必要でしょう。

  • Wi-Fi認識
  • 接続先SSID、パスワードを指定する
  • avahiのインストール(Bonjourで なんとか.local というアドレスでアクセスできるようにする)

面倒だ!

Hypriot! (はいぷらいおっと?はいぷりおっと?)

そこで、HypriotというLinux Distributionの出番です。

公式: Docker Pirates ARMed with explosive stuff · Docker Pirates ARMed with explosive stuff

f:id:hammm:20160105020216p:plain

Hypriotのとくちょう

  • ロゴがドクロマークで怖そう。
  • 公式サイトの構成がイマイチで情報を探しにくい(汗)
  • RaspberryPi (ARM)で動作するDebianLinuxディストリビューション (基本はRaspbianらしいです)
  • 余分なプログラムが入っておらずサイズが小さい
  • Wifi, Bonjour (avahi), ssh等がセットアップ済みのイメージが用意されており、Wifiドングルさえ挿しておけば起動後、即sshで外部からのコントロールが可能
  • 最新のDocker/Docker Machineが入っており、すぐにDockerを利用できる。

まあ、要するにDockerに最適化された楽ちんなRaspberry Pi向けLinuxです。

※ ちなみに、ドクロの下にでかでかと "Docker Pirates ARMed with explosive stuff" とか書いてありますが、直訳すると 「爆発物を装備(ARM)したDocker海賊」みたいな感じで、Dockerと、Raspberry PiのCPUアーキテクチャであるARMをうまくひっかけつつカッチョいい感じのイメージにしたかったという意思がひしひしと伝わってきます。一部タイトルに頂きましたw

Hypriotのインストール手順 (Mac OS X向け)

今回はflashという名前の、hypriotが用意したスクリプトを使います。 このスクリプトは、Mac OS XLinux向けになっています。

Windowsの場合は、残念ながらこのスクリプトは使えません。 別の方法でSDカードにイメージを書き込んで、occidentalis.txtを手動で修正するなどしてください。

GitHub - hypriot/flash: Command line script to flash SD card images for the Raspberry Pi

続きを読む

THETA SからOculus RiftへUSBライブストリーミング with Unity (Skybox編)

 先日、以下の記事を公開しましたが、VRDMに参加したとき エーエフ @afjk01 さんに伺って、もう1つ手法(Skybox)があることがわかりましたので、今回はそちらの方法を紹介します。

hammmm.hatenablog.com

概要 

Unity内に配置したカメラにSkyboxを設定して、そのSkyboxにTheta Sのライブ動画を流し込むことで、前回の記事と同様にTheta Sの360度ライブ動画を背景にすることができますOculus Rift向けとしていますが、Unityの設定でvirtual realityのフラグをONにしているだけですから、他の用途にも利用可能と思います。

今回もまた!Noraさんのご提供されているシェーダー(Stereoarts Homepage)を利用しています。感謝は是非Noraさんに!

 

今回のプロジェクトをUnity上で動かすとこんなかんじです。

f:id:hammm:20151223212159p:plain

ダウンロード

ソースコード(Unity 5.3.0f4向け):

https://bitbucket.org/mhama/thetaoculuslivestreaming

実行ファイル(Windows向けexe, Oculus runtime 0.8対応): 

Theta S+Oculus DK2 でライブ動画(skybox - BowlRoll

自分で設定する場合の手順

  1. Main CameraにSkyboxコンポーネントを追加する。

    f:id:hammm:20151223193618p:plain

  2. Skyboxコンポーネントのインスペクタ内のCustom Skybox項目に、Noraさんのパッケージ内にあるThetaRealtimeSkyboxマテリアルをセットする。

    f:id:hammm:20151223193855p:plain

  3. WebCamDrawerスクリプトをAssets内にコピーする。
  4. AddComponentでWebCamDrawerスクリプトを追加する。

    f:id:hammm:20151223194101p:plain

これだけです!前回以上に簡単ですね。しかも球体でカメラを囲んだりする必要がなく、シーンを編集するときに邪魔になりにくいのも嬉しいですね。一方で、多少とも何か表示状況をコントロールしたいとなったときに、触りにくいというデメリットはあるかもしれません。

 

正直今回はNoraさんのシェーダの使い方だけですが、以上です。

THETA SからOculus RiftへUSBライブストリーミング with Unity (Sphere編)

Theta SにはUSB接続でウェブカメラのように使える機能があるのですが、これを使って、Oculus Rift DK2でリアルタイム閲覧する方法について書きます。

 

(2015/12/23追記)

  • 本記事では球体にライブ動画を貼り付けていますが、Skyboxに貼り付けることで同様の効果を得る方法がありましたので、以下の記事で紹介しています。

 

何が楽しいの?

  • 見回すと自分がいる、とか
  • 人間という身体ごとは入れない場所に入ったような体験をする、とか
    例:「レゴの家に入ってみたい!」
  • いつもとは異なる視点から外界を眺めてみる、とか
    例:「背の高い人はいつもどういう風景を見ているんだろう?」

といった要は「テレイグジスタンス」ごっこができるツールになります。

参考にさせて頂いたページ

感謝です!

ダウンロード

ソースコード(Unity v5.22プロジェクト): https://bitbucket.org/mhama/thetaoculuslivestreaming

Windows向けexe: 

Theta S+Oculus DK2 でライブストリーミング(2 - BowlRoll

内容 

  • Noraさんのシェーダを使わせて頂きました。 (Assets/ThetaShaderPackディレクトリ以下はNoraさんのzipの構成です)
  • そのままでは標準のSphereに使うと反転してしまうため、シェーダにUVのUだけ左右反転するよう改造を行っています。(Theta/RealtimeEquirectangular)
  • Assets/SphereModel 以下に @warapuri 氏の高精細天球モデルが入っています。
  • そのほかは最低限のものだけ入っています。

自分で作る場合の手順

  1. シーンにSphereまたは@warapuri 氏の高精細天球モデルSherer100(scale=100,100,100 rotation=0,180,180 position=0,0,0)を配置
  2. 上記オブジェクトにNoraさんのシェーダ(改)のついたマテリアル「ThetaRealtimeEquirectanguler (Both)」を適用
  3. 上記オブジェクトにWebCamDrawerスクリプトを追加
  4. カメラをposition=0,0,0に移動
  5. Build SettingsでVirtual Reality SupportedとStereoscopic RenderingをONにする
    (※Unity5.1以降のVRサポートを利用する場合)
  6. 以上。

f:id:hammm:20151206161424p:plain

使い方

・上記zipを任意の場所に解凍します

・Theta SをUSB配信モードで起動します

www.youtube.com

・Theta SをUSBでPCに接続します

Oculus Rift DK2を接続します

・ThetaOculusLiveStreaming.exeを起動します

注意

終了ルーチンを入れていないので、終了するときはAlt+F4とかAlt+Tabとかで適当に終了してください! 入れました

標準のSphereを利用している関係上歪みが目立ちます。より精細な球モデルを利用すればより良い絵になると思います。 @warapuri さんの高精細天球モデルで解消しました!感謝!

・今回はお手軽なUSB接続の手法を紹介しましたが、Theta SのHDMI出力をキャプチャできれば、より高精細のライブビュー画像が取得できます。

 

Enjoy!

 

履歴

2015/12/6 プログラムの修正(@warapuriさんの天球モデルを利用)

2015/12/6 ややわかりにくかったので題名微修正しました。

2015/12/23 Skyboxを利用した方法を別記事で書いたので、この記事はSphere編と改題しました。

2015/12/23 本記事で用いたシェーダ(ThetaRealtimeEquirectangular.shader)では、手前に物体を描画できないという特性になっていましたが、BitBucketに上げたソースコードでは調整してみました。

 

外付けGPU(GTX970)の起動タイミングと動作上の注意点について

前回の記事では、主に外付けGPUハードウェアの構成について書きました。

今回はソフトウェア側、特にWindows起動時の問題について詳細を書いておきます。

構成

前回と同じですが、こちらです。

なお、tech-infernoでは外部のUSBドライブにWindowsをブート可能な形でインストールした場合のほうが安定して起動できるという記事を見かけます。とはいえ普通の方法ではインストールできないようなので、時間があるときに試してみたいと思っています。

今回はあくまで内蔵SSD利用の場合の話です。また、上記と構成やバージョン・リビジョンが異なる場合等、異なる挙動になる場合がありますのでご注意ください!

 

最初に

  • まず外付けGPUなしで正常起動しているうちに「復元ポイントの作成」をしておきましょう!
    たまに強制シャットダウンで環境が壊れることがあります。転ばぬ先の杖です。

  • 外付けGPU稼働時、再起動はできません!
    再起動が必要と言われた場合は、常にシャットダウンを使います。
  • 外付けGPU稼働時、スリープはできません!

    復帰時に固まります。このため、電源入れっぱなしで使います。使い終わったらシャットダウンします。自動スリープしない設定にするのがおすすめです。(後述)

おすすめ(必須)の設定

  • MacOSXで「起動ディスク」の設定をBOOTCAMP側にしておく
    起動時にOptionキーを押さなくても自動的にWindowsで起動する状態が必要。(のように思っています。要検証。)

  • 「エラー時の再起動」をOFFにする
    この構成での再起動は時間の無駄です。
    コントロールパネル→システム→システムの詳細設定→「起動と回復」の「設定」ボタン→「システムエラー」部の「自動的に再起動する」のチェックをはずします。

f:id:hammm:20151130233647p:plain

  • 自動スリープをOFFにする
    スリープすると厄介(復帰しない)なため、OFFにするのが良いです。

    f:id:hammm:20151130234939p:plain

    f:id:hammm:20151130235035p:plain

  • デスクトップにデバイスマネージャのショートカットを作る(任意)
    こういった試みでは、デバイスマネージャを見ることが多いので、デスクトップにショートカットを作っておくのがおすすめです。

起動時のパターン

まだ確立した方法ではないですが、現状でのパターンを書いておきます。

成功パターン

  • Windows起動中f:id:hammm:20151130232504p:plainが出た瞬間に電光石火な感じでThunderboltを挿す
    → ほぼ問題ない状態で起動する確率が4割。そのままぐるぐるし続ける確率が6割。
    30秒ぐらい待って起動しなければ失敗したと思うのが良いと思います。たまに長くかかって起動するケースもありますが・・・。

失敗パターン

  • 最初からThunderboltを挿しておく 
    → 真っ黒画面のままフリーズ。電源長押しでシャットダウンするしかない
  • ブートパーティション選択モード 
    Thunderboltを挿さず、Optionキーを押しながら起動、選択中にThunderboltを挿して、その後Windows選択 → だめ(と思っている)
  • Windows起動時f:id:hammm:20151130232504p:plainがでてからゆっくり挿す
    → 起動しないか、起動したとしてもドライバのロードに支障が出がち。USBやSDカード等のアクセスでWindowsがフリーズしたりしがち

失敗(電源ボタン長押しによる強制シャットダウン)したらその後どうする?

  • Automatic Repair Modeが出てくる
    強制
    シャットダウンが2回続くと、その次の回にWindowsは自動的にAutomatic Repair Modeに入ります。もし入ってしまったら、原因はわかりきっているので修復などはせずに、再起動やそのまま起動を選択しましょう。

  • Automatic Repair Mode抑止方法
    Automatic Repair Mode は通常より時間がかかるので、入らないに越したことはありません。一回失敗したら、Thunderboltを挿さずに普通に起動させて、その後通常のシャットダウンを行うことで、Automatic Repair Modeに入るのを防ぐことができます。
    ※設定で抑止することも可能なようですが、細かい手順が必要のようなのでここでは書きません。

  • 起動トライの流れ
    要するに、こういう流れで起動トライを繰り返します。
    起動失敗!(フリーズ)
    →電源長押しでシャットダウン
    Windows通常起動
    →ログイン
    →通常シャットダウン
    →再びトライ!

 

失敗が4回以上続く場合は?

  • 運が悪いということもありえますが、Thunderbolt筐体の状態がおかしいこともあるようです。Thunderbolt筐体の電源を抜いて10秒程度置いてみてください。念の為耳を近づけて、小さい音が消えればOKです。電源を入れなおしてやりなおしてみてください。

Windowsが起動したら・・・

  • 念の為デバイスマネージャを開いて、おかしなデバイスがいないかチェックしましょう。どれかのデバイスに!マークがついていたら、起動失敗の可能性があります。その後デバイスへのアクセス等のタイミングでフリーズしたりすることがあります。
  • 最初うまく起動できたらNVIDIAGeForceドライバをインストールしましょう。その後は上記の起動方法で、それなりの確率で正常起動させることができると思います!正常動作が確認できたら、ここでも復元ポイントの作成をおすすめします。
  • ドライバインストール後うまく起動できたら、ちょっとした3Dベンチマークなどを動かしてみると良いでしょう。FFのベンチ や MHFのベンチ などどうでしょう?ちなみに、GTX970の場合、ベンチ中は通常よりもコイル鳴きの音がよく聞こえがちです。FPSが高いほどコイル鳴きの音は目立つという話ですね。

MacBook Pro に GeForce GTX970 をThunderboltで外付けしてVR向けにしてみた

はじめに

普段はMacBook(Air/Pro)の携帯性を活かせて、本気の開発とか、デモとか勉強会とかするときは外付けでブースターつけるとGPUがめっちゃ速いとしたら、いいなと思っていました。どうせなら、Oculus Rift 製品版(CV1)の推奨性能を満たすところまでいけると良いですよね!ということで、MacBook Pro Retina 13インチ (Early 2015) にthunderbolt外付けで Geforce GTX970 を接続するお話です。ちなみに、こういう外部GPUというのは、海外では 「eGPU」 (external GPU)というカテゴリのようです。

 

結果、どんな感じになるかというとこんな感じです ↓

 

f:id:hammm:20151118012822p:plain

MacBook ProのThunderbolt2ポート経由で外部GPUをつなげました(PCI-E x4接続)。GTX970のパワーで3Dゲームがサクサク動きます。また、特に設定せずとも実質Optimus (NVIDIA GPUIntel GPU経由でノートPC画面に映像を出す)になっており、MacBook Proの液晶画面で3Dゲームをスムーズにプレイすることもできます。(一定fps落ちるらしいです)

 

 ただし、Oculus RiftがOptimusと相性が悪いために、対策として、GTX970のDisplayPortに別途プロジェクターをつなげてそれをプライマリモニタとして、GTX970のHDMIポートにつないだOculusに映像を出すということをしています。(きゅーこん氏の情報を参考にさせて頂きました)

また、現状ではThunderboltケーブルを刺したまま再起動すると固まるので、必ずシャットダウンで電源を落としてから特定のタイミングで挿し直す、ということが必要になります。ちょっと面倒ではあります。

 

ちなみに、現状のThunderbolt2では、今回のAkitioを含め、外部GPUサポートをうたっているPCI-Eインタフェーボックスは存在しないのですが、Thunderbolt3では対応するという噂が出ていますので、もしかするとこのような構成のPCが各社から出てくる日は近いのかもしれません。

  

以下、実現方法について書いていきます。

 

なお、安全という観点からはだいぶよろしくないことをやっています!完全無保証です!真似をする場合は自己責任でお願いします!

もし実施する場合は、電気に関する一定の知識と、基本、ほったらかしの状況では使わないといった、慎重さが必要になりますし、火事になったりする可能性もないとはいえないので、どうかご理解ください!

 

・・・と注意をした上でですが、部品を揃えれば、危険な中では「比較的」安全にコトを行う環境ができつつあります。

 

もし万が一、やってみようという方は、準備の前に・・・Windows環境でやろうとしているなら、

今すぐ「復元ポイント作成」をやっておきましょう!後できっと感謝することになると思います!

 

概要

全体像を図解しておきます。

f:id:hammm:20151117210301p:plain 

参考情報

以下の情報を主に参考にしました。

 

・eGPU(外部GPU)全般について:tech-infernoフォーラム(英語)

 ・ACアダプタ DA-2を利用した簡潔なケーブリングについて

http://forum.techinferno.com/enclosures-adapters/9426-220w-dell-da-2-ac-adapter-discussion.html  (※2番目にある w4vz さんの記事が今回の元ネタ)

  ・今回と同構成 (MacBookPro - Akitio Thunder2 PCI-E Box) (英語)

http://forum.techinferno.com/implementation-guides-apple/10614-2015-13-macbook-pro-gtx970%4016gbps-tb2-akitio-thunder2-win8-1-osx10-10-%5Btranj10%5D.html

 ・Mac系ハードでのまとめ情報(英語)

http://forum.techinferno.com/apple-egpu-discussion/10061-basic-egpu-hardware-guide-macs.html

 

・OptimusでのOculus Rift DK2対応について:きゅーこん氏

Devel/OculusRift/OptimusノートでのDirectモード - cubic9.com

 

続きを読む