Simulation Kanal
Allgemein
Die Standard-URL für den Simulationskanal ist ws://localhost:10001
. Hinweis: Der Anschluss kann in der Konfiguration geändert werden.
Dabei handelt es sich um einen bidirektionalen Hochfrequenz-Kommunikationskanal, über den Sie den Zustand der Geräte empfangen können. Wir erwarten den Empfang von sitzungs bezogene oder gerätebezogene Befehle. Das System sendet eine Antwortnachricht 1:1 für jede empfangene Nachricht (siehe Statusaktualisierung).
Diese Seite dokumentiert die allgemeinen Befehle. Wir haben verschiedene Module und Funktionen, die das System mit ihren eigenen Befehlen registrieren und erweitern. Diese sind separat im Abschnitt Module dokumentiert;
Initiale Nachricht
Der Dienst sendet eine Nachricht mit der vollständigen Geräteliste, wenn eine Verbindung zu einem Websocket hergestellt wird. Die erste Nachricht hat den folgenden Inhalt JSON
Format:
{
"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
}
}
]
}
Status Update Nachricht
Der Dienst sendet für jede empfangene Nachricht eine Statusaktualisierungsmeldung, die den Status aller Geräte enthält.
Wenn Sie den Zustand der Maschine wissen wollen, müssen Sie ihr vorher eine Nachricht schicken, z. B. einen Kraftwert (auch wenn die Werte Nullen sind).
Dies ist besonders wichtig, wenn unsere Geräte als Eingabegerät verwendet werden, z. B. um die Position zu verfolgen und keine Kraft anzuwenden.
Die Zustandsaktualisierungsnachricht hat folgenden Inhalt JSON
Format:
{
"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-Befehle
Sitzungsbefehle sind Aktionen, die sich auf Ihre aktuelle Simulation/Verbindung/Sitzung beziehen. Sie stellen Aktionen dar, die nicht gerätespezifisch sind. spezifisch sind.
Renderstatus erzwingen
Anfordern einer Momentaufnahme des Status aller Geräte und Konfigurationen.
{
"session": {
"force_render_full_state": {}
}
}
Koordinatenursprung festlegen
Legen Sie den Koordinatenursprung für alle Geräte fest. Der Koordinatenursprung kann entweder auf device_base
oder workspace_center
. Der Standardwert ist
device_base
.
Wenn Sie den Koordinatenursprung auf
workspace_center
wird die Position (0, 0, 0) in die Mitte des Gerätearbeitsbereichs verschoben.
{
"session": {
"set_coordinate_origin": {
"coordinate_origin": "workspace_center"
}
}
}
Basis setzen
Geben Sie die Zuordnung von unserem Koordinatensystem zu Ihrem an. Dieses Mapping wird für die gesamte Sitzung beibehalten.
Wie bereits erwähnt, verwendet Haply ein rechtshändiges Koordinatensystem mit Z-Up. Dieser Befehl ermöglicht es, die aktuelle Sitzung mit einem alternativen Koordinatensystem einzustellen, was dazu führt, dass alle Zustände, die von diesem System zurückgegeben werden, in diesem System dargestellt werden. Er ändert auch das angenommene Koordinatensystem für alle Werte, die als Teil anderer Befehle angegeben werden. Zum Beispiel: Cursorposition setzen.
Das Koordinatensystem ist relativ zu unserem angewiesen und kann Zeichen enthalten (+
oder -
) vor der gültigen X
, Y
, oder Z
Buchstaben. Dies sind Beispiele für gültige Werte, z. B. : XYZ
, ZYX
, +Y-Z+X
, X-ZY
, usw.
Das bedeutet, dass ein als "YZX" definiertes System konkret bedeutet: "Y ist rechts, Z ist vorwärts und X ist oben".
Dies ist ein Beispiel für ein linkshändiges Z-up-System wie Unreal (X-YZ
)
{
"session": {
"set_basis": {
"permutation": "X-YZ"
}
}
}
Gerätebefehle
Alle Geräte
Sondierungsbefehle
probe_position
für die inverse3, und probe_orientation
für Verse Griffe enthalten alle keine Befehlsdaten.
Diese Force-Geräte fragen Informationen ab, um sicherzustellen, dass die gemeldeten Positionsdaten bei der nächsten Meldung auf dem neuesten Stand sind.
Dies ist nützlich, wenn Sie Änderungen beobachten möchten, ohne einen Befehl zu senden, der eine Kraft ausübt oder andere Aktionen ausführt, die die Simulation beeinflussen könnten.
die Simulation beeinflussen könnten.
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"probe_position": {}
}
}
],
"verse_grip": [
{
"device_id": "049D",
"commands": {
"probe_orientation": {}
}
}
],
"wireless_verse_grip": [
{
"device_id": "049D",
"commands": {
"probe_orientation": {}
}
}
]
}
Umgekehrt
Zum Senden von Befehlen an eine inverse3
Gerät, muss der Client eine Befehlsnachricht für eine bestimmte Gerätekennung senden. Hier ist ein Beispiel:
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
Es ist auch möglich, Befehle an mehrere Geräte in einer einzigen Nachricht zu senden. Hier ein Beispiel:
{
"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
}
}
}
}
]
}
Cursorposition einstellen
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_position": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
Cursorkraft einstellen
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
Winkellage einstellen
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}
Winkelmoment einstellen
{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_angular_torque": {
"values": {
"a0": 1.0,
"a1": 2.0,
"a2": 3.0
}
}
}
}
]
}
Erweiterter Vers-Griff
Daten zur Griffverlängerung einstellen
Die set_extension_data
Befehl ist Teil des erweiterten Protokolls für Verse-Griffe, das mit Griffversionen verwendet wird, die
die das Kommunikationsprotokoll der Board-Erweiterung implementieren.
Unterstützte Datenlängen:
- Bis zu 20 Bytes Upstream.
- Gibt bis zu 12 Bytes nachgelagert aus (siehe State Update Message).
Daten-Spezifikationen:
- Array-Länge: 20 Bytes.
- Wertebereich: Jeder Wert reicht von 0 bis 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
]
}
}
}
]
}