
● parcoursdéc. 2023 — juin 2024
Casque de réalité virtuelle infrarouge
- rôle
- Ingénieur logiciel et chef de projet (CDD)
- entreprise
- Data Science Experts, pour Lynred
- lieu
- Grenoble
- outils
- Python
- OpenCV
- Flask
- Docker
- Jetson Nano
- React Native
- ViroReact
Le contexte
Le laboratoire d'application de Lynred cherche de nouveaux usages, parfois ludiques, de l'infrarouge : faire découvrir la technologie au plus grand nombre et montrer à quel point ses capteurs s'intègrent facilement. Data Science Experts a collaboré avec Lynred sur ce projet à travers l'un de ses ingénieurs : moi, de décembre 2023 à juin 2024.
L'objectif : un casque de réalité virtuelle qui montre le monde en thermique, en temps réel. La contrainte principale est la latence : le moindre décalage entre le mouvement de la tête et l'image provoque nausées et vertiges. L'expérience devait être aussi fluide qu'avec un casque VR du commerce.
L'architecture
Trois pièces : la caméra ATI320 de Lynred (320 × 240 pixels, 7 g sans sa coque, sans obturateur, donc capable de filmer en continu), une carte NVIDIA Jetson Nano pour le calcul, et un smartphone Android placé dans le casque pour l'affichage.

Dès qu'on l'alimente, la Jetson ouvre une connexion USB tethering avec le téléphone : la carte n'a ni Wi-Fi ni Bluetooth, et ce lien local isolé change d'adresse IP à chaque connexion. Un conteneur Docker démarre alors un serveur Flask multithreadé : l'application récupère les images par requêtes GET et envoie ses réglages par POST. Une première piste, l'Android Debug Bridge (ADB), a été abandonnée : elle ne tenait pas le temps réel.
Le traitement d'image
Les images arrivent en continu par le SDK de Lynred et sont traitées avec OpenCV. La correction s'appuyait d'abord sur une chaîne maison ; pour gagner en vitesse, elle repose désormais sur la correction shutterless intégrée à la caméra. Une palette de couleurs est ensuite appliquée (en niveaux de gris par défaut, modifiable depuis l'application).

Avec une seule caméra, pas de vraie vision en relief : j'ai mis au point une fausse stéréoscopie. L'image est dupliquée, chaque copie est recadrée de 40 pixels d'un côté opposé, puis les deux vues sont mises côte à côte, ce qui suffit à donner une impression de profondeur dans le casque.
En option, une détection d'humains encadre les personnes dans l'image : un modèle MobileNetV2 entraîné sur des piétons en infrarouge, exécuté par le module DetectNet de jetson-inference, optimisé pour la carte. Pour garder la fluidité, la détection tourne une image sur cinq, et les boîtes sont réutilisées entre deux.
L'application mobile
L'application est écrite en React Native. Après un premier prototype en 2D, elle a été repensée en 3D avec ViroReact : une fois le téléphone dans le casque, l'écran tactile est inaccessible, alors tout se pilote avec la tête, grâce au gyroscope et à un réticule qui survole et sélectionne les éléments.

Elle retrouve seule la Jetson en scannant le réseau local, accueille l'utilisateur dans un espace 3D avec des vidéos d'applications industrielles de l'infrarouge, affiche le flux en stéréo, et propose des réglages appliqués en direct sur la carte : écart entre les deux images, palette de couleurs, détection d'humains, calibration de la caméra.
Un second écran pour les salons
Pour les démonstrations, une page HTML servie par Flask affiche le flux infrarouge sur un grand écran branché à la Jetson, en même temps que le casque, ou seule si aucun téléphone n'est connecté. Un script détecte l'écran au démarrage puis vérifie régulièrement sa présence.

Le casque, avec trois étudiants
En parallèle, j'ai été chef de projet de trois étudiants de l'ENSE3 (Grenoble INP), Louis-Stéphane Assi, Jocelyn Ribes et Louis Métay-Peault, chargés de la conception mécanique. Le cahier des charges : résister à une chute, protéger la caméra, tenir environ quatre heures sur une batterie interchangeable, et s'adapter à chaque visage.

Partis d'un casque open source adapté sous SolidWorks, ils ont dessiné une coque ventilée pour la caméra, fixée par des équerres, et un support pour la batterie et la carte.


Les composants pesant 702 g, quand un casque complet du commerce en pèse environ 600, des essais portés ont départagé trois emplacements pour le bloc batterie et carte (447 g) : dessus, côté ou arrière. Le dessus l'a emporté, pour la répartition du poids et des câbles.



Les pièces ont été imprimées en ABS et en HIPS sur des imprimantes Zortrax. L'impression a été la grande difficulté du projet : manque de précision, décollement du plateau, pièces cassées et réimprimées jusqu'à trois fois, puis limées et percées à la main.

Côté autonomie, un script Python relevait la puissance et la température de la carte en direct : la batterie de 10 000 mAh a tenu 3 h 47, à puissance constante, à 55 °C en moyenne et 60 °C au plus, sous les 80 °C de fléchissement des matériaux.


Le résultat
Un logiciel fonctionnel, qui affiche l'infrarouge dans le casque en temps réel avec une latence minimale, et un premier prototype mécanique complet. Le rapport technique remis en juin 2024 trace la suite : remplacer le téléphone par un écran dédié, passer à une vraie stéréoscopie avec deux caméras, ajouter des mini-jeux qui jouent avec la vision thermique, rendre le casque totalement autonome et mener des tests utilisateurs.