编辑和工作区转换
通过两种转换,可将设备定位在应用程序空间中。了解处理流程有助于您选择合适的转换方式。
坐标处理链
| Étape | 角色 | 如何定义它 | Persistante? |
|---|---|---|---|
| 基数 | 重新映射坐标轴(例如,Z轴向上 → Y轴向上) | session.configure.basis — 参见 教程 08 (HTTP 远程配置) | 是 |
| 装配转换 | 设备安装时的物理偏移(臂的位置、旋转、比例) | configure.mount ou configure.preset — 参见 教程 08 (HTTP 远程配置) | 是 |
| 工作空间的转型 | 摄像机或场景的导航漂移 | commands.set_transform — 参见 教程 09 (每个周期通过 WebSocket 进行实时流媒体传输) | 是(持续) |
装配转换
该配置描述了设备的物理位置——其臂长偏移量、 方向和比例。该配置仅需定义一次(或当用户修改物理配置时), 在运行时很少进行更新。
预设(出厂设置)
与其自己计算拼接参数,不如选择一个名为:
| 预设 | 原点的定位 | 手臂的方向 |
|---|---|---|
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 et preset 彼此互斥将两者放在同一条消息中会引起歧义:系统会拒绝该消息。
请选择其中一个:一个 preset nommé(为您定义剪辑)或一个
转换 mount explicite。
当您 envoyez 通过剪辑,展现这一转变: { "mount": { "transform": { … } } }.
当您 请阅读 根据快照进行拼接后,图像被压扁了: { "mount": { "position": …, "rotation": …, "scale": … } }.
这是有意为之:命令使用统一的信封 command_data ; 快照
直接序列化 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 将其重置为恒等元。
对装配或工作空间进行缩放会改变设备输出的力,因为这会影响 穿透深度 用于计算接触力。例如,一个量表的 2x 将穿透深度减少到大约一半(虚拟场景的大小是设备行程的两倍),因此得到的力大约为 较小的那一半 与……所感受到的相比 1x. 相反,一个量表的 0.5x 力量大约翻了一番。
这通常是期望的行为:在触觉场景中缩小视图会自然地使触觉反馈变弱(因为你“离得更远”了),而放大视图则会使触觉反馈变强。如果这不是你想要的效果(例如,你需要在用户缩放时保持触觉反馈强度恒定),可以通过反向调整触觉反馈强度来加以补偿。
如果您需要连续移动(气泡导航、速度控制漂移),
请使用 模块导航 与其手动发送
set_transform 在每个时钟周期内:它会为您处理物理模拟、触觉反馈
以及工作空间的边界划分。