-- Views
May 21, 25
スライド概要
XRミーティング 2025/5/21(https://osaka-driven-dev.connpass.com/event/353414/)登壇資料。
ARグラスで方位を合わせるための実装をどうすればいいかを調査した話
ICT業界でソフトウェアエンジニア/アプリケーションアーキテクトを担当。 社内ではXR関連技術に関する啓もう活動や技術支援に従事。 業務の傍ら、XR(特にMixed Reality領域)についての開発技術の調査、開発などを行っています。 また、「大阪駆動開発」コミュニティ所属しており、日々の調査で得た知見はコミュニティを通して情報発信を行っています。
ARグラスで現実の北を合わせたい話 2025/05 XR ミーティング @takabrz1 Takahiro Miyaura
宮浦 恭弘 (Miyaura Takahiro) Microsoft MVP for Mixed Reality 2018 XR は趣味です - 2025 大阪駆動開発( とHolomagicians) コミュニティに生息 HoloLens 日本販売してからxR 系技術に取組む 新しい技術や、MRに使えそうな技術を調べる 技術Tips : https://qiita.com/miyaura https://zenn.dev/miyaura 最近興味があって取り組んでいるもの ○ Microsoft Mesh ○ Snapdragon Spaces ○ Mixed Reality Toolkit v3.0.0 ○ Vision Pro もそろそろ・・・ @takabrz1 ※よかったらこれを機にお知り合いになってください
ふとやりたくなったので調査をしました。 2025/04/16 © 2025 Takahiro Miyaura 3
MiRZAで現実世界の北とアプリ内の向きを合わせる 色々やっていたもの結果的にはとてもかんたんなのかも? 2025/04/16 © 2025 Takahiro Miyaura 4
やりたかったこと=一応の成果物 1 Unity 内の空間と現実の北方向をそろえる 2 目次 5 3 キャリブレーションが厄介 4 やってみて気づいたこと まとめ
その前に最近のMiRZAの話 2025/04/16 © 2025 Takahiro Miyaura 6
MiRZA SDK 0.8.0がでた MiRZA の環境構築やMiRZA Library 、サンプルなどを設定できる。 https://www.devices.nttqonoq.com/developer/doc/mirza - sdk/overview 主にできること ○ Snapdragon Spaces SDKの環境設定の補助(Dual Render Fusion関連) ○ MiRZA Libraryの導入 ○ Dual Render Fusion用のMiRZAコントローラ ○ シミュレータ ○ 各種サンプル 初めてMiRZA で開発する人を支援する為の開発キット ※もちろんつかいこなしてる人も 2025/04/16 © 2025 Takahiro Miyaura 7
やりたかったこと=一応の成果物 1 Unity 内の空間と現実の北方向をそろえる 2 目次 5 3 キャリブレーションが厄介 4 やってみて気づいたこと まとめ
いわゆる歩きゲーみたいなものを作る時に。。。 ARグラスだとどうやって現実空間の方角と合わせる? 2025/04/16 © 2025 Takahiro Miyaura 9
成果物 シンプルに現実空間の方角と一致する地図をARグラスで出して散歩 2025/04/16 © 2025 Takahiro Miyaura 10
やりたかったこと=一応の成果物 1 Unity 内の空間と現実の北方向をそろえる 2 目次 5 3 そろえるのがやっかい 4 やってみて気づいたこと まとめ
Unity内の空間と現実の北方向をそろえる 課題整理 2025/04/16 © 2025 Takahiro Miyaura 12
Unity内の空間と現実の北方向をそろえる 課題整理 方位に関する情報はスマホが持ってる ○ スマホには大抵磁気センサーが入ってる ○ あとGPS ○ ジャイロもある N スマホのアプリケーションだと・・・ ○ センサー使ってUnity 内のカメラを制御 ○ 磁気センサーの情報で北の方位ベクトルを求める ○ ( ゚д゚) ウマー 2025/04/16 © 2025 Takahiro Miyaura 13
やりたかったこと=一応の成果物 1 Unity 内の空間と現実の北方向をそろえる 2 目次 5 3 そろえるのがやっかい 4 やってみて気づいたこと まとめ
そろえるのがやっかい 課題整理 2025/04/16 © 2025 Takahiro Miyaura 15
Unity内の空間と現実の北方向をそろえる 課題整理 厄介なことに ○ スマホに搭載されている各種センサーの座標軸はUnity とは異なる。 ○ スマホ:右手系(Z 軸の手前が+) ○ Unity :左手系(Z 軸の奥が+) Z Z スマホのセンサー(右手系) 2025/04/16 Unity (左手系) © 2025 Takahiro Miyaura 16
Unity内の空間と現実の北方向をそろえる 課題整理 さらに厄介なことに ○ スマホに搭載されている各種センサーの座標軸はUnity とは異なる。 ○ スマホの座標軸は“スマホの画面の垂直方向がZ 軸” ○ つまり、方位センサーもZ 軸回転(ヨー角に)なってる Y Y Z Z X X スマホ 2025/04/16 Unity © 2025 Takahiro Miyaura 17
Unity内の空間と現実の北方向をそろえる 課題整理 – ARグラスでスマホみたいにしようとすると。。。 さらに厄介なことに ○ 磁気センサーの北を指す角度はスマホの座標軸を基準にしてる ⇒スマホを回転すれば磁気センサーから得られる北の方位角も変化する ○ スマホの向きとARグラスの向き(方位上の回転角)は同期しない N ARグラスで方位を合わせるとなると スマホの座標軸とARグラスの座標軸を考慮して磁気 センサーの情報を使わないといけない。 2025/04/16 © 2025 Takahiro Miyaura 18
Unity内の空間と現実の北方向をそろえる つまり。。。 ○ スマホの座標系をUnity で扱いやすくする ○ 方位センサーの回転角はY軸回転で扱う ○ スマホの座標軸をUnity に合わせる Y軸とZ 軸を入れ替える ○ スマホの姿勢情報とARグラスの姿勢情報を同期 スマホとARグラスの姿勢(Y軸回転=ヨー角)が合えば方位センサーの情報は両方の デバイスで一致する 2025/04/16 © 2025 Takahiro Miyaura 19
みんな大好きQeutanionを使えば解決 Quaternion . Euler ( 90f , 0f , 0f ) * new Quaternion ( - gyroRawRotation . x, - gyroRawRotation . y, gyroRawRotation . z, gyroRawRotation . w) Quaternion 2025/04/16 . Euler ( 0f , - trueHeading © 2025 Takahiro Miyaura , 0f ); 20
やりたかったこと=一応の成果物 1 Unity 内の空間と現実の北方向をそろえる 2 目次 5 3 ジャイロセンサーとか磁気センサーとか 4 やってみて気づいたこと まとめ
やってみて気がついたこと 課題整理 2025/04/16 © 2025 Takahiro Miyaura 22
スマホの向きとARグラスの座標系は一致していた 例えば、Z 軸方向のベクトルが一致する いわゆる 2025/04/16 © 2025 Takahiro Miyaura 23
1 2 目次 アップデート Snapdragon Spaces SDK MiRZA Library アップデート 3 続・MiRZA センサーを使いやすくする 4 まとめ
MiRZA Library 1.1.2 4/1 リリース:前見つけたバグ系が直っていた https://www.devices.nttqonoq.com/developer/doc/mirza [1.1.2] - library/changelog - 2025 - 04 - 01 ○ MiRZA アプリv1.00.09 と合わせて以下を修正 ○ MRモードを有効に切替時のアプリの起動を安定化 ○ タッチセンサーのMovement 返却値を修正 ○ 電池残量の変化通知を1%毎に通知するよう修正 ○ サンプルコードの修正(サンプルコードの変更履歴を参照) ○ その他軽微な修正 2025/04/16 © 2025 Takahiro Miyaura 25
前のバグの話 Zenn 記事で書いていた、これです。 https://zenn.dev/miyaura/articles/snapdragonspaces 2025/04/16 © 2025 Takahiro Miyaura - mirza - lib - 5357c8812da2c9 26
1 2 目次 アップデート Snapdragon Spaces SDK MiRZA Library アップデート 3 続・MiRZA センサーを使いやすくする 4 まとめ
MiRZA について 2025/04/16 © 2025 Takahiro Miyaura 28
MiRZAとは この眼鏡部分の事 2025/04/16 © 2025 Takahiro Miyaura 29
MiRZAとは 無線利用可能なSnapdragon Spaces 対応ARグラス ○ Snapdragon Spaces 対応機 ○ 片目 1920 x 1080 ○ 視野角 約45 ° ○ RGBカメラ、モノクロセンサーカメラ X 2 ○ Qualcomm Snapdragon AR2 ○ 明るさ 約1,000 nits ○ 透明なレンズ 2025/04/16 © 2025 Takahiro Miyaura 30
MiRZA Pluginについて 2025/04/16 © 2025 Takahiro Miyaura 31
MiRZA Pluginについて MiRZA Library(Java)をUnityで使えるようにしたC#プラグイン MiRZA デバイスとして固有に持っている機能をアプリで使える 例えば、MiRZA はテンプル部分にタッチセンサーがある 自分のアプリに活用できる! 他にも ○ 母艦との接続状況( 無線式なので) ○ バッテリ残量 ○ マイク ○ MRモード等… 2025/04/16 © 2025 Takahiro Miyaura 32
MiRZA Pluginについて できること MiRZA デバイスの各種情報にアクセスできる。 情報取得 ○ バージョン整合性を確認する ○ 電池残量を取得する ○ 電池残量を取得する(非同期) ○ 充電状態を取得する ○ 充電状態を取得する(非同期) ○ グラスデバイス状態を取得する ○ グラスデバイス状態を取得する(非同期) ○ MRモード状態を取得する ○ MRモード状態を取得する(非同期) ○ ライブラリバージョンを返す 2025/04/16 Changed イベント ○ 電池残量を取得する ○ 画面表示状態を取得する ○ グラスデバイス状態を取得する ○ グラスのタッチパネル操作情報を取得する ○ グラス電源OFF を取得する ○ サービス状態を取得する ○ MRモード状態を取得する © 2025 Takahiro Miyaura この他に、 音声の収音パターン変更、Spaces Service 設定変更系もある の起動/ 停止等 33
詳細は先月、先々月のXRミーティングをどぞ MiRZA のタッチセンサーを使いやすくしてみる試み https://www.docswell.com/s/m - taka596/KV1EE4 - XRMTG- QONOQ- MiRZALibrary - 20250319 MiRZA Library 使ったアプリを楽につくれない? ○ 概要 ○ タッチセンサーを使いやすくするための検証 2025/04/16 © 2025 Takahiro Miyaura 34
サンプルで作ってみたアプリ タッチセンサーで色選択を表示、ダブルタップで確定 2025/04/16 © 2025 Takahiro Miyaura 35
ほぼ完成していて後はReadme.md書かないと。。。 UnityEvent 2025/04/16 とInput Action で実装できる部品を作った © 2025 Takahiro Miyaura 36
作った部品 MiRZA Touch Sensor Manager Inspector からUnity イベントで設定できるコンポーネント 電源関連 ○ OnBatteryLevelChanged – 1%毎の増減の変化時:バッテリー残量(%) ○ OnChargeStatusChanged – 充電中の状態(USB が刺さってる)の変化時 ○ OnPowerOffChanged – 電源を長押しでMiRZA を終了時 デバイス/ サービス関連 ○ OnSpacesModeStatusChanged – Snapdragon Spaces Service 状態変化時 ○ OnDisplayStatusChanged – ディスプレイの表示/ 非表示の変化時 ○ OnServiceStateChanged - MiRZA Library のモニタリング状態の変化時 ○ OnGlassStatusChanged - Bluetooth,Wifi,Spaces の状態の変化時 タッチセンサー情報関連 ○ OnGlassTouchGestureStatusChanged 2025/04/16 – タッチ位置、移動量等の変化時 © 2025 Takahiro Miyaura 37
作った部品 MiRZA Touch Sensor Manager Unity イベントで設定できるChanged 系のイベント タップ系 ○ OnSingleTap – 1回タップ操作時 ○ OnDoubleTap – 2回タップ操作時 ○ OnTripleTap - 3回タップ操作時 ○ OnTouchSensorDown – 最初のタッチセンサーの接触時 ○ OnTouchSensorUp – 最後のタッチセンサーから離れた時 ○ OnLongPressInitial – センサーの長押し(最初)操作時 ○ OnLongPressRepeat - センサーの長押し操作時 ジェスチャー系 ○ OnSwipeNext – タッチセンサーのスワイプ操作(前→後)時 ○ OnSwipePrevious – タッチセンサーのスワイプ操作(後→前)時 ○ OnMove – タッチセンサーを前後に動かしている時 2025/04/16 © 2025 Takahiro Miyaura 38
作った部品 MiRZA Sensor Device タッチセンサーと一部のデバイス状態をInput Action で処理できる 今回作ったようなコンテンツを 他のデバイス(モーションコントローラ)でも使える 2025/04/16 © 2025 Takahiro Miyaura 39
動作確認 2025/04/16 © 2025 Takahiro Miyaura 40
まとめ 2025/04/16 © 2025 Takahiro Miyaura 41
まとめ MiRZA 関連の情報 ○SDK のアップデート ○Snapdragon Spaces SDK v1.0.2 ○MiRZA Library v1.1.2 リリース リリース ○MiRZA Library が使いやすい部品を作る ○Unity イベントで定義 ○Input System の仕組みにのせる 2025/04/16 © 2025 Takahiro Miyaura 42
最後に とりあえず今のソースコードはGithubで公開してます。 もう少し使い勝手をよくしたい https://github.com/TakahiroMiyaura/MiRZATouchSensor 2025/04/16 © 2025 Takahiro Miyaura 43
大阪駆動開発 関西を中心に、IT系のおもしろそうなことを 楽しんでやるコミュニティ