Montage et conversion d'espaces de travail
Deux transformations permettent de déterminer la position d'un appareil dans l'espace de l'application. La compréhension du pipeline aide à choisir la bonne transformation.
Pipeline de coordonnées
| étape | Rôle | Comment configurer | Stockage permanent ou non |
|---|---|---|---|
| Système de coordonnées de référence | Remappage des axes (par exemple : Z vers le haut → Y vers le haut) | session.configure.basis — Tutoriel n° 08 (Configuration à distance via HTTP) | Oui |
| Conversion des montures | Décalage physique de montage de l'appareil (position du bras, rotation, échelle) | configure.mount ou bien configure.preset — Tutoriel n° 08 (Configuration à distance via HTTP) | Oui |
| Conversion d'espaces de travail | Dérive liée à la caméra / à la navigation dans les scènes | commands.set_transform — Tutoriel n° 09 (Diffusion en continu par tick via WebSocket) | Oui (conservation de la valeur) |
Conversion des montures
Le « mount » désigne l'emplacement physique où se trouve le périphérique. Il inclut donc le décalage du bras, l'orientation et l'échelle. Une fois défini (ou lorsque l'utilisateur modifie la configuration physique de l'installation), il n'est pratiquement jamais mis à jour pendant l'exécution.
Préréglages (configuration d'usine)
Au lieu de calculer vous-même le montage, sélectionnez un préréglage nommé :
| Préréglages | Positionnement au point d'origine | Direction du cancer |
|---|---|---|
defaults | Socle de l'appareil | Face avant (face avant du bras) |
arm_front | Socle de l'appareil | avant |
arm_front_centered | Axé sur l'espace de travail | avant |
led_front | Socle de l'appareil | LED latérale avant |
led_front_centered | Axé sur l'espace de travail | LED latérale avant |
custom | Mode manuel — Configuration manuelle du montage | — |
Les préréglages permettent de définir simultanément la monture, le système de coordonnées de référence et l'origine de l'espace de travail.
Configuration manuelle du montage
- WebSocket
- HTTP
{
"inverse3": [{
"device_id": "049D",
"configure": {
"mount": {
"transform": {
"position": { "x": 0.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/config/mount?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":0,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
mountWa presetsont mutuellement exclusivesSi vous envoyez les deux éléments dans un même message, cela peut prêter à confusion ; le service refuse donc cette opération.
Veuillez choisir l'un des deux : le nom spécifié preset(configuration automatique du montage) ou explicite
mount Conversion.
le support envoyer Les dates doivent être mises entre guillemets : { "mount": { "transform": { … } } }.
Monter à partir d'un instantané À lire Il s'agit d'une structure plate non recouverte : { "mount": { "position": …, "rotation": …, "scale": … } }.
Il s'agit d'une conception délibérée. La commande est intégrée à command_data Utiliser un wrapper, et les instantanés sont core::transformcar il le sérialise directement.
Conversion d'espaces de travail
La transformation de l'espace de travail est une dérive d'exécutionappliquée au montage. Un cas d'utilisation courant est la navigation dans une scène. Il s'agit de faire un panoramique, de faire pivoter ou de zoomer/dézoomer la vue de l'application tout en laissant l'appareil physiquement immobile.
La conversion des montages et des espaces de travail est définitive. Le service mémorise la dernière valeur envoyée. La différence réside dans l'utilisation et les performances :
- Un montageest conçu pour être configuré une seule fois et rester inchangé. Ilreprésente la configuration physique de l'installation et est optimisé pour ne faire l'objet que de rares mises à jour.
- La conversion de l'espace de travailest conçue pour être diffusée en continu à une fréquence élevée (par exemple, à chaque image lors de la navigation avec la caméra). Le pipeline interne est optimisé pour s'adapter à ce cycle de mise à jour.
- 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}}}'
GETrenvoie la conversion actuelle, et DELETEréinitialise la transformation d'identité.
Lorsque vous modifiez l'échelle d'un support ou d'un espace de travail, la force de rendu de l'appareil change. En effet, cette modification influe sur la **profondeur de pénétration** utilisée pour le calcul des forces de contact. Par exemple, 2x La mise à l'échelle réduit approximativement de moitié la profondeur de pénétration (car la scène virtuelle devient deux fois plus grande par rapport à la plage de déplacement de l'appareil). Par conséquent, la force résultante est 1xUne idée de la puissance que l'on ressent là-bas la moitiéC'est ainsi. À l'inverse, 0.5x L'effet d'échelle permet de doubler approximativement la force.
C'est généralement le comportement souhaité. Lorsque l'on réduit l'échelled'une scène haptique, le contact s'affaiblit naturellement (l'objet est alors « plus éloigné ») ; à l'inverse, lorsqu'on l'agrandit, le contact devient plus intense. Si ce n'est pas le comportement souhaité (par exemple, si la rigidité doit rester constante pendant que l'utilisateur zoome ou dézoome), corrigez-le en ajustant le gain de force dans le sens inverse.
Si un déplacement continu (navigation par bulles, dérive avec contrôle de vitesse) est nécessaire, à chaque tick set_transformau lieu de le diffuser manuellement Module de navigationVeuillez l'utiliser. Ce module se charge des calculs physiques, du retour haptique et du traitement des limites de l'espace de travail.