Aller au contenu principal

Transformations de montage et d'espace de travail

Deux transformations permettent de positionner 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éfinir ?Persistante ?
BaseRéaffecte les axes (par exemple, Z vers le haut → Y vers le haut)session.configure.basis — voir le tutoriel 08 (configuration à distance via HTTP)Oui
Transformation de montageDécalage physique lié au montage de l'appareil (position du bras, rotation, échelle)configure.mount ou configure.preset — voir le tutoriel 08 (configuration à distance via 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 via WebSocket à chaque cycle)Oui (persistante)

Transformation de montage​

La configuration décrit l'emplacement physique de l'appareil: son décalage de bras, son orientation et son échelle. Elle n'est définie qu'une seule fois (ou lorsque l'utilisateur modifie la configuration physique) et est rarement mise à jour lors de l'exécution.

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

Au lieu de calculer vous-même le montage, choisissez un préréglage intitulé :

PréréglageEmplacement de l'origineOrientation du bras
defaultsSocle de l'appareilVers l'avant (avant du bras)
arm_frontSocle de l'appareilEn avant
arm_front_centeredCentre de l'espace de travailEn avant
led_frontSocle de l'appareilCôté LED vers l'avant
led_front_centeredCentre de l'espace de travailCôté LED vers l'avant
customManuel — configurer soi-même le montage—

Un préréglage permet de définir simultanément le montage, la base et l'origine de l'espace de travail.

Définir directement le montage​

{
"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 prête à confusion : le service le rejette. Choisissez-en un : un preset nommé (qui définit le montage à votre place) ou une transformation mount explicitement.

Asymétrie entre la commande et l'instantané

Lorsque vous envoyez Dans un montage, mettez en image cette transformation : { "mount": { "transform": { … } } }. Lorsque vous lisez un montage à partir de l'instantané, celui-ci 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 au-dessus du montage. Son cas d'utilisation typique est la navigation dans la scène (panoramique, rotation ou zoom sur la vue de l'application) tandis que l'appareil reste physiquement en place.

La configuration et la modification de l'espace de travail sont toutes deux persistantes: le service mémorise la dernière valeur que vous avez envoyée. La différence réside dans l'utilisation et les performances :

  • Le montage est conçu pour être défini une seule fois et rester inchangé ; 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 générée à haute fréquence (par exemple, à chaque image lors du déplacement 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 restituée par l'appareil, 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 de près de moitié la profondeur de pénétration (la scène virtuelle est deux fois plus grande que la course de l'appareil), de sorte que la force obtenue est d'environ moitié inférieure 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é : effectuer un zoom arrière dans une scène haptique entraîne naturellement une diminution de l'intensité des contacts (vous êtes « plus loin »), tandis qu'un zoom avant les rend plus intenses. Si ce n'est pas ce que vous souhaitez (par exemple, si vous avez besoin que la rigidité reste constante lorsque l'utilisateur effectue un zoom), compensez en ajustant vos gains de force de manière 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 fonction de la 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.