ROOM-MESHアプリをitch.ioにアップしてみた
はじめに
先日ブログで書いたROOM-MESHのアプリについて、itch.ioにapkをリリースしました。
以前はgithubにアップしていたのですが、github基本的にソースコード管理を含めてのプロジェクトなので、今後のリリース先として試してみようと思った次第です。
リンクを示しておきます。もちろん無料ですのでQUEST3を持っている人はぜひ試してみてください。
プロジェクトを作ってみる
こちらが参考になりました。先人の知恵ですね。
こちらの動画も背中を押しました。概要に書いてある「itch.ioはおそらく世界で最も開発者に優しいストアです」が印象的です。ゲームだけでなく、素材など広く扱っているようです。questで検索すると多数アプリが出てきました。
登録を終えれば次のようにすぐにメニューからアップロードできます。
こんな感じの編集画面で、日本語化もされているので簡単です。ただitch.ioはグローバルターゲットなので、説明などは基本英語になります。右側のイメージ画像はDALL-Eに作ってもらいました。自分ではイラストなど描けないので助かります。
次にこちらで紹介文を入力します。
ここでちょっとハマりました。というのは普通に画像の貼り付けができたのでそれでよいかと思っていたのですが、保存するときにエラーが出ました。上部にある「AddImage]から画像を追加するのが正式な手順だったようです。
そのほかは特に難しいことはなく、Githubやyoutubeを使っているような人なら何も問題なく進められる感じです。さすが「世界一やさしい」とyoutubeにあっただけあります。
こちらで作者のプロフィールも作成できるようです。とりあえず一言程度書いておきました。
自分のトップページが自動的に用意されているのがなんかうれしいですね。
最後に
3年ほど前にGooglePlayにアプリをアップしたことがありましたが、ダウンロード数0でした。そもそも何か宣伝をしないと認知すらされないということをその際痛感しました。
こちらも何かしないと誰にも気づかれない気もしますが、様子を見ながら考えようと思います。使い勝手は良さそうなので、今後のリリースにもいいかなと思っているところです。
電波可視化とQUEST3のROOM-MESHを組み合わせてみた
はじめに
前回のROOM-MESHと電波可視化のRadioFieldMRを組み合わせてみました。さらに3Dモデル(glTF形式)としてファイル出力して、BlenderでVR表示もしてみました。個人的にはファイル出力により結果の確認や加工が測定後にPCで出来るようになったというところは応用が広がそうな気がしています。
なお3D系は初心者なもので、試行錯誤しながらやっているため、用語をはじめ説明や解釈が正しくないかもしれません。何かあればご指摘ください。
表示結果だけ先に示しておきます。
アプリ上で壁と床を表示したところ
Blenderで取り込んで表示したところ
ROOM-MESHを組み合わせてみる
Quest3かどうかを判別する
ROOM-MESHはすでに前回の記事で出来ています。
QUEST3で部屋をスキャンして表示してみた - manahiyoの気まぐれ
これをRadioFieldMRに入れてみました。ただ、この機能はQuest3だけなので、はじめにQuest3かどうかを確認して、ボタンのEnable制御をしました。
こちらのマニュアルでヘッドセットの種類による戻り値がわかります。
Plane-MESHとVOLUME-MESHの両方を使えるようにする
アプリでも2種類を使えるようにしておきたかったのですが、この切替処理に手がかかりました。単にオブジェクトをDisableしてもMESHが残ってしまうので、それを削除する必要があります。またSDKはV59からpackage化されているので、コードを直接変更することができません。
あまりいいやり方ではないかもしれませんが、実際にエディタで実行してみて、デバッグ時に作成されているオブジェクトを確認し、プログラムからはその名前を検索して削除するようにしました。こんなコードはChatGPTに頼めば一発で作成してくれます。
取り急ぎ下記のようなボタンでそれぞれを選択して表示できるようにしました。
左がPlane-MESHで右がVOLUME-MESHです。
信号強度表示のSphereも一緒にコピーする
前回のコードでは壁や床、そのほかのスキャンしたメッシュが表示できますが、可視化のためのSphereが表示されません。こちらも一緒にコピーするようにコードを追加しました。以前より可視化のためのSphereにはTAGを設定していますので、このTAGを使ってオブジェクトを検索してコピーすればよいだけです。
なおコピーの際にコピーしたものはTAGを削除する必要があります。そうしないと実行するたびにコピーが作成され、増殖状態になります。
追加前
追加後
こちらが実際にFMトランスミッタの電波強度を測定した結果です。壁と床だけのPlaneMeshです。オレンジの部分にFMトランスミッタが置いてあります。
3Dファイル出力したい
現在のアプリは、xyz座標とRSSIなどを数値データとして保存はできるものの、あとからどうやって3Dの測定結果を表示するかが問題です。そこで、ROOM-MESHと一緒に3D出力できないかとのアイデアから挑戦してみました。
いろいろ失敗
正直苦労しました。3D形式はいろいろありますし、そもそも3D系の知識がないので何をどうやったらよいのかさっぱりわかりません。
下記のような便利そうなものもいくつかあったのですが、UNITYのエディタから出力するもので、アプリの実行時には使えないようです。
ほかにもいろいろ試してみましたが、どれもエディタでの動作ばかりでした。
UniGLTFを試してみた
やっと実現出来そうなものが見つかったのが、下記です。
こちらにサンプルコードがあり、簡単に動作できました。
なお、GLTFについてはこちらを参考にしました。glTFはBlenderでインポートできるのがいいですね。
テストプログラムを作って、出力結果をBlenderで表示したら、下記のように、各オブジェクトを表示できました。素晴らしい。
喜んだのもつかの間…
実際にRadioFieldMRに組み込んでみたところ、オブジェクトは存在しているものの表示がされていないという問題がありました。Blenderで各オブジェクトを調べていったところ、どうもマテリアルがすべて同一になってしまいました。オープンソースなのでコードも追えるものの、何をやっているかさっぱりわかりません。
UniVRMでアップデートしてみる
あきらめかけていたのですが、後日再度Gitを見直したところ、UniVRMに統合していると書いてあるのに気が付きました。もしかしたら新しいバージョンなら改善されているかもしれないと思い、UniVRMで試してみました。
こちらにはサンプルコードが見当たらなかったのですが、先ほどの古いバージョンのコードをベースに修正したところ、動作しました。
動作させたところ、先ほどの問題は改善されていました。あきらめかけていたところだったので喜びもひとしおです。Blenderでimportしたところいい感じで表示できました。
Blenderで3D表示させてみた
Blenderでは以前にも記事にした通り、OculusLinkでVR上での表示機能が付いています。
下記blogの最後にやり方を示してます。
アドオンにチェックを入れればメニューのこちらからglTFファイルをインポートできます。
いつもVRセッションをスタートする場所を忘れてしまうので、スクリーンショットも残しておきます。
自分で言うのもなんですが、見ていて楽しいです。下記にスクリーンショットを示しますが、コントローラで自由に移動したり、拡大縮小ができます。このファイルを共有すれば結果の共有や分析などが便利になるのではと想像します。
まずは全体
部屋を拡大。右上にエアコンが見えます。
こちらが試しに測定した部屋。メッシュが見れるので、位置関係がわかりやすいです。
さらに拡大、VR内でほぼ実物サイズです。
こんな感じで、自由に動き回れますので、あとから測定結果をあらゆる方向から見て分析することができそうです。
FOG表示も挑戦してみたものの…
こちらは難しそうです。オブジェクトはありましたが、中身が空です。FOG表示はパーティクルで実装しているため動的でありMESHへの変換が必要みたいです。実現可能か方法を探しているところです。
最後に
glTFファイルに出力することで、様々なアプリで見たり、クラウドでの共有などができそうです。Blenderで編集ができるので、複数の測定を合成したり、2Dの断面図とか作れないかなぁなどと想像しています。また別の機会にやってみたいところです。
あと時々データが保存されていなかったりバグもあるので修正が必要そうです。
QUEST3で部屋をスキャンして表示してみた
はじめに
以前からQUEST3の機能で部屋の形状を自動的に認識できるはずとは思っていたのですが、どのようにやるのかさっぱりわかりませんでした。
ところが先日GITHUBでぴったりのものを見つけました。
この3つ目のものが素晴らしい。動画の一部分を拝借します。
まさしく、求めていたものでした。感謝。
自分でもやってみた
GITにあるソフトはMRTKを使っていたのですが、私はいつもMETA-SDKなので、ボタンなど一部変更しました。ただ、部屋のメッシュを取得する部分は基本的に同じなので、すぐ動作できました。
表示の前に、まずエリアをスキャンしておく必要があります。
メニューのSpaceSetupからセットアップを始めます。
部屋を眺めるだけで、自動的に床や壁を認識していきます。
一通り認識できました。
次に、メッシュを表示してみます。2種類表示ができて、一つは壁や床をシンプルに表示したものとスキャン結果そのものを表示ができるようです。シンプル表示ですと、次のようにタイル状に壁や床が表示されます。アンカーらしきものも表示されるので、自動的に設置されているようです。
次にこのメッシュを縮小表示します。壁や床なのでしょうがないのですが、ただのCUBEみたいでおもしろくない。
次にスキャン結果のMeshを表示してみました。エアコンの形も認識されているのがわかります。
同様にこちらのMESHを縮小してみます。個々のMESHが表示されて、窓部分がはっきり見えます。スキャンできている感じが出ていて、良いですね。
複数の部屋をスキャンしてみた
基本的に一部屋しかできないようなのですが、壁をマニュアルで編集すれば複数の部屋でも認識してくれました。非公式な方法になってしまいそうですが、こちらのほうがより実用的な感じがします。
スキャン後に下記のような画面で壁の追加や位置変更ができます。
この結果、壁はいい感じで間取りっぽく表示できました。
メッシュ表示もいい感じですね。
部屋が散らかっているのがバレバレです。
AIとかと組み合わせれば自動的に間取り図が作れそうです。
画像だと3Dっぽくないので、ショート動画アップしました。
最後に
屋内の可視化では間取りとの同時表示が一般的ですが、この機能を組み合わせれば便利になりそうです。
次回は電波可視化と組み合わせて表示したいですね。
QUEST3とマルチメータPokitで可視化
はじめに
以前より電波の可視化に取り組んでますが、電波でなくてもテスターで電圧に変換できるものなら何でも可視化できるのでは…というアイデアです。
前回もスマホで電磁波測定をやりましたが、今回はQuest3を使っています。Quest3のほうが空間認識が優れているので、安定して測定ができます。
テスターには以前すでにQuest2と接続したPokitを使っています。なので、RadioFieldMRの電波強度の入力をPokitの測定値に置き換えればいいだけです。
太陽電池を電圧源にして、明るさを表示してみる
明るさなんてそのまま見えるので可視化の必要はないという突込みがありそうですが、やってみるとなかなか面白いです。
こんな感じでPokitの測定結果をMR上に表示してます。
デスクライトでお試し
太陽電池なので、明るいところで電圧が上がります。電圧の高いところが赤、低いところを青く表示しています。下記の通りきれいに測定できました。
FOG表示にして、ライトを消すとより見やすいです。
家中の明るさを計ってみた
Quest3の素晴らしいところは、カラーパススルーだけでなく、トラッキング能力の高さです。うちは2階建てなのですが、家じゅう動き回ってもトラッキングが外れることはありませんでした。いくつかスクリーンショットを示します。
なお、この広さを移動するにはガーディアン領域をOFFにする必要がありました。その場合はQuest3内での録画ではパススルーが表示できず、SideQuestで録画しました。そのため、画面が少し傾いています。
測定中
1Fから2Fを見た
天井の上に表示されていて、なんとなく間取りもわかりますね
2Fから1Fを見た
家の外から見たところ
1F,2Fがまとめて見えます。2Fのほうが明るいことや、手前の窓側(南)が明るいのが一目瞭然です。2Fと1Fがつながっているところが階段です。見ていて楽しいですね。
サーミスタで温度を測定してみた
Pokitは抵抗も測れるので、サーミスタの抵抗を測定することで、温度の測定もできるはず。ということで、なるべく温度容量が少なそうな下記を購入してみました
-SEMITEC 超薄型サーミスタ 103JT-025-
https://www.amazon.co.jp/dp/B074BT8MRF
エアコンの吹き出し口を測定
暖房にしたのですが、このサーミスタは温度が上がると抵抗が下がるので、吹き出し口が青になってます。熱容量の少ないのを選んだつもりでしたが、それでもサーミスタの熱変動の時間がかかるようで、ゆっくり測定する必要がありました。
下記の通り、抵抗が表示されています。
それらしい結果が得られました。
最後に
次は何を測定してみようか思案中
電磁波強度を可視化してみた
はじめに
これまでSDRを使って無線信号の測定してきましたが、一方で電磁波測定器という特にFFT解析などはしないで、単に電磁波の強さを表示するという測定器も世の中には多いようです。健康への影響などを防ぐ目的で使用されるようです。ちょっとググるとたくさんありますね。
そこで思ったのが、電波の可視化ではなく、これらのような電磁波の可視化としてみたら、また用途が広がるのではないかと思いました。
測定器を選定
ただ、趣味でやるにはこれらの測定器は高価すぎて手が出ません。そんな中調べていたらお手軽そうなのがありました。
Amazon | ワンダーキット/WonderKit 電磁波レベルメータSPキット 型番:DN-G8SP | ホビー用素材 通販
試した人もいるみたいです。
この価格ならお試しで購入できるので、まずはこれで遊んでみることにしました。
まずは反応するか試す
このキットは、強さをLEDで表示します。たくさんLEDが付いているほど強く、消えている時は弱いということになります。
電子レンジで反応しています。
ACアダプタでも充電時反応しました。
安いキットとはいえ、しっかり反応してくれました。
可視化してみる
以前紹介したPokitを使って、基板から検知電圧を取り出して測定してみたいと思います。こんな感じで、電磁波検知時に電圧が上がっているのが確認できます。
電動ドリルのバッテリ充電器で可視化を試してみました。
可視化後
右下の部分が赤いので、その部分が強い電磁波が強いようです。
電子レンジでもやってみました。手前の窓部分が強いかと想像していましたが、意外と右側の操作部分に強さが集中していました。ただ、これが2.45G帯の電波によるものなのか、そのほかのノイズなのかは不明です。
あと、温め中でも時々電磁波が弱くなるタイミングが時々あり、正確に測るにはひと工夫必要そうです。
これならどこから電磁波が漏れているのかわかりやすそうです。
下記の動画に、測定の様子をまとめました。
QUEST3でリモートデスクトップ
はじめに
QUESTやPC-VRでリモートデスクトップをやる方法はいろいろあります。ただ、自作ソフトの中でリモートデスクトップをやろうとすると、話は別でだいぶ苦戦しました。、リモート操作はまだできませんが、ストリーミング表示はできるようになったのでこれまでの道のりを記録しておきます。
やってみたいこと
QUEST3のパススルーの中で、PC画面を見ながら基板のデバッグができたら便利そうだなというのがきっかけです。先日のPoikitとリモートデスクトップで資料を見ながら機器をデバッグしているような様子が将来のエンジニアの形になりそうでやってみたかったのです。
下記にアセットもあったのですが、何しろ高価でお試しで買える値段ではありませんでした。それもこれはアドオンで、ベースを別途購入必要とのこと。日本円だと5万近くになります。
ちょうどよいものを探してみる
まず検索すると下記が出てきます。おぉ、簡単にできそうじゃないかと思ったのですが、想像していなかった問題がありました。
こちらのソフト、確かに動作して、機能もOKなのですが、ARMv7用なのです。今時はARM64が当たり前ですし、何よりQUEST3のパススルー機能はARM64でないと使えないという致命的な壁がありました。
そこで、ネイティブライブラリをARM64用にビルドできないかと挑戦しました。
WebRTCをビルドしてみる
まず、WSLにDOCKERを入れます。
次にコンパイル環境を作ります。
ビルドファイルのARMをARM64にすればできるはず・・・・とやってみたのですが、何せこのビルド、1回やるのに数時間かかります。
おまけに、ライブラリが足りなくて途中でエラーが出たりして、その都度やり直しをしたりした結果、数日これにかかってしまいました。
ようやくビルドが完了し、これで64bit化ができると喜びもつかの間・・・まだ動かない。
LOGCATでエラーLOGを確認
31448 Error Unity NotSupportedException: IL2CPP does not support marshaling delegates that point to instance methods to native code. The method we're attempting to marshal is:
とのエラーメッセージ。もともと動いていた時はARMv7のmonoでコンパイルされていて、ARM64にするにはmonoをIL2CPPにする必要がありました。ここにまた壁が・・・
調べるとこんな記事が
要はIL2CPPはインスタンスではなく、static関数からネイティブプラグインにアクセスしないとだめらしい。勉強しながらなんとかネイティブインタフェースをstaticにして、エラーも出なくなったのですが・・・・
とどめはネイティブブラグインがクラッシュしました。
これはさすがにどうにもならないなと、あきらめモード・・・・
救いの神
改めてwebRTCを調べていったところ、次のようにunity用のライブラリが存在していました。
UNITYのサイトなので、公式なのかはわかりませんが、信頼はおけそうです。
ただ、上記のものとはだいぶインタフェースが違い、入れ替えるというわけにはいきそうにありませんが、やってみる価値はありそうです。
ちょっとサンプルを動かしてみたのですが、確かに画像のストリーミングが簡単にできます。下記がサンプルで、左側がストリーミング側、右側が受信側で動作しています。
これならリモートで画面表示くらいなら比較的簡単にできるかもと考えたのですが、そもそもこれどうやって別のPCに分離できるんだろう…IPの設定とかしている気配もないし・・・という感じでこの辺の知識0の私にとって厳しそうです。
そんな中、上記のwebサイトをよく読むと、「Unity Render Streaming パッケージは、このパッケージを利用して、より高レイヤーの API を提供しています。」とあるではないですか。これなら私でも使えるかもと、試してみました。
experimentという状況ではあるようですが、チュートリアルに従ってサンプルを試したところunity内で実行して簡単に別PCでストリーミングができました。おまけにリモート操作もサンプルに含まれています。素晴らしい、初めからこれを知っていれば・・・まぁ何事も勉強です。
ここまでわかれば、あとは先日作ったPokitのプロジェクトにこれを追加すればいいだけです。
QUEST3で動いた!!
こちらが実際にPCに基板CADを立ち上げてQUEST3内で表示した画像です。右の丸の部分はつかめるようになっていて、空中でもどこでも自由に置くことができます。
Pokitの測定画面を含めたのが下記です。将来はこんな感じでデバッグしているかもしれません。
まだQUEST3から操作はできませんが、PC画面を表示するところまでは動作できました。タッチパネル風に操作もできるようにしたいところです。
QUEST3でPokitのMR表示をしてみた
はじめに
PokitでデータのMR表示を先日作りましたが、Quest2だったため、白黒でいまひとつでした。カラーパススルー機能が付いたQuest3が届いたので、それぞれの測定機能を使えるようにブラッシュアップしてみました。
基本的にQUEST2と開発方法は変わりませんが、OculusIntegrationの[V57以降]を使うことが注意点になります。
ダイレクトタッチで測定機能を選べるようにする
最近はダイレクトタッチというハンドトラッキングで指でボタンを押すような操作が手軽に実装できるようになりました。こちらを使ってPokitの各機能を選べるようにしてみます。OculusIntegrationのサンプルの「PokeExamples」を流用しました。
サンプル
Pokit用に改造
右の丸の部分は位置を自由に移動できるように、つかむ部分になっています。
次のようにつかんで持ち歩けます。
ちなみに、外部からwebカメラで様子を撮影すると、次の通りです。
何もないものを見ているようで、他人からすると不気味かもしれません。
次のようにタッチすることで、ボタンを押して機能の選択ができます。
測定は先日のとおりBLEのモジュールから設定してデータを取り込むだけなので、特に難しいことはしていません。
測定してみた
内蔵の温度計
電圧計(乾電池の測定)
抵抗測定(未接続)
抵抗測定(10オームのリード抵抗)
最後はジェスチャー機能を使って、Pokitと一緒にGood!!!
どんな用途に使えるかはアイデア次第でいろいろありそうです。
MRとPokitは相性が良いかもしれません。