模拟通道
一般情况
模拟通道 websocket 默认 URL 为 ws://localhost:10001
.注意:端口可在配置中更改。
这是一个高频率的双向通信通道,可以接收设备状态。我们希望接收会话 或设备相关命令。系统将以 1:1 的比例发送状态响应信息(请参阅状态更新)。 系统都会以 1:1 的比例发送一条状态响应信息(参见状态更新)。
初始信息
当连接到 websocket 时,服务会发送一条包含完整设备列表的信息。初始信息如下 JSON
格式:
{
"inverse3": [
{
"device_id": "04BA",
"config": {
"type": "inverse3",
"device_info": {
"minor_version": 1,
"major_version": 7,
"id": "04BA",
"model": 4,
"uuid": "2D35F80DD9005F599B68F49944CB04BA"
},
"port": "COM13",
"extended_device_id": "2D35F80DD9005F599B68F49944CB04BA",
"extended_firmware_version": "8C20FDC8010AA1E15AA133CDA2534874",
"gravity_compensation": {
"enabled": true,
"scaling_factor": 1
},
"handedness": "right",
"torque_scaling": {
"enabled": true
}
},
"state": {
"angular_position": {
"a0": -69.31704,
"a1": 137.62952,
"a2": 19.832787
},
"angular_velocity": {
"a0": 0,
"a1": 0,
"a2": 0
},
"body_orientation": {
"x": -0.01940918,
"y": 0.7026367,
"z": 0.00048828125,
"w": 0.7113037
},
"cursor_position": {
"x": 0.07842738,
"y": -0.14836666,
"z": 0.14297646
},
"cursor_velocity": {
"x": -0.011969013,
"y": 0.0012009288,
"z": -0.043197
},
"mode": "idle"
},
"status": {
"calibrated": false,
"in_use": false,
"power_supply": true,
"ready": true,
"started": true
}
}
],
"verse_grip": [
{
"device_id": "61548",
"config": {
"port": "COM3",
"type": "verse_grip"
},
"state": {
"button": false,
"hall": 0,
"orientation": {
"x": -0.5019531,
"y": 0.8632202,
"z": -0.048095703,
"w": -0.022338867
}
},
"status": {
"error": 0,
"ready": true
}
}
],
"wireless_verse_grip": [
{
"device_id": "0",
"config": {
"port": "COM6",
"type": "wireless_verse_grip",
"major_version": 1,
"minor_version": 4,
"hardware_version": 1
},
"state": {
"battery_level": 0.816,
"battery_voltage": 3.77,
"buttons": {
"a": false,
"b": false,
"c": false
},
"hall": 16,
"orientation": {
"x": -0.019866943,
"y": -0.017486572,
"z": 0.05508423,
"w": -0.9963989
}
},
"status": {
"connected": true,
"awake": true,
"ready": true
}
}
]
}
状态更新信息
服务将为收到的每条信息发送一条状态更新信息,其中包含所有设备的状态。
如果您想知道机器的状态,就必须事先向它发送信息,例如力值(即使力值为零)。
如果将我们的设备用作输入设备,例如跟踪位置而不施加力,这一点尤为重要。
状态更新信息如下 JSON
格式:
{
"inverse3": [
{
"device_id": "04BA",
"state": {
"angular_position": {
"a0": -69.31704,
"a1": 137.62952,
"a2": 19.832787
},
"angular_velocity": {
"a0": 0,
"a1": 0,
"a2": 0
},
"body_orientation": {
"x": -0.01940918,
"y": 0.7026367,
"z": 0.00048828125,
"w": 0.7113037
},
"cursor_position": {
"x": 0.07842738,
"y": -0.14836666,
"z": 0.14297646
},
"cursor_velocity": {
"x": -0.011969013,
"y": 0.0012009288,
"z": -0.043197
},
"mode": "idle"
},
"status": {
"calibrated": false,
"in_use": false,
"power_supply": true,
"ready": true,
"started": true
}
}
],
"verse_grip": [
{
"device_id": "61548",
"state": {
"button": false,
"hall": 0,
"orientation": {
"x": -0.5019531,
"y": 0.8632202,
"z": -0.048095703,
"w": -0.022338867
}
},
"status": {
"error": 0,
"ready": true
}
}
],
"wireless_verse_grip": [
{
"device_id": "0",
"state": {
"battery_level": 0.816,
"battery_voltage": 3.77,
"buttons": {
"a": false,
"b": false,
"c": false
},
"hall": 16,
"orientation": {
"x": -0.019866943,
"y": -0.017486572,
"z": 0.05508423,
"w": -0.9963989
}
},
"status": {
"ready": true
}
}
],
"custom_verse_grip": [
{
"device_id": "0",
"state": {
"battery_level": 0.816,
"battery_voltage": 3.77,
"buttons": {
"a": false,
"b": false,
"c": false
},
"hall": 16,
"orientation": {
"x": -0.019866943,
"y": -0.017486572,
"z": 0.05508423,
"w": -0.9963989
},
"extension_data": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
},
"status": {
"ready": true
}
}
]
}
会话命令
会话命令是与当前模拟/连接/会话相关的操作。它们构成与设备 特定的操作。
强制渲染状态
要求提供所有设备和配置的状态快照。
{
"session": {
"force_render_full_state": {}
}
}
设置坐标原点
为所有设备设置坐标原点。坐标原点可以设置为 device_base
或 workspace_center
.默认值为
device_base
.
如果将坐标原点设置为
workspace_center
, (0, 0, 0) 位置将移动到设备工作区的中心。
{
"session": {
"set_coordinate_origin": {
"coordinate_origin": "workspace_center"
}
}
}
设定基准
指示从我们的坐标系到你们的坐标系的映射。该映射将在整个会话期间保持不变。
如前所述,Haply 使用右手坐标系和 Z-Up。该命令允许将当前会话设置为另一个坐标系,这样从该坐标系返回的所有状态都将以该坐标系表示。 这将导致从该系统返回的所有状态都以该系统表示。它还会更改 假设坐标系。例如设置光标位置。
坐标系是相对于我们的坐标系指示的,可以包含符号字符 (+
或 -
)在有效的 X
, Y
或 Z
字母。这是有效值的示例,例如 : XYZ
, ZYX
, +Y-Z+X
, X-ZY
等等。
这意味着,定义为 "YZX "的系统具体是指 "Y 向右、Z 向前、X 向上"。
这是一个左旋 Z-up 系统的例子,如虚幻 (X-YZ
)
{
"session": {
"set_basis": {
"permutation": "X-YZ"
}
}
}
设备命令
所有设备
探测命令
probe_position
inverse3 ,以及 probe_orientation
的诗句手柄均不包含命令数据。
这些力设备信息查询可确保报告的位置信息在下一条信息中是最新的。
如果您想观察变化,而又不想发送命令施加力或执行其他可能影响模拟的操作,这将非常有用。
这对于观察变化非常有用。
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"probe_position": {}
}
}
],
"verse_grip": [
{
"device_id": "049D",
"commands": {
"probe_orientation": {}
}
}
],
"wireless_verse_grip": [
{
"device_id": "049D",
"commands": {
"probe_orientation": {}
}
}
]
}
逆
为了向 inverse3
设备,客户端必须为给定的设备 ID 发送命令信息。下面是一个例子:
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
此外,还可以在一条信息中向多个设备发送命令:
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
},
{
"device_id": "049E",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
设置光标位置
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_position": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
设置光标力
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
设置角度位置
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
设置角扭矩
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_angular_torque": {
"values": {
"a0": 1.0,
"a1": 2.0,
"a2": 3.0
}
}
}
}
]
}
扩展诗句手柄
设置握把伸展数据
"(《世界人权宣言》) set_extension_data
命令是 Verse 手柄扩展协议的一部分,用于执行板扩展通信协议的手柄版本。
使用。
支持的数据长度:
- 上游最多 20 字节。
- 向下游输出多达 12 个字节(请参阅状态更新报文)。
数据规格:
- 数组长度:20 字节。
- 数值范围:每个值的范围为 0 至 255。
{
"wireless_verse_grip": [
{
"device_id": "049D",
"commands": {
"set_extension_data": {
"extension_data": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
}
}
]
}