マウントとワークスペースの変換
2つの変換によって、デバイスがアプリケーション空間に位置付けられます。この パイプラインを理解することで、適切なものを選択できるようになります。
パイプラインの調整
| ステージ | 機能 | 設定方法 | しつこい? |
|---|---|---|---|
| 基礎 | 軸を再マッピングします(例:Z軸が上 → Y軸が上) | session.configure.basis | はい |
| 変換の適用 | デバイスの物理的な取り付け位置のずれ(アームの位置、回転、スケール) | configure.mount または configure.preset | はい |
| ワークスペースの変換 | カメラ/シーンのナビゲーションのズレ | commands.set_transform または ナビゲーションモジュール | はい(固定) |
変換の適用
マウントは、デバイスが物理的に配置される位置(アームのオフセット、 向き、およびスケール)を表します。これは一度設定される(またはユーザーが物理的な 配置を変更した際)もので、実行時にはほとんど更新されません。
プリセット(工場出荷時の設定)
マウントを自分で計算する代わりに、名前付きのプリセットを選択してください:
| プリセット | 配置位置 | 腕の向き |
|---|---|---|
defaults | デバイスベース | 前(腕を前に) |
arm_front | デバイスベース | 次へ |
arm_front_centered | ワークスペースセンター | 次へ |
led_front | デバイスベース | LEDが前方に向く |
led_front_centered | ワークスペースセンター | LEDが前方に向く |
custom | 取扱説明書 — ご自身で取り付けてください | — |
プリセットを使用すると、マウント、基底、およびワークスペースの原点を一度に設定できます。
マウントを直接設定する
- WebSocket
- HTTP
{
"inverse3": [{
"device_id": "049D",
"configure": {
"mount": {
"transform": {
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/config/mount?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":0,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
mount そして preset 互いに排他的である両方を同じメッセージで送信すると曖昧になるため、サービスはこれを拒否します。
どちらか一方を選択してください:名前付き preset (マウントを自動的に設定する)か、明示的な
mount 変換する。
いつ 送信 マウントし、トランスフォームをラップします: { "mount": { "transform": { … } } }.
いつ 読書 スナップショットからのマウントですが、フラットです: { "mount": { "position": …, "rotation": …, "scale": … } }.
これは仕様によるものです。コマンドは統一された command_data ラッパー; スナップショット
シリアライズする core::transform 直接。
ワークスペースの変換
ワークスペース変換は、マウントの上に適用される実行時の変位です。 その代表的な用途はシーンナビゲーションであり、デバイスを物理的に動かさずに、 アプリケーションのビューをパン、回転、またはズームさせるものです。
マウント変換とワークスペース変換はどちらも永続的であり、サービスは ユーザーが最後に送信した値を記憶しています。両者の違いは、目的とパフォーマンスにあります:
- マウントは、一度設定すればそのまま維持されるように設計されています。これは物理的な 構成を記述するものであり、更新頻度が低い場合に最適化されています。
- ワークスペース変換は、高頻度(例えば、カメラの移動中は毎フレーム)でストリーミングされるように設計されており、 内部パイプラインはこの更新レートに合わせて最適化されています。
- WebSocket
- HTTP
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_transform": {
"transform": {
"position": { "x": 1.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/state/transform?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":1,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
GET 現在のトランスフォームを返します; DELETE 恒等式に戻る。
連続的な移動(バブルナビゲーション、速度制御ドリフト)が必要な場合は、
以下の ナビゲーションモジュール 手動で
ストリーミングする代わりに set_transform 毎フレームごとに――物理演算、ハプティック
フィードバック、ワークスペースの境界設定を自動的に処理します。