Skip to main content
Version : 3.4.x

Canal de simulation

Général

L'URL par défaut du canal de simulation est ws://localhost:10001. Note : le port peut être modifié dans la configuration.

Il s'agit d'un canal de communication bidirectionnel à haute fréquence où l'on peut s'attendre à recevoir les états des dispositifs. Nous nous attendons à recevoir des commandes liées à la session ou à l 'appareil. ou des commandes relatives à l'appareil. Le système enverra un message de réponse d'état 1:1 pour chaque message reçu (voir mise à jour de l'état). message reçu (voir mise à jour de l'état).

Modules

Cette page présente les commandes générales. Nous avons différents modules et fonctionnalités qui enregistrent et étendent le système avec leurs propres commandes. Ils sont documentés séparément dans la section des modules;

Message initial

Le service envoie un message contenant la liste complète des appareils lorsqu'un websocket est connecté. Le message initial contient les éléments suivants 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
}
}
]
}

Message de mise à jour de l'état

Le service enverra un message de mise à jour de l'état contenant l'état de tous les dispositifs pour chaque message reçu.

Si vous souhaitez connaître l'état de la machine, vous devez lui envoyer un message au préalable, tel qu'une valeur de force (même si les valeurs sont des zéros). Ceci est particulièrement important si l'on utilise nos appareils comme dispositif d'entrée, par exemple en suivant la position et en n'appliquant pas de force. Le message de mise à jour de l'état a les caractéristiques suivantes 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
}
}
]
}

Commandes de session

Les commandes de session sont des actions liées à votre simulation/connexion/session en cours. Elles constituent des actions qui ne sont pas de l'appareil.

Forcer l'état de rendu

Demander un instantané de l'état de tous les appareils et de toutes les configurations.

{
"session": {
"force_render_full_state": {}
}
}

Définir l'origine des coordonnées

Définir l'origine des coordonnées pour tous les appareils. L'origine des coordonnées peut être réglée sur device_base ou workspace_center. La valeur par défaut est device_base.

Si vous réglez l'origine des coordonnées sur workspace_centerla position (0, 0, 0) sera déplacée au centre de l'espace de travail de l'appareil.

{
"session": {
"set_coordinate_origin": {
"coordinate_origin": "workspace_center"
}
}
}

Base fixe

Instruire la correspondance entre notre système de coordonnées et le vôtre. Cette cartographie est conservée pendant toute la durée de la session.

Comme mentionné précédemment, Haply utilise un système de coordonnées droitier avec Z-Up. Cette commande permet de définir la session en cours avec un autre système de coordonnées. ce qui aura pour conséquence que tous les états renvoyés par le système seront représentés dans ce système. Elle modifie également le système de coordonnées système de coordonnées présumé pour toutes les valeurs données dans le cadre d'autres commandes. Définir la position du curseur, par exemple.

Le système de coordonnées est instruit par rapport au nôtre et peut contenir des signes (+ ou -) avant l'entrée en vigueur de la X, You Z lettres. Il s'agit d'exemples de valeurs valables, par exemple : XYZ, ZYX, +Y-Z+X, X-ZYetc. Cela signifie qu'un système défini comme "YZX" signifie spécifiquement "Y est à droite, Z est en avant et X est en haut".

Il s'agit d'un exemple de système Z-up gaucher comme celui d'Unreal (X-YZ)

{
"session": {
"set_basis": {
"permutation": "X-YZ"
}
}
}

Commandes des appareils

Tous les appareils

Commandes de sondage

probe_position pour le site inverse3, et probe_orientation pour les pinces à couplets ne contient aucune donnée de commande. Ces forces interrogent les dispositifs d'information pour s'assurer que les informations de position rapportées sont à jour dans le message suivant. Cette fonction est utile si vous souhaitez observer des changements sans envoyer de commande qui appliquerait une force ou effectuerait d'autres actions susceptibles d'affecter la simulation. affecter la simulation.

{
"inverse3": [
{
"device_id": "049D",
"commands": {
"probe_position": {}
}
}
],
"verse_grip": [
{
"device_id": "049D",
"commands": {
"probe_orientation": {}
}
}
],
"wireless_verse_grip": [
{
"device_id": "049D",
"commands": {
"probe_orientation": {}
}
}
]
}

Inverse

Pour envoyer des commandes à un inverse3 le client doit envoyer un message de commande pour un identifiant de périphérique donné. Voici un exemple :

{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}

Il est également possible d'envoyer des commandes à plusieurs appareils dans un seul message. en voici un exemple :

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

Définir la position du curseur

{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_position": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}

Définir la force du curseur

{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}

Définir la position angulaire

{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"values": {
"x": 1.0,
"y": 2.0,
"z": 3.0
}
}
}
}
]
}

Réglage du couple angulaire

{
"inverse3": [
{
"device_id": "049D",
"commands": {
"set_angular_torque": {
"values": {
"a0": 1.0,
"a1": 2.0,
"a2": 3.0
}
}
}
}
]
}

Poignée Verse prolongée

Données sur l'extension de la poignée

Les set_extension_data fait partie du protocole étendu pour les poignées Verse, utilisé avec les versions de poignées qui implémentent le protocole de communication de la carte. qui implémentent le protocole de communication de l'extension de la carte.

Longueurs de données prises en charge :

Spécifications des données :

  • Longueur du tableau : 20 octets.
  • Plage de valeurs : Chaque valeur est comprise entre 0 et 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
]
}
}
}
]
}