安装座与工作区的变换
有两种变换可用于确定设备在应用空间中的位置。了解该处理流程后,便能更轻松地选择合适的变换。
坐标管道
| 舞台 | 功能 | 设置方法 | 持久性 |
|---|---|---|---|
| 基底转换 | 重新映射轴(例如: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 使用包装膜,快照是 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 与其按每个 tick 进行流式传输,不如导航模块 请使用该功能。它可统一处理物理模拟、触觉反馈以及工作区边界处理。