Zum Hauptinhalt springen
Version: 3.4.x

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).

Module

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_centerwird 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:

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
]
}
}
}
]
}