Gear360届いた〜かわいいぞ pic.twitter.com/uyoGOIc0Mo
— のしぷ (@noshipu) 2016年7月14日
Gear360という360度のかわいいカメラがあります。
しかし、公式アプリではGalaxy系の端末しかサポートしていないみたいです(2016年7月現在)。
でも、iPhoneでも使いたいので、Unityで開発する方法をメモ
※ GoogleStreatViewアプリを使用すればコードを書かなくてもiPhoneから撮影することは可能です。
OSC APIとは何か
Open Spherical Camera APIというAPIです。
Googleが出している、「Wifiを搭載した360度カメラの基準API」みたいな感じで、
Gear360も、THETA SもこのAPIに対応しているので、THETA S用に作ったコードがGear360で動いたり動かなかったりする感じです。
Gear360のAPIを実行する
Gear360でOSC APIが本当に実行できるか調査してみましょう。
Wifi接続方法
1. Gear360のMenuボタン長押し後、GoogleStreatViewを選択してOKを押す
2. 表示されたSSIDに繋ぎ、表示されているパスワードを打ち込む
3. 接続される
とりあえずAPI叩いてみる
infoを叩いてみましょう
/osc/info
infoのAPIリファレンスはこちら
https://developers.google.com/streetview/open-spherical-camera/guides/osc/info?hl=ja
ここで注意することは、360カメラによってプライベートIPアドレスが異なることです。
調べて載っていたものだけ掲載しておきます(2017年7月現在)。
camera | IP | OSC API Level |
---|---|---|
THETA S | 192.168.1.1 | 1 ファームウェアv01.62以降は、2 |
Gear 360 | 192.168.107.1 | 1 |
Bublcam | 192.168.0.100 | 1 |
Gear360と接続している状態で、WWWを使ってJsonをとってくるとこんな感じのデータを取ってこれます。
{ "manufacturer": "Samsung Electronics", "model": "GEAR 360", "serialNumber": "XXXXXXXXXXXX", "firmwareVersion": "XXXXXXXXXXX", "supportUrl": "www.samsung.com", "endpoints": { "httpPort": 80, "httpUpdatePort": 80 }, "gps": false, "gyro": false, "uptime": 50, "api": [ "\/osc\/info", "\/osc\/state", "\/osc\/checkForUpdates", "\/osc\/commands\/execute", "\/osc\/commands\/status" ] }
ちなみにコードはこんな感じ
APIを使えるか試すプログラム
using UnityEngine; using System.Text; using System.Collections; using System.Collections.Generic; using LitJson; public class OSCController : MonoBehaviour { private const string c_HttpHead = "http://"; private const string c_HttpPort = "80"; [SerializeField] private string m_IPAddress = "192.168.107.1"; // Gear360:192.168.107.1 / Bublcam:192.168.0.100 / RICOH THETA:192.168.1.1 void Start(){ // infoデータをダウンロードしてみる StartCoroutine (ExecGetInfo ()); } private IEnumerator ExecGetInfo(){ // URLを作成 string url = MakeAPIURL("/osc/info"); // 送信開始 WWW www = new WWW (url); yield return www; // 結果出力 if (www.error == null) { Debug.Log (www.text); } else { Debug.Log (www.error); } } private string MakeAPIURL(string command){ return string.Format ("{0}{1}:{2}{3}", c_HttpHead, m_IPAddress, c_HttpPort, command); } }
APIを叩けることがわかったので、撮影をしてみます。
撮影するプログラムを作ってみる
Gear360はAPI Level 1なので、THETA Sの過去記事の実装で動かせそうと思ったら、THETA Sにしか載っていないパラメータ(_latestFileUri)を使っていましたね…
noshipu.hateblo.jp
ということでロジック的には、以下の感じで実装します。
1. セッション開始
2. キャプチャ実行 & Commad IDの保存
3. Command IDからStatusのチェックを続けて、ステータスが完了するまで連投する
4. ステータス完了を確認したら、fileUriを受け取る
5. fileUriからgetImageのAPIを実行して画像バイナリを取得
6. バイナリからTexture2Dを生成して、Materialに貼り付ける
youtu.be
動いた!これでiPhoneでもAndroidでもPCでも動かせますね。
あと、Gear360はパラメータがおかしかったりすると、エラーも出さずに電源が落ちるので開発し辛いかもです。