Partager via


Space Pins

Problèmes à résoudre

Erreur d’échelle

Bien que l’approche traditionnelle des ancres spatiales pour l’alignement des hologrammes sur des caractéristiques réelles fonctionne bien à petite échelle, elle se heurte à des difficultés quand l’échelle augmente et dépasse un mètre environ.

Une erreur d’échelle dans l’espace de suivi de la tête signifie que même si une ancre spatiale aligne parfaitement l’extrémité d’un objet virtuel d’une dimension de quelques mètres sur une caractéristique du monde réel, il est probable que l’autre extrémité de cet objet soit mal alignée par rapport à la caractéristique du monde réel correspondante. Cet alignement incorrect est dû au fait que la distance parcourue jusqu’à l’espace de suivi de la tête diffère généralement de la distance parcourue dans l’espace physique avec une limite d’erreur de +-10 %. L’erreur réelle est souvent moins importante (cela dépend de nombreuses caractéristiques de l’environnement et de l’appareil), mais elle est généralement significative et peut croître sans limites à mesure que l’échelle du projet augmente.

En d’autres termes, si un utilisateur équipé d’un dispositif HoloLens parcourt 10 m dans le monde réel, la distance parcourue dans l’espace virtuel indiquée par le dispositif de suivi de la tête est comprise entre 9 et 11 m. Si l’utilisateur parcourt 50 m, l’erreur s’élève à +-5 m. Plus l’utilisateur parcourt une longue distance, plus l’erreur augmente.

Par conséquent, pour un faisceau de 10 m (dans l’espace de modélisation) avec un point d’extrémité parfaitement aligné sur l’extrémité zéro d’un mètre ruban dans l’espace réel, l’autre extrémité est mesurée sur le mètre ruban à une valeur comprise entre 9 et 11 m.

Pour les mêmes raisons, les objets multiples et chaque projet à verrouillage universel avec des ancres spatiales présentent des distances différentes dans l’espace virtuel par rapport à l’espace réel.

Système de coordonnées arbitraire

Un autre problème se pose. Le système de coordonnées Unity dans HoloLens est indéterminé. Il se base uniquement sur la position de la tête au début de l’application.

Pour de nombreuses tâches, cela ne pose aucun problème. Si l’objectif est de projeter un rayon (raycasting) dans le mappage spatial de la pièce et de placer un hologramme à la position du pointage, les valeurs numériques de la position du pointage ne sont pas pertinentes.

De même, pour faire apparaître des éléments de l’expérience utilisateur autour de l’utilisateur, ce ne sont pas les coordonnées absolues qui importent pour placer un élément de l’expérience utilisateur, mais uniquement les coordonnées relatives à l’utilisateur.

Toutefois, les scénarios plus complexes peuvent être compliqués par le système de coordonnées imprévisible. Le chargement d’un grand nombre d’objets, par exemple le bureau d’un utilisateur ou l’intégralité d’une salle de travail, dans un espace virtuel avec une relation fixe à l’espace physique, nécessite une transformation de compensation pour aligner les objets de l’espace de modélisation au système de coordonnées basé sur la tête.

Cette compensation s’effectue souvent en joignant l’ensemble des objets à une transformation Unity unique, puis en ajustant cette transformation unique pour positionner et orienter les objets virtuels en les alignant sur l’environnement réel.

De la même manière, une transformation unique dans la hiérarchie de la caméra peut être utilisée pour réaligner la caméra. Ainsi, quand l’utilisateur voit un point de référence du monde réel, un objet virtuel présentant les coordonnées de modélisation souhaitées apparaît en superposition sur cette caractéristique.

La solution

La fonctionnalité des repères spatiaux Space Pins traite ces deux problèmes simultanément. Pour cela, elle tire parti de la nature du verrouillage universel de l’espace global des World Locking Tools et du caractère arbitraire de cet espace.

Alignement de l’espace Unity avec le monde réel

Les outils World Locking Tools de base fournissent un système de coordonnées à verrouillage universel stable. Un objet virtuel placé dans l’espace à verrouillage universel inscrit avec une caractéristique réelle reste inscrit avec cette caractéristique du monde réel au fil du temps.

Mais il existe un nombre infini d’espaces qui répondent à cet objectif. En fait, si l’on considère un espace universel verrouillé, le transformer via une position et une rotation arbitraires produit un autre espace universel verrouillé aussi valide.

La fonctionnalité Space Pins applique une autre contrainte qui supprime la nature indéterminée de la transformation à verrouillage universel.

Cette contrainte implique qu’à proximité d’un repère spatial Space Pin, la pose de ce Space Pin dans l’espace universel verrouillé est identique à la pose du Space Pin dans l’espace de modélisation.

Prenons l’exemple d’un cube dans une scène Unity, modélisé à des coordonnées globales de (0, 0, 1). Quand la scène est chargée dans HoloLens, le cube apparaît comme étant placé un mètre devant la position initiale de la tête. En fonction de la position initiale de la tête, il peut se trouver n’importe où dans la pièce physique.

Le repère spatial Space Pin permet de verrouiller ce cube sur une caractéristique réelle dans la pièce, par exemple au niveau du coin d’un bureau spécifique. Contrairement au verrouillage du cube à l’aide d’une ancre spatiale, le Space Pin déplace l’intégralité de l’espace Unity, de telle manière que le cube est aligné avec le coin du bureau. Ainsi par exemple, d’autres éléments du bureau modélisés par rapport au cube dans Unity sont placés correctement sur le bureau réel.

Résolution de l’erreur d’échelle

Bien qu’un Space Pin unique élimine le problème de la relation indéterminée entre la coordonnée virtuelle et le monde réel, il ne résout pas le problème d’échelle.

Autrement dit, bien que le Space Pin ait pu déplacer l’origine de l’objet à une position et une orientation alignées sur le monde physique, quand l’utilisateur parcourt 10 m dans le monde réel, il est possible qu’il continue à se déplacer uniquement sur 9 m dans l’espace virtuel.

Les Space Pins multiples fournissent une solution complète à ce problème. Si l’utilisateur se trouve à proximité d’un Space Pin spécifique, le monde s’aligne en fonction de ce Space Pin. Les autres Space Pins sont alors mal alignés, mais comme ces repères sont plus éloignés, cette inexactitude se révèle généralement acceptable, voire souvent imperceptible.

À mesure que l’utilisateur passe d’un Space Pin à l’autre, une interpolation continue minimise l’erreur d’échelle à un point donné dans l’espace. Avec une densité appropriée des Space Pins comme points de référence, l’alignement incorrect des caractéristiques réelles et virtuelles est réduit à l’ordre du niveau d’erreur du dispositif de suivi de la tête.

Alors que la densité requise des Space Pins dépend à la fois de la qualité du suivi prise en charge par l’environnement et des exigences de précision de l’application, certains chiffres peuvent vous aider à définir les attentes. Dans un environnement professionnel de bureau, avec un éclairage et des caractéristiques visibles appropriés pour le suivi, un espacement de 10 m entre les Space Pins réduit les erreurs accumulées de 10-20 cm sur 10 m à quelques millimètres (erreur max totale 0,5 cm, 0,0 cm au niveau des extrémités).

Persistance

La fonctionnalité Space Pin fonctionne conjointement avec le reste de la persistance des outils World Locking Tools. Il existe à la fois des appels manuels pour appeler l’enregistrement et le chargement à partir d’un script, et des indicateurs pour l’enregistrement et le chargement automatisés par session.

Quand elles sont activées, les fonctionnalités d’enregistrement automatique/de chargement automatique (AutoSave/AutoLoad) du gestionnaire des outils World Locking Tools permettent de restaurer l’alignement spatial complet du monde virtuel sur le monde réel lors des sessions suivantes.

En pratique, la persistance signifie qu’une session ou un petit nombre de sessions préliminaires peuvent être utilisées pour établir une analyse adéquate de l’environnement physique et l’alignement de cet environnement physique avec l’espace de coordonnées de modélisation d’Unity. Les sessions suivantes chargent ensuite l’environnement virtuel correctement aligné sur le monde réel sans qu’une intervention supplémentaire de l’utilisateur soit nécessaire.

Interpolation et extrapolation

L’interpolation et l’extrapolation sont deux techniques permettant d’estimer les valeurs de données quand aucune mesure directe n’a été effectuée. Comme décrit précédemment, les repères spatiaux sont des emplacements où des mesures ont été effectuées. Les coordonnées virtuelles sont les coordonnées souhaitées, et les coordonnées physiques sont des coordonnées mesurées où nous souhaitons que les coordonnées virtuelles apparaissent.

Le système effectue une interpolation, mais pas une extrapolation, comme expliqué ci-dessous. En général, l’interpolation est plus sûre et plus stable que l’extrapolation. L’interpolation linéaire par morceaux fournie répond à la plupart des besoins des applications. L’extrapolation est moins sûre et son implémentation idéale requiert généralement des connaissances au niveau de l’application. Par conséquent, l’application doit gérer l’extrapolation comme décrit ci-dessous.

Si l’application n’ajoute pas de repères d’extrapolation, en dehors des limites des repères, l’espace est épinglé exclusivement par la valeur à la délimitation la plus proche. S’il existe uniquement deux repères, A et B, quand l’utilisateur se déplace de A vers B, l’épinglage combine l’alignement spécifié par A et celui spécifié par B (interpolation). Toutefois, quand l’utilisateur atteint le point B, l’épinglage se verrouille exactement à l’alignement spécifié par B (extension constante).

Interpolation

Dans la région 2D entre les repères, la localisation spatiale est interpolée de manière linéaire. Si les repères d’espace sont placés avec précision et que l’erreur de suivi est répartie uniformément dans la zone, la correction appliquée entre les repères d’espace est parfaitement correcte.

Il convient de souligner que l’hypothèse d’une distribution d’erreurs égale n’est pas entièrement correcte. Toutefois, en tant qu’approximation, le modèle linéaire fournit d’excellents résultats de correction.

Extrapolation

Le système ne fournit aucun service d’extrapolation intégré, utilisant une extension de valeur constante en dehors de la forme convexe des repères spatiaux. Cette approximation revient à supposer, de manière incorrecte, qu’il n’y a pas d’erreur d’échelle en dehors des repères spatiaux fournis par l’application.

Toutefois, si l’application a connaissance de la distribution des erreurs ou si elle se satisfait d’une estimation, elle peut créer toute extrapolation souhaitée en ajoutant des repères spatiaux en périphérie.

Exemple d’extrapolation

Imaginez une scène avec quatre repères spatiaux, placés dans un carré dont les côtés mesurent 4 m.

À présent, supposons que l’espace réel dans lequel l’utilisateur se déplace mesure 12 x 12 m, avec les marqueurs physiques correspondant aux quatre repères autour du centre de l’espace.

Si l’application se satisfait d’une approximation d’erreur constante, elle dispose de toutes les informations dont elle a besoin pour ajouter quatre repères spatiaux (ou plus) pour assurer la couverture de l’ensemble de l’espace 12 x 12 m.

Nous allons étiqueter les repères au niveau des angles du carré 4 x 4 selon les points cardinaux : NE, NW, SW et SE. Nous allons également étiqueter les positions virtuelles à chaque point cardinal virtuel (virtualNE, etc.), ainsi que les positions physiques à chaque point cardinal physique (physicalNE, etc.).

Quatre broches d’espace

Une stratégie consiste à ajouter des points cardinaux externes en créant un carré de 12 x 12 m autour du carré interne, en ajoutant quatre points cardinaux extérieurs supplémentaires : outerNE, outerNW, outerSW et outerSE. Les positions virtuelles et physiques de ces quatre points sont simples à calculer. Prenons par exemple outerNE :

virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);

Huit broches d’espace

La création d’un espace d’extrapolation de 20 x 20 m modifie uniquement l’échelle du delta appliqué :

scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;

Avec une longueur externe de 20 m et une longueur interne de 4 m, l’échelle est 2.

Une autre stratégie consiste à ajouter huit points supplémentaires en plus des angles, comme indiqué ci-dessous. Le calcul des nouveaux emplacements à partir des repères existants est identique à la procédure décrite ci-dessus. Ajouter des repères supplémentaires améliore généralement la stabilité, notez toutefois que cela n’améliore pas nécessairement la précision.

Douze broches d’espace

Alignement d’un sous-ensemble de la scène

La discussion se rapporte jusqu’à présent à AlignmentManager global, détenu et géré par WorldLockingManager.GetInstance(). Comme décrit précédemment, il s’agit d’épingler l’intégralité de l’espace de coordonnées Unity global aux fonctionnalités physiques à des points de référence stratégiques.

Toutefois, il existe des cas où vous appliquez le même concept à un sous-ensemble de la scène.

Par exemple, imaginez un scénario dans lequel les annotations de deux automobiles doivent être chargées. Le positionnement exact des deux automobiles physiques ne peut pas être connu à l’avance, car il peut varier en fonction de la disposition des différentes concessions. Toutefois, une fois que l’un des véhicules physiques a été déployé, les positions de tous les composants relatifs à ce déploiement sont connues.

Dans ce scénario, les Space Pins peuvent être utilisées pour épingler le châssis virtuel et les annotations de chacun des véhicules indépendamment. La représentation virtuelle entière de chaque véhicule peut être configurée dans Unity, puis mappée sur le véhicule physique au moment de l’exécution. Cet alignement peut être manuel à l’aide de MRTK UX ou automatisé à l’aide de codes QR ou de toute autre stratégie. Quelle que soit la façon dont les données de la correspondance entre les points de référence virtuelles et physiques sont déterminées, une fois qu’elles sont transmises à WLT via l’API Space Pins, WLT conserve les objets physiques et virtuels alignés de manière sensiblement optimisée.

En cas d’alignement de l’espace de coordonnées global, l’alignement se produit en manipulant le nœud d’ajustement (il s’agit généralement du parent du parent de la caméra). Ce nœud doit être considéré comme étant réservé à WLT. Toute autre falsification de cette transformation entraîne un comportement non défini.

De même, lors de l’alignement d’une sous-arborescence, l’alignement doit posséder une transformation, à la racine (ou sous-racine) de la sous-arborescence à aligner. Toute falsification externe de cette transformation entraîne un comportement non défini.

Avant l’épinglage des espaces indépendants, ceux-ci se déplacent à mesure que l’espace global est épinglé. Toutefois, une fois qu’un espace indépendant est épinglé, il est considéré comme épinglé au monde physique. Par conséquent, les modifications ultérieures de l’épinglage de l’espace global dans le monde physique ne l’affectent pas.

Voir aussi

Voir aussi