Commandes de contrôle
Il s'agit de commandes par cycle et non persistantes, transmises sous le dictionnaire commands de chaque appareil. Elles sont appliquées une seule fois, puis oubliées — si vous cessez de les envoyer, l'appareil revient à l'état de repos.
Toutes les commandes de contrôle sont réservées à WebSocket (aucun équivalent HTTP), sauf indication contraire.
set_cursor_force
Applique une force cartésienne au curseur (effecteur terminal).
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_cursor_force": {
"vector": { "x": 0.0, "y": 0.0, "z": 1.5 }
}
}
}]
}
| Champ | Type | Description |
|---|---|---|
vector | vec3 | Force en newtons, dans l'espace d'application |
Les forces sont additives au sein d'un même cycle — plusieurs sources (votre application, SDF HFX, navigation) s'additionnent avant d'être envoyées à l'appareil.
set_cursor_position
Commande au curseur de se rendre à une position cible (contrôle en mode position).
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_cursor_position": {
"position": { "x": 0.0, "y": -0.12, "z": 0.15 }
}
}
}]
}
| Champ | Type | Description |
|---|---|---|
position | vec3 | Position cible en mètres, dans l'espace d'application |
Le service calcule la force nécessaire pour déplacer le curseur vers la cible. Si la trajectoire sécuritaire (safe-trajectory) est activée, la vitesse du curseur est limitée.
set_angular_torques
Applique des couples aux trois articulations (contrôle en mode force angulaire).
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_angular_torques": {
"torques": { "a0": 0.0, "a1": 0.0, "a2": 0.0 }
}
}
}]
}
| Champ | Type | Description |
|---|---|---|
torques | angles3 | Couples articulaires |
set_angular_position
Commande aux articulations d'atteindre des angles cibles (contrôle en mode position angulaire).
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_angular_position": {
"angles": { "a0": 30.0, "a1": 45.0, "a2": 60.0 }
}
}
}]
}
| Champ | Type | Description |
|---|---|---|
angles | angles3 | Angles articulaires cibles, en degrés |
set_transform
Définit la transformation de l'espace de travail (espace de l'appareil → espace de l'application). Contrairement aux autres
commandes, set_transform est persistante — le service mémorise la dernière
valeur envoyée. Transmettez-la en continu pendant les déplacements de caméra, ou envoyez-la une seule fois et laissez-la telle quelle.
- WebSocket
- HTTP
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_transform": {
"transform": {
"position": { "x": 1.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/state/transform?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":1,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
Pour les poignées, seul rotation a un effet. position et scale sont acceptés par souci de cohérence
du schéma avec Inverse3, mais n'ont aucun effet sur la poignée.
Si vous avez besoin d'un déplacement continu, utilisez le module Navigation
plutôt que de transmettre set_transform manuellement en continu — il gère pour vous la physique, la rétroaction haptique,
et la délimitation de l'espace de travail.
probe_position / probe_orientation
Messages de maintien de connexion (keepalive) destinés uniquement à la surveillance, pour les sessions qui n'envoient pas de commandes de contrôle (par exemple, Haply Hub qui observe des appareils).
{
"inverse3": [{ "device_id": "049D", "commands": { "probe_position": {} } }]
}
{
"verse_grip": [{ "device_id": "DEF456", "commands": { "probe_orientation": {} } }]
}
Si votre session envoie déjà toute commande de contrôle (set_cursor_force,
set_cursor_position, etc.), l'état de l'appareil est actualisé automatiquement à chaque
réponse. Les sondes ne sont utiles que pour les sessions de surveillance en lecture seule.