FR 2889759 A1 20070216 FR 0552474 A 20050809 Système permettant d'afficher un cockpit virtuel modélisé intégré dans un environnement vidéo La présente invention concerne un système permettant d'afficher un cockpit virtuel modélisé intégré dans un environnement vidéo, caractérisé en ce qu'il comprend: - des moyens de capture de signaux vidéo, notamment une pluralité de caméra vidéo synchronisées et calibrées, destinés à produire un film vidéo panoramique sur 180 degrés, - un équipement informatique comprenant: - une carte d'acquisition vidéo destinée à recevoir et à numériser les signaux vidéo, - une carte graphique destinée à générer des images du cockpit virtuel, des moyens de traitement informatique permettant d'associer en temps réel les images du cockpit virtuel aux signaux vidéo numérisés, - des moyens d'affichage pour afficher sur des moyens de visualisation les images du cockpit virtuel associées aux signaux vidéo numérisés. L'inventeur a développé un produit, ci-après dénommé D'FUSION, qui permet d'afficher un cockpit virtuel (modélisé à l'aide d'un logiciel CAO) dans un environnement vidéo. Le monde extérieur au cockpit de synthèse (vu par exemple à travers le pare-brise et les vitres des portes latérales) provient de sources vidéo soit en direct soit stockées sur le disque dur de la machine. Ces sources vidéo sont traitées en temps réel pour correspondre à la position du conducteur. D'FUSION peut afficher une image qui simule exactement la vue du conducteur dans le cockpit. Si le conducteur est équipé d'un système de capture de mouvement, alors celui-ci peut déplacer sa tête dans toute la zone de fonctionnement du capteur (déplacement sur 6 degrés de liberté). D'FUSION peut afficher une vue en stéréoscopie (stéréoscopie active ou passive) du cockpit virtuel immergé dans un extérieur réel (capturé par de caméras vidéo). Points techniques clés La présente invention permet de réaliser un cockpit de synthèse entouré par un film vidéo allant jusqu'à 360 degrés. En général on fabrique un film vidéo "panoramique" sur 180 degrés en utilisant 3 caméras industrielles synchronisées et calibrées. Par exemple, en final, le film a une résolution de 2300 pixels par 576 lignes. Le logiciel D'FUSION peut afficher, en salle immersive, la scène suivante: Cockpit de synthèse. Le film vidéo sur 180 degrés entourant le cockpit de synthèse. Fonctionnalités de D'FUSION utilisées: - Génération d'image à 96 Hz en stéréo active (oeil gauche / oeil droit à 48 Hz pour le relief). - Cluster de PC (3 machines en réseau, synchronisées) pour attaquer les 3 projecteurs du système de projection. - Instrumentation du "conducteur" par système standard de capture de mouvement (par exemple polhemus), pour gérér les déplacement du conducteur dans l'habitacle. - Calibration des images: garantir la restitution à l'échelle 1 du cockpit et des éléments du film vidéo. - Le film vidéo est traité en temps réel comme un objet 3D, donc il est "déformé" en temps réel pour tenir compte des mouvements de la tête du conducteur. - L'affichage du modèle CAO du cockpit est lui aussi impacté par les mouvements de tête du conducteur. - Rejeu fluide du film à 180 degrés. - Affichage fluide du cockpit. - Synchronisation des cartes graphiques (genlock et swaplock). - Synchronisation des lunettes LCD shutter avec le système de génération d'images. Système de tournage du film à 180 degrés 3 caméras sont rigidement liées (voir schema ci-dessous) Cam 1 Cam 3 Cam 2 Chaque caméra a un champ de vision légèrement supérieur à 60 degrés. Le champ de vision total couvert par les trois caméras atteint alors 180 degrés. Exemple de caractéristique pour les caméras Cameras characteristics: Standard PAL (raffraichissement: 50 Hz) Entrée Genlock (les trois cameras doivent être synchronisées) Champ de vision > 60 degrés Le logiciel D'FUSION sera configuré pour effectuer un "edge blending" des trios videos. Champ de vision total: 180 degrés Video 2 Video 3 Video 1 "Edge blending" "Edge blending" Total FOV: 180 degrees Rendu correct de 3 vidéos panoramiques dans une scène virtuelle Comme on ne dispose pas d'information de profondeur sur les videos, le principe le plus simple est de reprojeter les vidéos à l'infini. La sensation de projection à l'infini est obtenue lorsque les deux yeux voient la même chose dans la même direction de l'espace. Pour simuler cela, on place les vidéos sur un mesh de très grande dimensions. Le mesh est rigidement lié en position (pas en orientation) à l'oeil virtuel de l'observateur. On veut voir du point de vue de l'observateur dans le simulateur, ce qu'il aurait vu s'il avait son oeil à la place du centre optique commun des 3 caméras. On doit pour cela simplement afficher les trois vidéos sur trois surfaces planes rectangulaires de proportions environ 4/3 (à déterminer exactement en fonction de la caméra), avec une petite NLIM pour annuler les distorsions radiales et avec un blending sur les bords pour les joindre. Si on limite les déplacements de l'observateur dans le simulateur, on ne verra jamais plus de deux vidéos dans les écrans des cotés. Pour ce qui est des coordonneés de texture. Il s'agit d'attribuer à chaque vertex la couleur du point vu par la caméra dans la direction du vertex. La logique de reprojection de D'Fusion permet cela. Les caméras devraient être genlockées pendant le tournage du film, sinon, des décalages temporels constants entre écrans seront visibles. Un systeme de capture détermine la position de la tête de l'observateur. Il faut synchroniser les 3 PC pour qu'ils affichent exactement le même point de vue. On échange les positions de tête par ethernet. A priori, le générateur de vidéos les fournit en synchro. Si possible ne pas se trouver dans une situation où il serait necessaire d'extrapoler le mocap. Un PC connecté au système de capture de mouvement sera maître. D'Fusion peut synchroniser les horloge des 2 autres PC sur le maître. Description de la scène de réalité augmentée L'écran hemicylindrique de 3.5 de rayon, 3m de hauteur, 170 de pan. Statique. Il est consitutué de 3 sections pour 3 vidéoprojecteurs. On prend comme origine globale le centre du cylindre. x vers l'avant, y vers la gauche, z vers le haut. C'est le repère Monde. Trois video projecteurs projettent la scene sur 1'ecran. Chaque projecteur affiche à tour de rôle la scene pour l'oeil gauche puis l'oeil droit à 96Hz. Une calibration sert à déterminer la position de l'emetteur de capture de mouvement par rapport au repère Monde. L'observateur: crâne localisé par le récepteur de capture de mouvement rigidement lié à la tête de l'utilisateur. Pour chaque personne, on peut alors déterminer la position de chaque oeil par rapport au repère monde. Des films ont été réalisés à trois hauteurs de tournage. Lors du tournage, il faudra prendre soin qu'au repos, les caméras soient bien horizontales. Que la caméra centrale pointe bien horizontalement vers l'avant du véhicule. Avec un roll de 0. Que les centres optiques de trois caméras soient identiques. Que les 3 caméras ont exactement les mêmes caractéristiques optiques. Lorsqu'on passe d'un film à l'autre dans la salle immersive, l'observateur sera vraiment plus haut ou plus bas. Les trois hauteurs sont lm -- 1,4m, -- 1,8m. Donc, aucune ne correspond vraiment au centre du repère Monde. On appellera ces trois reperes RH1, RH2, RH3 (repere hauteur x) Dans la scène virtuelle, trois écrans plats de projection virtuelle montrent chacun la video prise par une camera. Ils sont orientés exactement comme les caméras réelles. Ils couvrent le même champ de vision. Ils déforment les vidéos (mesh non linéaire) pour annuler leur distorsion. Ils sont très grands et éloignés pour simuler une projection à l'infini. Ils sont tous parentés au repere RHx. Si un observateur était placé au centre du repère RHx et regardait autour de lui les trois écrans plats de projection virtuelle, alors il verrait exactement la même chose que ce qu'aurait vu un observateur placé au centre optique (supposé commun) des trois caméras lors du tournage des films. Pour chaque oeil, trois viewports (viewing frustrum) centrés sur l'oeil et toujours horizontaux pointent automatiquement en direction des centres de leurs sections d'écran respectives. Si possible, les champs de vision horizontal et vertical des viewports sont ajustés dynamiquement pour que leur section d'écran remplisse leur champ de vision. Puisqu'il le système de projection effectue un blending, les sections considérées se chevauchent sur les bords. Préparation du support caméras La première chose à faire est de caractériser les distorsions optiques au zoom arriere maxi (celui qui sera utilisé lors du tournage). On utilise l'outil Disto pour cela. Avec les parametres obtenus, on génére avec l'outil Undisto un mesh 4/3 rectangulaire qui compense ces distorsions. Ce mesh est inséré dans la Scene D'Fusion de référence. avec tous les réglages à O. Comme les caméras produisent de la distorsion radiale, la définition du champ de vision horizontal est ambigüe. On prendra dans tout ce qui suit le champ de vision de la video dédistordue. C'est un bon choix car c'est la champ de vision qu'aurait la caméra si elle était perspective parfaite. La scene D'Fusion (qui sera à la base de la scène finale) va servir à ajuster les écrans de projection virtuelle. Les réglages seront pour l'écran plat de projection virtuelle central: roll, scale, distance. Les réglages seront pour les écrans gauche et droit: pan, tilt, roll. Même scale et distance que l'écran central. Dans le labo, un premier ajustement de l'orientation des caméras est fait pendant la fabrication de leur support. En regardant les bords des champs des caméras dans la scene D'Fusion, maximiser l'angle entre les caméras en gardant quand même un peu de marge pour la jonction dans la scene. Dans la scène, on a deux réglages qui sont liés: les angles de pan entre les écrans plats et les paramètres (distance /scale). Bien qu'un seul des réglages corresponde à la réalité, à chaque pan, on peut trouver un (distance /scale) qui assure une bonne jonction. Alors, comment trouver le pan correct ? Si le réglage de pan ne correspond pas à la réalité, cela se manifestera entre autres par une brisure des droites à la jonction. Quelques essais dans d'fusion montrent qu'il devient difficile de voir l'angle de brisure en dessous de 5 d'erreur de pan. Les lignes horizontales situées au dessus du centre du champ de vision se brisent en V si l'angle de pan est surévalué. En A s'il est sous évalué. Sinon, un moyen de mesurer le pan entre caméras ? On peut éventuellement se servir de la sony evidl00 comme théodolithe pour mesurer l'angle entre deux points au centre du champ des caméras. On branche la sony sur la troisieme entrée video, on la pilote à la télécommande et on affiche à l'écran son angle de pan et son image. Inutile de tenir compte du deplacement du centre optique avec le zoom. Une précision de l'ordre de 0.25 suffit. On utilise le réticule de D'Fusion. La manip consiste dans la scène à régler les paramètres de scale et distance et sur le support à réorienter les caméras gauche et droite en tilt,roll mais pas en pan pour obtenir une jonction parfaite, même sans blending. La scène D'Fusion devra permettre de zoomer pour ajuster précisément les jonctions. Pour info, cela étant fait, on connaît le champ de vision des caméras. Par la suite, une fois tous les réglages correct trouvés, on peut faire un blending entre l'écran virtuel central et les deux autres. Pour avoir un affichage correct du blend, l'écran central est affiché en dernier. L'outil blender (LC) , à partir d'un fichier dfusion.conf qui contient # Valeurs après tournage retrouvées au pocket dial [MPARAM] # screen width (width) mparam(0) 61.918 # screen distance (d) mparam(l) 50 # angle between cameras (alpha left) mparam(2) 59.561726 # Angle de rotation roll left de la camera gauche mparam(3) -0.431373 # Pitch caméra gauche mparam(4) -1.647069 # angle between cameras (alpha right) mparam(5) 59.2066 # Angle de rotation roll _right de la camera gauche mparam(6) 1. 294118 # Pitch caméra droite mparam(7) 1.529412 # Roll caméra centrale mparam(8) 0.117647 # Distance écran gauche mparam(9) 48.588 # Distance écran droit mparam(10) 50.823 et des parametres de disto de la caméra. Genre directement un masque alpha qui ressemble à : Il est a appliquer à la video centrale. Il est légèrement rollé pour compenser le roll de la caméra centrale ainsi que le tilt des caméras latérales. L'outil sera adapté si necessaire, si cela ne suffit pas. Une fois dédistordu par le mesh, les bords du masque deviennent verticaux ce qui donne Les bords sont blancs sur une certaine largeur en fonction de l'angle entre les caméras. Pour réduire cette largeur perdue, il suffit d'augmenter l'angle entre les caméras pendant le tournage. Une petite remarque: La vidéo 4/3 sera en 720/540, donc avec des pixels non carrés au lieu de 768/576. On peut se demander alors si le mesh généré par l'outil Undisto va déformer correctement la vidéo. Le mesh utilise des coordonnées de texure normalisées à 1. Les coordonnées de texture ont été calculées pour un mesh de rapport 4/3 ce qui est le cas et en supposant que l'image est de dimensions 768/576. Comme la première opération que fait la carte graphique est d'associer des coordonnées normalisées à la texture, peut importe la résolution de le vidéo, le résultat sera correct. Pour m'en convaincre, j'ai fait l'essai en redimensionnant l'image en 100/540 et j'ai pu vérifier que c'est encore correct. Tournage Horizontalité des caméras Les caméras sont installées sur le véhicule. Le sol est considéré comme parfaitement plan et horizontal. On place devant les caméras une barre horizontale. On affiche un réticule (croix) dans l'image caméra centrale. On réoriente le bloc complet support de telle sorte que la vue de la caméra centrale ait le réticule aligné et centré sur la barre. Pour le tournage Bien veiller à mettre la mise au point sur l'infini. Passer en mode 100% manuel et faire exactement le même réglage d'exposition sur les 3 caméras... Normalement, si la rigidité mécanique du support est correcte, il ne devrait y avoir aucun réglage à faire dans la scene d'fusion. Comment retrouver le clap de départ commun sur les trois vidéos Avec la barre horizontale, la balader rapidement de bas en haut à faible distance, pour être en vue des 3 caméras. Si on bouge vite, la synch devrait être retrouvée sans ambigüité. Synchronisation des 3 PC Les sorties graphiques sont genlockées par hardware. Pour réduire le lag au strict minimum, le système de capture de mouvement doit être genlocké avec les cartes graphiques. Un seul PC est connecté au mocap. Il envoie aux deux autres PC les données de capture de mouvement sur un port UDP Il envoie également, l'oeil actif pour la trame courante. Cela assure la resynchronisation forcée des pc latéraux. La scène doit être conçue de telle sorte que les 3 PC traitent simultanément les même trames reçues. La séquence dans la boucle update_frames/render de D'Fusion est [Réception UDP (-1)]. Synchro mocap. Reception données par RS232. Passage dans la boucle mocap. Récupération des dernieres données recues. Envoi de trame UDP. [mocap UDP (-1).] [Rendu trame (-1)]. puis Reception UDP. [Synchro mocap. Reception données par RS232. Passage dans la boucle mocap. Récupération des dernieres données recues. Envoi de trame UDP. (+1)] mocap UDP. Rendu trame. Entre [], ce qui concerne le cycle précédent (-1) ou suivant (+1) le cycle qui nous intéresse La stéréoscopie L'impression de relief est produite en portant des lunettes à cristaux liquides. Chaque projecteur affichera tour à tour la vue oeil gauche puis la vue oeil droit. Dans le principe de D'Fusion, il suffit par une règle d'animation de reparenter la caméra sur un oeil puis sur l'autre. Le look vector de la caméra est toujours orienté vers le centre de sa section d'écran, le field of view est adapté à la distance écran (par un mcfile) pour toujours l'englober en totalité. Tourner avec le bon champ de vision Soit alpha, l'angle couvert par chaque projecteur (supposé identique). On peut en déduire l'angle de blending inter écrans: beta = (3*alphafovhtotal)/2. Exemple alpha = 60 ==> beta = 5 . C'est à dire que deux projecteurs se recouvrent sur 5 de l'écran. Soit gamma le champ de vision utile des caméras. Quel champ de vision utile doivent avoir les caméras pour que les contraintes suivantes soient toutes respectées: É L'observateur doit pouvoir se déplacer de 0.25cm vers la gauche ou la droite sans defaut d'image É Chaque PC ne décompresse qu'une seule video Tout d'abord, pour les caméras de gauche et Droite. Le dessin suivant détermine l'angle gamma pour la caméra de Droite. C'est l'angle tel que lorsque le conducteur se décale vers la droite de 25 cm, le bord de la vidéo arrive à la fin de la zone de projection du projo de droite. 3.5m 0.25m Intersection d'une droite et du cylindre. Equation de la droite: y-yO = (x-x0)*tan(gamma+5 ) avec x0 = +marge (0. 25m), y0 = tan(5 )*x0. On est sur le bord du blending: x = Rcos(alpha+5 ), y = Rsin(alpha+5 ). ==> gamma = atan((y-y0)/(x-x0))- 5 Maintenant pour la caméra centrale. Le dessin suivant détermine l'angle gammac pour la caméra centrale. C'est l'angle tel que lorsque le conducteur se décale vers la gauche de 25cm, le bord de la vidéo arrive à la fin de la zone de projection du projo central. 3.5m Intersection d'une droite et du cylindre. Equation de la droite: yc-y0c = (xc-x0c)*tan(delta) avec delta = 90gammac/2 avec x0c = +marge (-0.25m), y0c = -tan(5 )*x0c. On est sur le bord du blending: xc = Rcos(alpha+5 -beta), yc = Rsin(alpha+ 5 -beta). ==> delta = atan((yc-y0c)/(xc-x0c)), gammac = 2*(90-delta) Réglage du point oeil Lorsqu'on passe d'un film à l'autre dans la salle immersive, plusieurs choix se présentent. 1) Le véhicule virtuel est placé toujours posé sur le sol de la salle, avec le point oeil toujours en y=0, x=0 correspondant à la maquette réelle installée, z= hauteur réelle du point oeil pour le véhicule chargé. L'observateur aura alors besoin de regler le siege vraiment plus haut ou plus bas pour un alignement correct avec le point oeil. 2) La position du point oeil est reglable. 3) Soit on considerera sur un top, la position actuelle de l'observateur comme étant au point oeil du véhicule. Le point oeil peut aussi être symbolisé par un objet 3D. Validation de l'utilisation de films stockés sur disque dur La solution proposée consiste à lire directement les films sur Disques Dur. Il faut être capable de lire simultannément 3 AVI à 48Hz à ce format et à les afficher à 96Hz en 1280x1024 dans des video textures 16 bits avec transparence sur une des trois. Le débit suffisant est atteint avec la technologie des disques Raid. Répartition des vidéos sur les disques Les vidéos disponibles sont: Nom du fichier Description gauche.avi vue vers la gauche centre.avi vue vers le centre droite.avi vue vers la droite mix.avi vidéo en 720x576 qui contient sur la gauche: la gauche de droite.avi sur la droite: la droite de gauche.avi IHM de Chargement des MHV Il est possible de charger plusieurs MHV au lancement du logiciel. Enuite, en temps réel, il sera possible de sélectionner au clavier chaque MHV. Lecture des films La lecture des films est non linéaire, avec des moyens d'avance, de recul, pause, avance rapide 2x, 4x, 8x, 16x, 32x. Le PC central envoie le numéro de l'image courante aux deux PC latéraux. Envoie les commandes de changement de film, de changement de hauteur caméras. Interface Home-Machine La solution est capable de sélectionner un point oeil "film". Cela se fera par de simples règles d'animation. On pourra passer d'une altitude à l'autre et comparer. Le PC central déclenchera les chargements sur les PC latéraux. - Chargement de plusieurs MHV puis sélection au clavier. - placement de la MHV relativement au point-oeil "film" à l'aide d'un OFFSET en X,Y,Z Pour chaque nouveau véhicule, on doit avoir la possibilité de faire des réglages de positionnement. Poste de conduite Paramétrage du film: On souhaite pouvoir paramétrer la position du film de la scène qui sera projetée par rapport à la position physique du poste de conduite dans la salle du simulateur. Si on veut artificiellement remonter le véhicule, cela peut être fait avec l'offset en X,Y,Z Le film est reprojeté à l'infini. Il est attaché au point oeil de référence (position de la caméra lors du tournage). La MHV est positionnée par rapport au ZO du repère architecte (cette donnée fait partie du fichier) La façon dont le conducteur (point-oeil) se place dans la maquette est également paramétrable: position absolue (point-oeil constant) ; recalage du conducteur. position OFFSET (prise en compte en temps réel de la position de l'observateur). Revendication 1. Système permettant d'afficher un cockpit virtuel modélisé intégré dans un environnement vidéo, caractérisé en ce qu'il comprend: -des moyens de capture de signaux vidéo, notamment une pluralité de caméra vidéo synchronisées et calibrées, destinés à produire un film vidéo panoramique sur 180 degrés, - un équipement informatique comprenant: - une carte d'acquisition vidéo destinée à recevoir et à numériser les signaux vidéo, - une carte graphique destinée à générer des images du cockpit virtuel, des moyens de traitement informatique permettant d'associer en temps réel les images du cockpit virtuel aux signaux vidéo numérisés, -des moyens d'affichage pour afficher sur des moyens de visualisation les images du cockpit virtuel associées aux signaux vidéo numérisés.