編集およびワークスペースの変換
2つの変換によって、デバイスがアプリケーション空間内で位置付けられます。処理の流れを理解することで、適切な変換を選択できるようになります。
座標処理チェーン
| エタプ | 役割 | それをどのように定義するか | 「Persistante」? |
|---|---|---|---|
| ベース | 軸の割り当てを変更します(例:Z軸を上方向 → Y軸を上方向) | session.configure.basis — 詳細はこちら チュートリアル 08 (HTTPによるリモート設定) | Oui |
| 編集の変換 | 装置の物理的な設置位置のずれ(アームの位置、回転、スケール) | configure.mount ou configure.preset — 詳細はこちら チュートリアル 08 (HTTPによるリモート設定) | Oui |
| ワークスペースの変革 | カメラまたはシーンのナビゲーションのドリフト | commands.set_transform — 詳細はこちら チュートリアル 09 (各サイクルごとにWebSocketによるリアルタイム配信) | Oui(持続的) |
編集の変換
この設定では、デバイスの物理的な位置(アームのオフセット、 向き、スケール)が記述されます。これは一度だけ(またはユーザーが物理的な構成を変更した際)定義され、 実行時にはめったに更新されません。
プリセット(工場出荷時の設定)
自分で構成を計算するよりも、次のプリセットを選択してください:
| プリセット | 原点の配置 | 腕の向き |
|---|---|---|
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 et preset 互いに排他的である両方を同じメッセージに含めると曖昧になるため、サービスによって拒否されます。
どちらか一方を選んでください:un preset nommé(編集設定を自動的に決定するもの)または
変換 mount explicite。
あなたが 送信してください モンタージュを通じて、その変容を凝縮して表現してください: { "mount": { "transform": { … } } }.
あなたが lisez スナップショットから作成したモンタージュですが、平坦化されています: { "mount": { "position": …, "rotation": …, "scale": … } }.
これは意図的な仕様です:コマンドでは統一エンベロープが使用されます command_data ; スナップショットは
直接シリアル化される core::transform.
ワークスペースの変革
ワークスペースの変換は、モンテージの上に適用される実行時の処理です。 その代表的な用途は、デバイスが物理的にその場に留まったまま、シーン内を移動すること(アプリケーションのビューに対するパン、回転、またはズーム)です。
ワークスペースの構成と変換はどちらも永続的です。つまり、サービスは ユーザーが最後に送信した値を記憶します。両者の違いは、用途とパフォーマンスにあります:
- この構成は、一度定義すればそのまま維持されるように設計されており、物理的な構成を記述する もので、更新頻度が低い場合に最適化されています。
- ワークスペースの変換は、高頻度で出力されるように設計されています (例えば、カメラの移動中に1フレームごとに)。内部の処理パイプラインは、 この更新頻度に合わせて最適化されています。
- 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 それを初期値にリセットします。
マウントやワークスペースのスケール変更は、カメラが再現する力に影響を与えるため、 浸透深度 接触力を計算するために用いられる。例えば、あるスケールでは 2x 浸透深度をほぼ半分に縮小し(仮想シーンはカメラの移動距離に比べて2倍の大きさとなる)、その結果得られる力はおよそ 半分の半分 …で感じられるものとは 1x. 逆に、ある尺度では 0.5x 力がおよそ2倍になる。
これは一般的に望ましい動作です。ハプティックシーンでズームアウトすると、接触の強さは自然に弱くなり(「距離が遠くなる」ため)、ズームインすると強くなります。もしこれが意図した動作ではない場合(たとえば、ユーザーがズームしても剛性を一定に保つ必要がある場合など)、力ゲインを逆比例してスケーリングすることで調整してください。
連続的な移動(バブルナビゲーション、速度制御によるドリフト)が必要な場合は、
以下の モジュールナビゲーション 手動で送信する代わりに
set_transform 各ティックごとに:物理演算、ハプティックフィードバック、
および作業領域の境界設定を自動的に処理します。