Aller au contenu principal

Transformations de montage et d'espace de travail

Deux transformations positionnent l'appareil dans l'espace de l'application. Comprendre la chaîne de traitement vous aide à choisir la bonne.

Chaîne de traitement des coordonnées​

ÉtapeRôleComment la définirPersistante ?
BaseRéaffecte les axes (par exemple, Z vers le haut → Y vers le haut)session.configure.basis — voir le tutoriel 08 (configuration à distance HTTP)Oui
Transformation de montageDécalage physique de montage de l'appareil (position du bras, rotation, échelle)configure.mount ou configure.preset — voir le tutoriel 08 (configuration à distance HTTP)Oui
Transformation de l'espace de travailDérive de navigation de la caméra ou de la scènecommands.set_transform — voir le tutoriel 09 (diffusion en continu WebSocket à chaque cycle)Oui (persistante)

Transformation de montage​

Le montage décrit où se trouve physiquement l'appareil — son décalage de bras, son orientation et son échelle. Il est défini une seule fois (ou lorsque l'utilisateur modifie la configuration physique) et rarement mis à jour à l'exécution.

Préréglages (configurations d'usine)​

Plutôt que de calculer le montage vous-même, choisissez un préréglage nommé :

PréréglagePlacement de l'origineOrientation du bras
defaultsBase de l'appareilVers l'avant (avant du bras)
arm_frontBase de l'appareilVers l'avant
arm_front_centeredCentre de l'espace de travailVers l'avant
led_frontBase de l'appareilCôté DEL vers l'avant
led_front_centeredCentre de l'espace de travailCôté DEL vers l'avant
customManuel — définir le montage soi-même—

Un préréglage définit le montage, la base et l'origine de l'espace de travail en une seule fois.

Définir le montage directement​

{
"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 }
}
}
}
}]
}
mount et preset sont mutuellement exclusifs

Envoyer les deux dans le même message est ambigu : le service le rejette. Choisissez-en un : un preset nommé (qui définit le montage pour vous) ou une transformation mount explicite.

Asymétrie entre commande et instantané

Lorsque vous envoyez un montage, encapsulez la transformation : { "mount": { "transform": { … } } }. Lorsque vous lisez un montage depuis l'instantané, il est aplati : { "mount": { "position": …, "rotation": …, "scale": … } }. C'est voulu : les commandes utilisent l'enveloppe unifiée command_data ; les instantanés sérialisent directement core::transform.

Transformation de l'espace de travail​

La transformation de l'espace de travail est une dérive d'exécution appliquée par-dessus le montage. Son cas d'utilisation typique est la navigation dans la scène (panoramique, rotation ou zoom sur la vue de l'application) pendant que l'appareil reste physiquement en place.

Le montage et la transformation de l'espace de travail sont tous deux persistants : le service mémorise la dernière valeur que vous avez envoyée. La différence tient à l'usage et à la performance :

  • Le montage est conçu pour être défini une fois et rester en place ; il décrit la configuration physique et est optimisé pour des mises à jour peu fréquentes.
  • La transformation de l'espace de travail est conçue pour être diffusée à haute fréquence (par exemple, à chaque image pendant la navigation de la caméra) ; la chaîne de traitement interne est optimisée pour ce rythme de mise à jour.
{
"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 }
}
}
}
}]
}
La mise à l'échelle modifie la force générée, souvent dans le sens souhaité

La mise à l'échelle du montage ou de l'espace de travail modifie la force que l'appareil restitue, car elle influe sur la profondeur de pénétration utilisée pour calculer la force de contact. Par exemple, une échelle de 2x réduit à peu près de moitié la profondeur de pénétration (la scène virtuelle est deux fois plus grande par rapport à la course de l'appareil), de sorte que la force obtenue est environ moitié moindre que celle ressentie à 1x. À l'inverse, une échelle de 0.5x double à peu près la force.

C'est généralement le comportement souhaité : faire un zoom arrière dans une scène haptique produit naturellement des contacts plus faibles (vous êtes « plus loin »), et un zoom avant les rend plus forts. Si ce n'est pas ce que vous voulez (par exemple, si vous avez besoin que la rigidité reste constante lorsque l'utilisateur zoome), compensez en mettant à l'échelle vos gains de force de façon inverse.

Utiliser le module Navigation pour la dérive automatisée

Si vous avez besoin d'un déplacement continu (navigation en bulle, dérive à commande en vitesse), utilisez le module Navigation au lieu d'envoyer manuellement set_transform à chaque tick : il gère pour vous la physique, le retour haptique et la délimitation de l'espace de travail.