メインコンテンツへスキップ

マウントとワークスペースの変形

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

座標パイプライン​

ステージ機能設定方法永続性
基底変換軸を再マッピングします(例:Z軸上向き → Y軸上向き)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 ティックごとにストリーミングする代わりに、ナビゲーション・モジュール を使用してください。物理演算、ハプティックフィードバック、ワークスペースの境界処理を一括して処理してくれます。