挂载与工作区转换
两种变换用于确定设备在应用程序空间中的位置。了解管道有助于选择正确的变换。
坐标管道
| 步骤 | 角色 | 设置方法 | 是否永久保存 |
|---|---|---|---|
| 基准坐标系 | 重新映射轴(例如:Z轴向上 → Y轴向上) | session.configure.basis — 教程 08 (HTTP 远程配置) | 是 |
| 安装座转换 | 设备的物理安装偏移量(臂位置、旋转、刻度) | configure.mount 或者 configure.preset — 教程 08 (HTTP 远程配置) | 是 |
| 工作区转换 | 摄像机/场景切换引起的漂移 | commands.set_transform — 教程 09 (WebSocket 按 tick 流式传输) | 是(保留值) |
安装座转换
“安装位置”指设备在物理上的放置位置。即包括臂偏移量、 方向和比例。该参数一旦设置(或当用户更改物理安装配置时), 在运行时几乎不会更新。
预设(出厂默认设置)
请选择已命名的预设,而不是自行计算挂载点:
| 预设 | 原点定位 | 癌症方向 |
|---|---|---|
defaults | 设备底座 | 前侧(手臂正面) |
arm_front | 设备底座 | 前方 |
arm_front_centered | 以工作区为中心 | 前方 |
led_front | 设备底座 | LED 侧前方 |
led_front_centered | 以工作区为中心 | LED 侧前方 |
custom | 手动 — 手动设置安装方式 | — |
预设可一次性设置卡口、参考坐标系和工作空间原点。
直接设置挂载点
- WebSocket
- 超文本传输协定
{
"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 使用 Rapper,快照是 core::transform这是因为它会直接对该对象进行序列化。
工作区转换
工作区转换是一种应用于挂载的运行时偏移。 典型的用例是场景导航,即在设备物理位置保持不变的情况下,对应用程序视图进行平移、旋转或缩放。
挂载和工作区的转换都是永久性的。服务会记住最后发送的值。两者的区别在于用途和性能:
- 挂载点的设计初衷是设置一次后保持不变。它代表物理安装配置,并经过优化,仅在极少数情况下才会进行更新。
- 工作区转换的设计旨在以高频率进行流式传输(例如,在摄像头移动过程中每帧一次)。内部处理流程已针对此更新周期进行了优化。
- WebSocket
- 超文本传输协定
{
"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将其重置为恒等变换(identity)。
对山体或工作区进行缩放会改变设备渲染的效果。这是因为缩放会影响用于计算接触力的**穿透深度(penetration depth)**。例如 2x 缩放会将穿透深度大致减半(因为相对于设备的移动范围,虚拟场景的尺寸会扩大一倍)。因此,最终作用力为 1x从……中感受到的力量的大致情况 一半是。相反, 0.5x 杠杆能将力大致放大一倍。
这通常是期望的行为。当缩小触觉场景时,接触会自然变弱(处于“更远”的状态);当放大时,接触会变强。除非存在特殊需求(例如在用户缩放过程中需要保持刚度恒定),否则请通过反向缩放力增益(gain)来进行补偿。
如果需要连续移动(气泡导航、速度控制漂移),则每帧 set_transform与其手动进行流式传输,不如 导航模块请使用该模块。该模块将负责处理物理计算、触觉反馈以及工作区边界处理。