離島プログラマの雑記

島根県の離島、隠岐・西ノ島に移住して子育て中のフリープログラマです。

Google Cardboard を作ってみた

f:id:k-aeg:20140721131316j:plain

先日の Google I/O での発表後から気になっていましたが、時間ができたので作ってみました。出来上がりは上の写真の通り、あまり見栄えが良いとは言い難いけれど、案外ちゃんと使えます。

作り方や型紙のダウンロードは公式サイト(https://developers.google.com/cardboard/)で。

ダンボールは家に転がっていたサラダスピナーの箱を使用。 他の材料はダイソーで調達しました。

  • レンズ用に「とげ抜きルーペ」× 2
  • マジックテープ(手芸用)
  • マグネット

レンズはネットで見る限り、国内ではダイソーのミニルーペを使用している人が多いようですが、お店で見つからなかったので「とげ抜きルーペ」で代用しました。このレンズの実際の焦点距離はよくわからないですが、自分の視力(0.7)ではほぼピントは合っているように見えます(Cardboard 推奨は焦点距離 45mm です)。ちょっとダンボールのレンズ穴より径が小さいので、グルーガンで固定するなどしました。また、レンズが小さいせいかピントの合う領域は若干狭めで、画面端の方はボケてしまいます。

Cardboard に対応する Android 4.1 以上の端末は持っていなかったので、わざわざ秋葉原で調達しました。2013年発売の AQUOS PHONE 203SH を買いましたが 1万程度で売っていたのは少し驚きです。画面は 4.9インチの IGZO でなかなか綺麗だし、CPU も APQ8064 1.5GHz(クアッドコア)が載っているので VR 用途にもパワーは十分です。

難点は 、203SH が Cardboard の動作検証済み端末でないせいか、CardBoard 公式アプリでは視差が大きく取られてしまって 3D に見えない点です。最初はレンズの焦点距離などの問題かと思って色々試行錯誤していましたが、Youtube に上がっている CardBoard アプリの動画では正常に見えたので、どうも Cardboard のアプリ側に何か問題があるようです。

また、マグネットによるスイッチが、デフォルトの設置場所だと全然反応してくれませんでしたが、試しに反対側にマグネットを設置してみたところ反応するようになりました。この辺は、使用する機種によって差がありそうです。

とはいえ、その他の VR 対応 Android アプリは正常に動作しているので十分に実用的です。ちなみに Google Play には、Cardboard と同じ動作原理の Durovis Dive という製品向けのアプリがそこそこリリースされているので、それらも体験できます。対応ゲームの一覧も用意されていてナイスです(http://www.divegames.com/games.html) 単に VR というキーワードでも結構見つかります。

また、Durovis Dive の SDK を使用すると、Unity 無料版でも VR 対応アプリが作れるようなので、今度試してみようと思います。

UnityでGoogle Cardboard用のコンテンツを作成する : エイバースの中の人

最後におすすめのアプリをいくつか。

Tuscany Dive 1.0
カテゴリ: ライブラリ&デモ
Google Playで詳細を見る
家と庭を歩き回れます。足元にあるスイッチを見ると進んだり止まったりを制御できます。

Dive City Rollercoaster 1.6
カテゴリ: アーケード
Google Playで詳細を見る
VR 定番のジェットコースターです。立ったまま見ていると、落ちるときにフラッと来ます。

Dive Deep 1.0
カテゴリ: アドベンチャー
Google Playで詳細を見る
イルカやシャチが突進してきます。結構迫力があります。

背景の透明化

GIMP 2.8 (for Mac) で画像の背景を透明化する方法のメモ。

準備として以下の操作をする。

  1. レイヤにアルファチャンネルを追加([レイヤー]→[透明部分]→[アルファチャンネルの追加])
  2. 画像のモードを RGB にする([画像]→[モード]→[RGB])

ここからのやり方は主に2つ。

色を透明度に

背景が単色の場合はこのやり方が楽。

  1. レイヤーを選択
  2. [色]→[色を透明度に]を選択
  3. ダイアログで背景色を選択して[OK]

選択ツールで削除

元が JPEG だったりして背景が完全に単色でない場合はこっち。

  1. ツールボックスから[ファジー選択]を選択
  2. 透明化したい背景部分を選択
  3. もし綺麗に選択できなければ、ツールオプションで[しきい値]を増やして調節
  4. delete キーを押して選択部分を削除

Raspberry Pi 無線 LAN 設定おぼえ書き

設定前の準備


Raspberry Pi の OS

Raspbian を使用。ホスト側は Mac

無線 LAN アダプタ

ヨドバシで700円ちょいで売っているちっこい無線 LAN アダプタを買ってみた。
最近のは安いし速いしちっこいしですごいなぁ。

[asin:B003NSAMW2:detail]

構成

Raspberry Pi の USB ポートに無線 LAN アダプタとキーボードを接続。

設定


無線 LAN の設定

/etc/wpa_supplicant/wpa_supplicant.conf に ESSID とパスワードを登録する。
wpa_passphrase コマンドを使うと、設定に記述するフォーマットで出力してくれる。
コマンドの出力はそのまま /etc/wpa_supplicant/wpa_supplicant.conf に追記すればOK。
ESSID には無線 LAN の ESSID、pass にはパスフレーズを指定。

#sudo wpa_passphrase ESSID pass | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf

変更後の内容を確認。

sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

中身が以下のようになっていれば成功。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="ESSID"
    #psk="password"
    psk=907998845ecfdc66f243ac57e6a5aab06c864049caf01a671a179358da6808e1
}

これにいくつか設定を書き足す。
以下は認証方式: WPA-PSK、暗号方式: TKIP の場合の例。

network={
    ssid="ESSID"
    proto=WPA
    pairwise=TKIP
    group=TKIP
    psk=907998845ecfdc66f243ac57e6a5aab06c864049caf01a671a179358da6808e1
}

各方式毎の設定値は以下の通り。

  • 認証方式
    • WPA-PSK
      • proto=WPA
    • WPA2-PSK
      • proto=RSN
  • 暗号方式
    • TKIP
      • pairwise=TKIP
      • group=TKIP
    • AES
      • pairwise=CCMP
      • group=CCMP

起動時に無線 LAN に接続する設定

以下のファイルを編集。

sudo vi /etc/network/interfaces

内容を以下のように変更(DHCP で IP が振られる場合)

auto lo
 
iface lo inet loopback
iface eth0 inet dhcp
 
auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

設定の反映

reboot で再起動して設定を反映。

sudo reboot

動作確認

ifconfig で wlan0 に IP が振られていれば設定完了。

ホスト名でのリモート接続


DHCP だと ssh 接続するために Raspberry Pi の IP を調べる必要があるので、ホスト名で接続できるようにする。
Raspberry Pi に avahi-daemon をインストール。

 $ sudo apt-get update
 $ sudo apt-get install avahi-daemon

デフォルトのホスト名は raspberrypi.local になっているので、

ping raspberrypi.local

で返答があれば設定完了。

これでホスト側からは、

$ ssh ユーザ名@raspberrypi.local

でリモートログインできる。

ちなみに、無線 LAN アダプタは消費電力が大きく、Raspberry Pi は電源周りが弱いらしいので結構動作が不安定になる。 これを解決するには、以下の方法でなんとかしてやる必要がある。


参考にさせてもらったページ
http://openrtm.org/openrtm/ja/node/266
http://www.youchikurin.com/blog/2007/06/linuxlan_1.html

Gakken WORLDEYE

球体ディスプレイが前々から欲しかったのだけど、ちゃんとしたやつだと数百万するのでとても手がでないなと思っていたら、学研から WORLDEYE という球体型のおもちゃ教材が4万円くらい出ているのを知って衝動買いしてみた。

f:id:k-aeg:20140105174842p:plain

基本的には球体ディスプレイ + USB メモリに入った動画教材という構成なんだけど、球体ディスプレイに HDMI 入力がついているのがミソで、PC などから画面を出力して色々遊べるようになっている。 解像度は 480 x 480 (640 x 480 の横がトリミングされる)と高くは無いのでちょっとぼやっとした画像になってしまうけど、実際そんなに細かいものを映すわけじゃないので特に気にならない。

最初から入っているコンテンツを再生するだけでもなかなか楽しい。
部屋を暗くすると月がそこに浮かんでいるかのよう。


学研ワールドアイ スペック - YouTube

さて、HDMI でつないで色々やってみたシリーズ。


Google Earth on Gakken WORLDEYE - YouTube

球体なのでやっぱり地球を映してみたくなったので、PC 経由で Google Earth を映してみた。ただ映すだけなのも味気ないので、コントローラに Leap Motion を使って地球をぐるぐる回せるようにしてみた。操作性に若干難はあるものの、わりとイメージ通りに動いてくれたので満足。

Leap Motion はそれぞれの指の動き(空間上の位置)を認識して PC に入力できるデバイスで、Amazon で 1 万円くらいで買った。Leap Motion 単体でも専用アプリいろいろあって楽しい。

さて、次は Processing で描いたスケッチで WORLDEYE をインテリア化してみる。


Processing on Gakken WORLDEYE - YouTube

うん、それっぽくなった。 ずっと PC をつないでおく訳にも行かないので、今度は Raspberry Pi で openFrameworks (Processing ぽい C++ ライブラリ) を動かして常設できるようにしてみたい。 Raspberry Pi は直接 HDMI 出力できるので WORLDEYE とは相性が良さげ。

snow drops

電車で移動中、iPhone で Processing スケッチが日課になりつつある今日このごろ。 iPhone 上で Processing.js が描ける&動かせるアプリとしては Processing for iOS がメジャーなのかと思ってたけど、エディタ部分が若干スクロールがもたついたり文字の描画が変になったりするので、ちょっと使いにくい。キーワードハイライトついてるのは嬉しい。

今使ってるのは、iCompiler für Processing という無料アプリ。なんか全体的にドイツ語(?)なので何言ってるかよくわからないけど、まあ雰囲気でボタン押せばなんとかなる(英語ローカライズくらいはして欲しいかな)。エディタの方は、ハイライト機能とかはなく若干フォントが独特だけどシンプルで TextView ぽく、動作は軽快。一応コピペ機能はあり。ほんとは API 名くらいはサジェストしてくれると嬉しい。

というわけで、iPhone でデタラメな式を描いてみたらちょっと涼しげな感じに。 雪というより雨っぽい動きだけど。線と丸が攻防する感じがなんか気に入った。