시뮬레이션 채널
일반
기본 시뮬레이션 채널 웹소켓 URL은 다음과 같습니다. ws://localhost:10001
. 참고: 포트는 구성에서 변경할 수 있습니다.
디바이스 상태를 수신할 수 있는 고주파 양방향 통신 채널입니다. 세션 관련 또는 디바이스 관련 명령을 관련 또는 디바이스 관련 명령을 받을 것으로 예상합니다. 시스템은 수신된 각 메시지에 대해 1:1로 상태 응답 메시지를 보냅니다. 메시지를 1:1로 전송합니다( 상태 업데이트 참조).
이 페이지에서는 일반적인 명령어에 대해 설명합니다. 자체 명령어로 시스템을 등록하고 확장하는 다양한 모듈과 기능이 있습니다. 모듈 섹션에 별도로 문서화되어 있습니다;
초기 메시지
웹소켓이 연결되면 서비스에서 전체 장치 목록이 포함된 메시지를 보냅니다. 초기 메시지에는 다음이 포함됩니다. 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
}
}
]
}
상태 업데이트 메시지
서비스는 수신된 각 메시지에 대해 모든 디바이스의 상태가 포함된 상태 업데이트 메시지를 한 번씩 전송합니다.
기계의 상태를 알고 싶다면 힘 값(값이 0이더라도)과 같은 메시지를 미리 보내야 합니다.
이는 위치 추적이나 힘을 가하지 않는 등의 입력 장치로 사용하는 경우 특히 중요합니다.
상태 업데이트 메시지에는 다음이 포함됩니다. 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업 시스템의 예시입니다(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
]
}
}
}
]
}