メインコンテンツまでスキップ

マウントとワークスペースのトランスフォーム

2 つのトランスフォームが、アプリケーション空間内のデバイスの位置を決定します。パイプラインを理解すると、適切なものを選択しやすくなります。

座標パイプライン​

ステージ機能設定方法永続性
基底変換軸を再マッピングします(例: Z-up → Y-up)session.configure.basis — チュートリアル 08 を参照(HTTP リモート設定)はい
マウント変換デバイスの物理的な取り付けオフセット(アームの位置、回転、スケール)configure.mount または configure.preset — チュートリアル 08 を参照(HTTP リモート設定)はい
ワークスペース変換カメラ/シーンのナビゲーションによるドリフトcommands.set_transform — チュートリアル 09 を参照(WebSocket ティックごとのストリーミング)はい(保持される)

マウント変換​

マウントはデバイスが物理的にどこに置かれているかを表します。アームのオフセット、 向き、スケールです。一度設定すれば(ユーザーが物理的なセットアップを変更したときに再設定します)、実行時に更新されることはほとんどありません。

プリセット(工場出荷時の構成)​

マウントを自分で計算する代わりに、名前付きのプリセットを選択してください:

プリセット原点の配置アームの向き
defaultsデバイスの基部前方(アームの正面)
arm_frontデバイスの基部前方
arm_front_centeredワークスペースの中央前方
led_frontデバイスの基部LED 側を前方
led_front_centeredワークスペースの中央LED 側を前方
custom手動 — マウントを自分で設定—

プリセットを選択すると、マウント、基底変換、ワークスペースの原点を一度にまとめて設定されます。

マウントを直接設定する​

{
"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 }
}
}
}
}]
}
mount と preset は同時に指定できません

同じメッセージで両方を送信すると意味があいまいになるため、サービスはこれを拒否します。 どちらか一つを選んでください:名前付きの preset(マウントを自動的に設定します)、または明示的な mount 変換。

コマンドとスナップショットの非対称性

マウントを送信する場合は、変換を次のようにラップします:{ "mount": { "transform": { … } } }。 スナップショットからマウントを読み取る場合は、フラットな形式になります:{ "mount": { "position": …, "rotation": …, "scale": … } }。 これは意図された設計です。コマンドは統一された command_data ラッパーを使用し、スナップショットは core::transform を直接シリアライズするためです。

ワークスペース変換​

ワークスペース変換は、マウントの上に適用される実行時のドリフトです。 代表的なユースケースはシーンのナビゲーションです。つまり、デバイスを物理的に同じ位置に置いたまま、アプリケーションのビューをパン、回転、ズームすることを指します。

マウント変換とワークスペース変換はどちらも永続的です。サービスは送信された最後の値を保持します。違いは目的とパフォーマンスにあります:

  • マウントは一度設定したら変更しない前提で設計されています。物理的なセットアップを表し、低頻度の更新向けに最適化されています。
  • ワークスペース変換は高頻度でストリーミングされる前提で設計されています (例:カメラのナビゲーション中は毎フレーム)。内部パイプラインはこの更新頻度に最適化されています。
{
"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 }
}
}
}
}]
}
スケーリングは力の出力に影響します(多くの場合、意図どおりの動作になります)

マウントまたはワークスペースをスケーリングすると、デバイスが描画する力が変化します。スケーリングは接触力の計算に使われる侵入深度に影響するためです。たとえば 2x のスケールでは侵入深度がおよそ半分になります(デバイスの可動範囲に対して仮想シーンが2倍の大きさになるため)。その結果、感じる力は 1x のときのおよそ半分になります。逆に 0.5x のスケールでは力がおよそ2倍になります。

これは通常望ましい動作です。ハプティックシーンを縮小すると接触は自然に弱くなり(「より遠くにいる」状態になるため)、拡大すると接触は強くなります。もしこれが望ましくない場合(例:ユーザーがズームしても剛性を一定に保つ必要がある場合)は、力のゲインをスケーリングの逆数で補正してください。

自動ドリフトには Navigation モジュールを使用する

連続的な移動(バブルナビゲーション、レート制御によるドリフト)が必要な場合は、 手動で set_transform をティックごとにストリーミングする代わりに、Navigation モジュール を使用してください。物理演算、ハプティックフィードバック、ワークスペースの境界処理をまとめて処理してくれます。