MDBT50Q-RXとかnRF52840 DongleにIndexのFWを焼いてWatchman dongleっぽいのを作る

これは何

nRF52840採用のMDBT50Qを搭載したドングルにIndexのFWを焼いて、Watchman dongleとして機能するドングルを作るメモ書きです。

Nordic公式のnRF52840 Dongle(pca10059)への書き込みもついでに書きます!

※いつも通りてきとうブログです

もくじ

FWの準備

とりあえずsrec_catをダウンロードしてexeのあるディレクトリにパスを通しておきます。

IndexのFWは"C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\indexhmd\resources\firmware\radio\gd_1558748372_dfu"にあります(解凍してね)。

cmdで以下のコマンドを一行ずつ実行します(ディレクトリは要変更)。

cd C:\Users\marim\Desktop\Dongle\gd_1558748372_dfu
srec_cat.exe s140_nrf52_6.1.1_softdevice.bin -Binary -offset 0x1000 -o s140_nrf52_6.1.1_softdevice.hex -Intel
srec_cat.exe temp_app_stamped.bin -Binary -offset 0x26000 -o temp_app_stamped.hex -Intel

これでApplicationとSoftDeviceのhexファイルを入手できます。

Bootloaderを準備していない場合はこちらから(nRF52840 Dongleの場合は必要ない)。

nRF52840のメモリレイアウトとかはこの辺に載っています。

MDBT50Q-RXとJ-Linkの接続

MDBT50Q-RXは背面にSWD(GND、3.3v、SWCLK、SWDIO)のパッドがあるので、なんとかしてSWDをJ-Linkと接続します。

コンタクトプローブを使った治具のデータも公開しています!

ピン配置は公式のブログ参照

書き込み

J-Link経由

PC→USB→J-Link→SWD→MDBT50Q-RXの順番で接続し、nRF ConnectのProgrammerを開きます。認識しない場合はUSBから5V給電してください。

J-Linkを選択した後、準備したBootloader(nrf52840_xxaa_debug.hex)とnRF5 SDK内のMBR(nRF5_SDK_17.1.0_ddde560\components\softdevice\mbr\hex\mbr_nrf52_2.4.1_mbr.hex)をFile memory layoutにドラッグ&ドロップし、Erase&writeでBootloaderとMBRを書き込むことができます。

USB経由(nRF52840 Dongleの場合はここから)

MDBT50Q-RXかnRF52840 DongleをUSB経由でPCに接続し、nRF ConnectのProgrammerを開きます。

Open DFU Bootloaderを選択した後、MBR(mbr_nrf52_2.4.1_mbr.hex)、SoftDevice( s140_nrf52_6.1.1_softdevice.hex )、Application(temp_app_stamped.hex)、Bootloader(nrf52840_xxaa_debug.hex)の四つのファイルをドラッグ&ドロップしてWriteをクリックし、すべてを書き込むことができます。

USB再接続でValve VR Radioとして認識されます!(>_<)

その他の話とか

・ローカルに落ちているIndexHMDのFWそのままなので、音声入力が追加されたり、SteamVRでFWアップデートしろと言われたりします。

・J-Linkですべて書き込もうとしたらうまくいきませんでした……なんで??

・最終的にBootloaderは必要ないのでnRF52840 Dongleに焼く場合はMBR、SoftDevice、Applicationだけでいいです(たぶん)。

よく分からないけどOpen BootloaderのExampleをWindows環境でコンパイルする

これはなに

nRF5 SDK内のOpen BootloaderのExampleをWindows環境でコンパイルする手順のメモ書きです。

本来はnrfutilでキーペアの作成などを行わなければいけないのですが、今回はnRF ConnectのProgrammerからUSB経由で書き込みを行うためだけにBootloaderを作りたかったので、デバック用プロジェクトをそのまま使います。

というかこれを書いてる人が全く分かってないのでご了承ください。(>_<)

目次

Make for Windowsのインストール

以下のサイトからMake for Windowsの最新バージョンをダウンロード&インストールします。

インストール先を変更する場合はパスを通す際に必要になるのでパスをメモっておきます。

環境変数PATHを設定する

  • コントロールパネル/システムとセキュリティ/システム/システムの詳細設定/環境変数を開きます。
  • システム環境変数(S)のPathを選択し、編集(I)を押します。
  • 新規(N)でmakeのインストール先に¥binを追加したパスを入力してOKを押します。

Arm Embedded Toolchainのインストール

以下からgcc-arm-none-eabi-9-2020-q2-update-win32.exe(最新版ではない)をダウンロード&インストールします。

Exampleのコンパイル

nRF5 SDKをまだダウンロードしていない場合は以下からダウンロードします。

Open BootloaderのExampleはnRF5_SDK_17.1.0_ddde560\examples\dfu\open_bootloaderにあります。pca10056とpca10059は、それぞれ公式の開発ボードのnRF52840 DKとnRF52840 Dongleのことです。今回はデバック用プロジェクトを使いたいので、pca10056_usb_debugを使います。

コマンドプロンプトで以下のコマンドを一行ずつ実行します(ディレクトリは要変更)。


cd Desktop\nRF5_SDK_17.1.0_ddde560\examples\dfu\open_bootloader\pca10056_usb_debug\armgcc
make

これでarmgcc\_buildにnrf52840_xxaa_debug.hexが生成されます。

steamvr.vrsettingsのメモ書き

※使ったのとかまとめるだけ

場所

steamvr.vrsettings

"C:\Program Files (x86)\Steam\config\steamvr.vrsettings"

SteamVRの設定ファイル

default.vrsettings

"C:\Program Files (x86)\Steam\steamapps\common\SteamVR\resources\settings\default.vrsettings"

デフォルト設定

"steamvr"

"requireHmd"

値:true,false デフォルト:true

SteamVRの起動にHMDの接続を必須とするか

"ipdOffset"

値:数値(m) デフォルト:0.0

IPDオフセット

"activateMultipleDrivers"

値:true,false デフォルト:false

複数ドライバーの有効化(OculusとLightHouseなど)

"renderCameraMode"

値:raw,parallel デフォルト:parallel

Valve Indexの平行投影(パラレルプロジェクション)の有効化

"showInternalSettings"

値:true,false デフォルト:false

Valve社内向けの設定の表示

アプリ毎リフレッシュレートの設定など

"trackingLossColor"

値:カラーコード デフォルト:"#4D6680"

SteamVR Trackingシステム採用HMDのトラッキングロスト時に表示される単色背景の色設定

"TrackingOverrides"

その他

JSONの整形と構文チェックができるサービスを利用して事故を未然に防ぎましょう。

ViveトラッカーでインサイドアウトのHMDをベースステーションに対応させる"OpenVR Tracking Overrides"

これは何?

HMDやコントローラーをViveトラッカーでトラッキングしたり、HMDを被らないでVRができるTracking Overridesのやり方を説明します。

ラッキングオーバーライド

Tracking OverridesはSteamVR上のデバイスのトラッキングデータを別のデバイスのトラッキングデータで上書きすることができる機能です。トリガーやタッチパッドなどのインプット、バイブレーションなどは上書きされません。

この機能を用いるとこんなことができます。

インサイドアウトHMDにトラッカーを取り付けてベースステーションでトラッキングする。

・VMTと併用してオリジナルのトラッキングシステムで既存のVR機器をトラッキングする

・頭にトラッカーをつけて、HMDを外した状態でVRゲームをプレイする。

f:id:marimotokunn:20220119081455j:plain

公式のWikiはこちら

やり方

Tracking OverridesはSteamVRのconfigファイルにTracking Overridesセクションを追加して行います。

また上書きには上書き元のデバイスパスが必要なため、デバイスパスの調べ方を解説します。ViveトラッカーでQuestをトラッキングしようと思ったらViveトラッカーのパスを調べる必要があります。(>_<)

バイスパス

SteamVR上のデバイス全てにあるデバイス固有のパスです。

確認はシステムレポートを作成から行います。

f:id:marimotokunn:20220118054432p:plain

f:id:marimotokunn:20220118054937j:plain

/devices/から始まる文字列がデバイスパスです。

configファイルの編集

configファイルは"C:\Program Files (x86)\Steam\config\steamvr.vrsettings"にあります。

※ファイルの編集はSteamVRを壊す可能性があります。configファイルのバックアップをおすすめします。また編集するときはSteamのタスクを落としましょう。

まずはsteamvrセクションにactivateMultipleDriversを追加します。


"steamvr" : {
      "activateMultipleDrivers" : true
   }

すでにある場合は値を変更してください。trueにすると複数ドライバーを認識できるようになります。(例、OculusとHTCなど)

次にTracking Overridesセクションを追加します。※例を参考にして、カンマの位置など正しいJSONの形式で記述してください。


"TrackingOverrides" : {
       "【デバイスパス(データ参照元)】" : "【デバイスorセマンティックパス(データ上書き先)】"
}

セマンティックパスとはデバイス固有ではなく、その時々によってパスに最適なデバイスが参照されます。

例 HMD“/user/head" 右手コントローラー“/user/hand/right” 左手コントローラー“/user/hand/left”

両方ともデバイスパスで指定することも可能です。

指定したデバイスがSteamVRに認識されると(トラッカーの電源が入ると)トラッキングデータの上書きが適用されます。


{
   "TrackingOverrides" : {
      "/devices/htc/vive_trackerLHR-01234567" : "/user/head"
   },
   "steamvr" : {
      "activateMultipleDrivers" : true,
      "installID" : "00000000000000000000",
      "lastVersionNotice" : "1.20.4",
      "lastVersionNoticeDate" : "0000000000",
      "showAdvancedSettings" : true
   }
}

セクション、セクションの中身が複数ある場合は","でつなぎます。

オフセット?

f:id:marimotokunn:20220118102011j:plain

ViveトラッカーでHMDをトラッキングをする場合、写真のように前方にトラッカーを付けることである程度正しくトラッキングするようになります。さらに正確にトラッキングしたい場合はViveトラッカーの位置をオフセットすることをおすすめします。

ファームウェアを編集してオフセットする方法

個人的にはVMTとSteamVR Pluginを用いてオフセットするためのUnityアプリを作るのがおすすめです。

最後に

Tracking Overridesをわかりやすく(そのつもり)説明しました。configファイルを変にいじるとSteamVRが壊れちゃうのでほどほどにしようね!

Vive Flow + SteamVR セットアップガイド(実験的RiftCat、VRidge、Moonlight、SteamVR Tracking)

これは何?

ViveFlowでSteamVRを使うためのセットアップを紹介します。

実験的ですがRiftCat+Moonlightのやり方も紹介します。

※追記 2022/08/08

現在VivePort経由ではFlowにVRidgeをダウンロードできなくなってしまいました。解決策を模索中です。

※追記 2022/08/09

Focus用VRidgeのAPK(2.6.2 stable)は以下(直リンク)からダウンロードできます。

ADB経由でインストールすることはできるはずですが、正常起動、動作するかは不明です。(>_<)

※追記 2023/03/22

現在Flow+VRidgeの構成は正常動作しないようです。SteamVRをストリーミングしたい場合はCloudXRがおすすめです。

VRidgeのセットアップ

ストリーミングにはVRidge(RiftCat)というソフトを用います。

Vridgeのインストール

PCにRiftCatクライアントをインストールします。

RiftCatは10分までは無料、それ以降は15ユーロ(買い切り)なので、購入する前に一度試してみることをお勧めします。

次はViveFlowにVRidgeを導入します。VIVEPORTにFocus用のVRidgeがあるのでそれをインストールします。

FlowとPCを同一ネットワークに接続します。PCはアクセスポイントに有線接続するのがおすすめです。

FlowでVRidgeを起動するとPCのクライアントに端末名が表示されるので、「はい」を押して接続します。接続後、再生マークを押すことでSteamVRを開始できます。

他のHMDが接続されているとそちらが優先されてしまうため、事前にUSBを抜いておきましょう。

RiftCatの設定

VRidgeの設定ボタンからストリーミングの設定を変更することが可能です。これは私の設定ですが、PCスペックやWiFiの環境など、自分に合った設定を探してみてください。

ビットレートにすれば画質は向上しますが、遅延が増えたりストリーミングが不安定になります。

RiftCatのストリーミングの設定

解像度は"C:\Program Files (x86)\Riftcat 2\Config\vridge.cfg"からカスタム数値を設定できます。430行目のVR.ResolutionをHeight:1600、Width:3200に設定します。このコンフィグファイルでビットレートなども範囲外に設定できます。

コントローラー

コントローラーのソリューションをいくつか紹介します。

VRidgeの機能を使う

統合設定の3自由度コントローラーをONにすると、スマホコントローラーをViveコンにエミュレートすることができます。(標準でON)

OpenVR Space Calibrator

Space Calibratorを用いてFlow(VRidge)のプレイスペースと他のトラッキングシステム(LightHouseなど)をキャリブレーションし、併用することが可能です。

Oculus Touch Steam Linkを用いればOculus Touchを用いることも可能です。

HMDをLightHouseに対応させる

HMDをLightHouseでトラッキングすれば、キャリブレーション不要でLightHouse互換コントローラーを使えます。

Moonlight

Moonlightとは?

MoonlightとはNVIDIA GameStreamをSHIELD以外のデバイスで使用するためのソフトです。コア技術はNVIDIA謹製のため非常に安定したストリーミングが可能です。

現在ViveFlowでVRidge+Moonlightを使おうとするとVridge側が機能停止してしまい、Flowのモーションセンサーを使うことができない状態です。またFlowの適正なディストーション設定も不明なため、こういう方法もあるんだ~程度の認識で大丈夫です。

FlowでMoonlightを使う

VRidgeのストリーミングでMoonlightを使用する基本的な方法は公式のセットアップガイドをご覧ください。

https://support.riftcat.com/hc/en-us/articles/115005811705-Moonlight-Basic-Guide

ここではViveFlowでの特別なセットアップを紹介します。

Moonlightのインストール

ViveFlowでは一般的なアプリストアからアプリをインストールすることはできないため、ADB経由でAPKをインストールします。

Flowの場合は

設定>詳細設定>不明なアプリのインストール

設定>詳細設定>開発者向けオプション>USBデバック

をONにしましょう。

USBモードは何もしないを選択します。

ADB環境の構築

APKのインストール

MoonlightのAPKはこちらから

AndroidGUIの操作

Moonlightを使う都合上、AndroidGUIを操作する必要があります。Flowにはタッチパネルがなく、マウスを接続しても認識しないため、GUI操作はVysorを使うのがお勧めです。

 

最後に

ViveFlowでSteamVRをプレイするセットアップを紹介しました。NVENC、HEVCを使えばある程度ストリーミングも安定するので、Moonlightを使う必要はないと思います。今のところFlowのマイクは使えないですが、VRCHATやその他VRゲームをカジュアルに遊ぶためのHMDとしていいのではないでしょうか。(>_<)

 

「猫でもできる」Watchman dongleをいい感じに錬成する方法

これは何?

Watchman dongleをいい感じに錬成する方法を思いついたので紹介します。Watchman dongleに関する詳しい情報は前回のブログで。

概要

今回やることをざっくりと説明します。

①nRF24LU1を搭載したUSBドングルとnRF24LU1P(32kb)を購入する。

②USBドングルのチップをnRF24LU1Pに交換する。

ファームウェアの準備をする。

ファームウェアを書き込む。

ごめんなさい。猫にはちょっと厳しいかも…

部品選び

USBドングル

とりあえずnRF24LU1用のUSBドングルが流用できることは確認しました。他のnRF24シリーズ用の基板でも一部互換性のあるものがあるかも(詳しくない)。今回はAliexpressで購入した怪しいドングルを使います。

極論を言えばLogitech Unifying receiverでもできるのかな?

nRF24LU1P

nRF24LU1P-F32Q32-Rを購入しました。32kbのメモリ容量とNordicのブートローダーが書き込まれていることが条件です。新品のチップなら問題ないですが、Aliexpressなどで買うと別のブートローダーが書き込まれていることがあるらしいので、レビューを要チェックです。

チップのリプレース

熱風式リワークステーションを用いてチップ換装を行います。QFNパッケージのハンダ付けは初めてでしたが、本当に大変でした。もう一生やりたくない…(>_<)

参考にした動画

ファームウェアの準備

ファームウェアの変換については前回のブログで。

今回はHDK付属のファームウェアを使いましたが、Viveドングルのファームウェアでも行けると思います(試してない)。

ファームウェアの書き込み

書き込みはnRFgo Studioを使います。チップ交換が成功したかつチップにNordicのブートローダーが書き込まれていれば、USBポート接続時にDevice ManagerのnRF24LU1+Bootloaderにタブが出てきます。

f:id:marimotokunn:20211228200643p:plain

あとはhexファイルを指定してProgram flash memoryボタンをぽちぽちしましょう。書き込み終了後にUSBポートに刺しなおすとWatchman dongleとして認識するはずです。

お疲れさまでした。

最後に

ドングルの選択肢を増やそうと調べはじめましたが、なんとか動くようになってよかったです。技適問題は完全に#000000なので製作は自己責任でお願いします。

Watchman dongleの道標

これは何?

自作Watchman dongleで試行錯誤する過程で得た情報をまとめます。

※メモ書き程度の信憑性です

 

そもそもWatchman dongleって何?

Watchman dongleって何

SteamVR Trackingを採用している無線機器をPCに接続するためのトランシーバーです。

なんで必要なの

ドングルは基本的に1つの機器に1つ必要です。例えば、ValveIndexにknuckles controllerを使おうと思ったらドングルは必要ありません。これは、SteamVR Trackingを採用しているHMDには、コントローラー用にあらかじめドングルが二つ搭載されているためです。しかし、MetaやWindowsMRなどのHMDには当然Watchman dongleは搭載されていません。ここで初めて外部にドングルが必要になります。その他にもコントローラー単体で利用したりする際に必要になります。

ドングルのハードウェアを紐解く

最も普及しているドングルはHTCが製造しているViveTracker用のドングルです。中身を見てみましょう。

https://fccid.io/NM82PYV300/Internal-Photos/Internal-photos-3265244

Internal Photos見ると、ViveドングルにはnRF24LU1Pというチップが使われているようです。

ViveProやViveCEにも同様のチップが使われています。

Indexに関してはnRF52840という最新のチップが使われています。(ここでは省略)

Tundra LabsのSuper Wireless Dongleもindexと同様にnRF52840を使用しているようです。Raytac製のMDBT50Q-P1MV2というモジュールが使われています。

nRF24LU1P

nRF24シリーズはNordic Semiconductorが製造している2.4GHz用のRF SoCです。nRF24LU1PはUSBコントローラー、フラッシュメモリを備えており、これ1つでドングルが作れる!そんなチップです。

自作ドングルのすゝめ

ここで考えられる道は二つあります。それは「nRF24LU1P(nRF52840)が搭載されているドングルにWatchman dongleのファームウェアをフラッシュする」か「0から作る」です。

nRF24LU1P(nRF52840)搭載ドングルをWatchman dongleにする

Steam Controller Wireless Receiver

Steam Controller Wireless ReceiverはSteam Controller用のドングルです。Viveドングルと同様にnRF24LU1Pを使用しています。

https://fccid.io/2AES41002/Internal-Photos/Internal-Photos-2647947

このドングルは簡単にWatchman dongleに書き換えられることで有名です。

やり方の一例を紹介します。また、Natural locomotionというソフトでもっと簡単に書き換えられるようです。

この方法はチップにValve Nordic bootloaderが書き込まれているデバイスでのみ使える様です。

Crazyradio PA

20dBmのパワーアンプを搭載している長距離用のドングルです。

書き込み方法はこちら。

Flashing Watchman firmware to Crazyradio PA · GitHub

Logitech Unifying receiver

Logitech Unifying receiverはLogitech製のマウスやキーボード用のドングルです。一部のモデル(型番:C-U0007)はnRF24LU1Pが使われているようです。

安価で入手性もよく、このドングルにWatchman dongleのファームウェアをフラッシュできたらいいなと思ったのですが、いくつか問題があるようです。どうやらWatchman dongleのファームウェアLogitechブートローダーは一部領域が被っており、Logitechブートローダー領域は書き込み保護されているため使用できないそうです。SPI経由で書き込むか、Watchman dongleのファームウェアを修正すれば行けるかもしれませんが、簡単ではありません。

MDBT50Q-RX

Super Wireless Dongleと同じnRF52840を搭載した無線モジュールの開発用ドングルです。

nRF52シリーズの書き込みにはnRF Connect for DesktopのProgrammerソフトを用います。実際に購入して接続したところ、ソフト側で認識しなかったためいろいろ調べたのですが、Nordic製のブートローダーが書き込まれていないことがわかりました。(>_<)

J-Linkを介してブートローダーを書き込むことで使えるそうですが、そもそもnRF52用のファームウェアが手に入らないので詳細不明です。

ブートローダーの書き込み

ファームウェアの書き込み

その他のドングル

Aliexpressやebayを見ているとnRF24LU1やnRF24LU1Pを搭載したUSBドングルを比較的安価に見つけることができます。ここで注意してほしいのはチップのメモリ容量です。nRF24LU1Pには16kbモデルと32kbモデルがありますが、Wachman dongleのファームウェアは21kb近くあるので、32kbモデルでないと書き込めません。(>_<)

また、USB経由でファームウェアを書き込むにはNordicのブートローダーが書き込まれている必要があります。

ファームウェアの書き込みについては次章で触れます。

自作ドングル(ハードウェア)

手に入るデータ

SteamVR Tracking ライセンシーになることで、Valveが公開しているドキュメントにアクセスすることができます。その中にはドングルの回路図やbrdデータも含まれるため、基板作成の経験があれば比較的簡単に作ることができると思います。

その他の方法

基板を手に入れる方法は他にもあります。それはnRF24LU1ドングルの基板を流用することです。QFNパッケージをリフローできる環境が整っていれば、0から作るよりずっと簡単にドングルを作成できます。

自作ドングル(ファームウェア)

手に入るデータ

手に入るファームウェアはいくつかあります。一つはViveドングルのファームウェアで、残りは基板のレイアウトデータと同様にライセンシーになることで手に入ります。

・Viveドングル用(要SteamVRインストール)

"C:\Program Files (x86)\Steam\steamapps\common\SteamVR\tools\lighthouse\firmware\vr_controller\archive\htc_vrc_dongle_1461100729_2016_04_19.bin"

・ライセンシー向けドキュメント(要SteamVR Tracking HDKインストール)

"C:\Program Files (x86)\Steam\steamapps\common\SteamVR Tracking HDK\firmware\dongle\watchman_dongle_combined.bin"

・Triad Semiconductor製SteamVR Tracking HDK付属ドングル用(要SteamVR Tracking HDKインストール)

"C:\Program Files (x86)\Steam\steamapps\common\SteamVR Tracking HDK\firmware\2018.06.05\watchman_v3_dongle_v1525468496.bin"

nRF24LU1Pへの書き込み

nRF24LU1Pへの書き込みはUSBを使ったやり方とSPIポートを使ったやり方があるようです。USBを介したやり方はチップにNordicのブートローダーが書き込まれていないと出来ないため、書き込まれていない場合はSPIポートからブートローダーを書き込む必要があります(今回は省略)。nRF24LU1Pには工場出荷時にNordicのブートローダーが書き込まれているらしく、USBポートに接続するとnRFgo StudioにてnRF24LU1+Bootloaderとして認識されます。

ファームウェアの変換

USBを介した書き込みにはnRFgo Studioを用います。また、書き込むにはファームウェアの2進数のデータ(bin)を16進数のデータ(hex)に変換する必要があります。変換にはsrec_catを用います。

ファームウェアのデータとダウンロードしたsrec_cat.exeをデスクトップに配置します。コマンドプロンプトを開いて「cd Desktop」でディレクトリを変更します。次に「srec_cat.exe watchman_dongle_combined.bin -Binary -o watchman_dongle_combined.hex -Intel」を実行します。これでファームウェアのhexファイルを手に入れることができます。あとはnRFgo Studioを開き、Device manager\nRF24LU1+Bootloaderにてhexファイルを指定して書き込むことができます。

技適(あいまい)

Watchman dongleと技適

国内でドングルなどの無線局を使用する場合、原則として免許が必要になります。ただし、いくつか例外があります。まずは微弱無線です。名前の通り微弱な電波しか用いない無線機器で2.4GHz帯の場合、3mで35uV/m以下なら免許の申請や届け出が必要ありません。もう一つは特定小電力無線です。市場の多くの無線モジュールが該当し、技術基準適合試験に合格した製品のみ使用することができます。

もしnRF24LU1Pでドングルを作ったらこれら例外のどちらかに当てはまりますか?

→当てはまりません。

回避?

技適未取得機器を用いた実験等の特例制度を利用することで、技適マークのない無線機器を使用することができます。また電波暗室での使用は問題ないと思われます。

最後に

ここ数か月Watchman dongleについていろいろ調べて分かった情報をまとめてみました。今は自作しなくてもTundra LabsやTG0など新しい既製品のドングルも出始めています。数年前には想像もできなかった、まさかのWatchmanドングル大戦時代の到来です。楽しみですね(何が?)。

Special thanks to VRコミュニティの皆さん、いろいろ教えてくれたXRハードメーカーの中の人、サメチャン…

このブログはあんふぃとらいと Advent Calendar 2021に参加しています。

次はNajikoさんの記事です。楽しみで夜も眠れません。(>_<)