Projet PlasticBrain

 Présentation de PlasticBrain

PlasticBrain est un dispositif d’affichage sur un modèle 3D réaliste de cerveau.

Il permet d’afficher une activité fonctionnelle (IRMf, EEG, MEG, NIR, PET…) ou toute autre information (connectivité, atlas anatomique), dans des buts de visualisation, de pédagogie ou de therapie (en l’utilisant pour du biofeeback).

 

Il est construit à partir de l’impression 3D d’un cerveau segmenté issu d’une IRM, d’un ensemble de LEDs RGB et d’un Arduino UNO pour piloter l’affichage.

Les LEDs sont montées soit à l’intérieur des hémisphères, soit sur une plaque et la lumière conduite dans le modèle par l’intermédiaire de fibres optiques.

Il est distribué librement (logiciels sous license GNU GPLv3, design materiel CERN Open Hardware).

J’ai créé une micro-entreprise pour assurer les développements matériels et logiciels nécessaires et commercialiser le dispositif. L’intégration du dispositif avec des systèmes d’acquisition existants (recherche neurosciences, clinique, ou systèmes DiY) pourra être réalisé à la demande. Contact : manik <point> bhattacharjee <arobase> free.fr

Impression 3D

De l’IRM à l’impression 3D:

  • acquisition d’une IRM 3D T1 avec une résolution d’environ 1 mm isotrope.
  • Segmentation et maillage des hémisphères avec BrainVisa
  • Décimation et lissage partiel soit manuellement avec Blender, soit avec les outils de BrainVisa
  • Optionnel : génération d’un maillage avec des tunnels aux emplacement d’électrodes implantées chez un patient (électrodes de SEEG ou pour DBS) avec le logiciel IntrAnat.
  • Exporter les maillages en .obj avec Anatomist (installé avec BrainVisa)
  • Optionnel : Séparation des hémisphères en deux morceaux à assembler après l’insertion des LEDs : Choisir un plan de coupe dans Blender, utiliser un modifier Boolean pour couper le maillage de l’hémisphère par le plan, recommencer pour obtenir l’autre côté.
  • Exporter les maillages au format STL
  • Selon l’imprimante 3D, charger dans le logiciel approprié le fichier STL
  • Choisir une impression sans remplissage (pour pouvoir mettre les LEDs) et avec supports pour les problèmes de parties en suspension.
  • Nos essais:
    • Avec une imprimante FDM Ultimaker2 et du PLA transparent de colorfabb : plusieurs échecs d’impression avec des décalages inexpliqués au cours des 11h d’impression, mais une impression complète.
    • Avec une imprimante FDM Zortrax M200 et du filament Z-glass : test en cours au Fablab de la casemate de Grenoble
    • Avec une imprimante SLA Formlabs et une résine translucide : test prévu

Montage

LEDs

Utilisation de bandes de LEDs RGB adressables individuellement WS2812B. Theoriquement les plus denses possibles (144 LEDs par mètre) pour augmenter la résolution spatiale, mais pour le prototype la diffusion de la lumière est tellement large que des bandes moins denses ont été utilisées. Selon la taille de l’impression il en faut entre deux et trois par hémisphère. Pour le prototype une seul bande a été suffisante mais en ne couvrant pas la totalité de la surface.

Attention les LEDs peuvent chauffer fortement, danger de surchauffe !

  • Collage des LEDS sous la surface des hémisphères
    • Plaquer la bande de LEDs à l’intérieur de l’hémisphère en l’enroulant pour qu’elle couvre la surface en évitant de la plier ou de la tordre pour ne pas endommager les connexions entre les LEDs.
    • Utiliser un pistolet à colle et de la colle translucide pour coller la bande de LEDs à la surface interne de l’hémisphère. Cette étape serait plus simple si le modèle de cortex était lissé avant l’impression.
    • Utiliser les trois câbles pour alimenter et piloter les LEDs : relier à une alimentation de 5V suffisamment puissante les cables rouge et noir (attention à la polarité), et brancher le cable vert à un PIN de sortie de l’arduino.
    • Souder entre les cables d’alimentation + et – un condensateur pour lisser les pics de courant dûs à l’allumage et à l’extinction des LEDs car sinon cela perturbe le pilotage des couleurs par l’arduino. Il est également nécessaire de relier la terre de l’arduino/USB avec la terre de l’alimentation sous peine d’emdommager les LEDs et l’Arduino.
  • Matrice de LEDs et fibres optiques
    • Connexion d’une matrice de LEDs à l’Arduino
    • Impression 3D d’un support pour fixer les fibres optiques au-dessus des LEDs
    • Si possible utiliser une optique de collimation pour ne pas perdre trop de lumière (essais en cours)
    • Assembler les fibres pour reproduire la forme d’une électrode de SEEG avec une extrémité de fibre à l’emplacement de chaque contact.
    • Placer les pseudo-électrodes dans les tunnels prévus à cet effet lors de l’impression 3D.
    • Construire un petit boitier à la découpeuse laser pour loger l’électronique

Logiciels:

  • Dépôts de code (voir plus bas pour les détails) : Intranat avec support partiel pour plasticBrain, HUG hackathon 2018, Brainhack Geneva 2019 hackathon
  • locateLEDS : localiser les LEDs dans le modèle : en cours de développement
  • Intégration avec Brainvisa et IntrAnat pour l’affichage d’atlas et de données fonctionnelles
  • Code Arduino : code de setup (allume les leds une par une), sapin de Noël (couleurs decoratives), réception de données pour l’affichage (par la connexion USB de l’Arduino) disponible dans les dépôts de code

En projet

  • Couplage avec OpenBCI pour afficher les activités enregistrées avec le système EEG d’OpenBCI – cela fonctionne peut-être déjà en utilisant LSL pour envoyer les données d’OpenBCI au code du hackathon 2019
  • Couplage avec OpenVibe : Affichage des données issues de fichiers lus ou de données acquises en temps réel (cf
  • Couplage avec BrainTV (Affichage de l’activité gamma enregistrée par des électrodes implantées en temps réel)
  • Couplage avec Bitalino  pour afficher les battements cardiaques ou la respiration.
  • Couplage avec un lecteur de musique pour afficher des couleurs variant en rythme avec la musique.

Historique

En 2014/2015 Pierre Deman a acquis un Arduino pour générer un signal de synchronisation entre des systèmes d’enregistrement de signaux SEEG cliniques et un logiciel de stimulation à Grenoble.

Ayant ce composant à disposition nous avons réalisé que l’arrivée de l’impression 3D et de l’électronique accessibles au grand public nous permettaient de réaliser une de mes vieilles idées : afficher sur une reproduction réaliste du cerveau son activité, en temps réel ou non, ou encore afficher des régions anatomiques données.

En 2016 nous avions imprimé en 3D un premier hémisphère avec une bande de LEDs contrôlée depuis un ordinateur. Nous avons modifié IntrAnat pour qu’il puisse contrôler les LEDs via l’Arduino, mais l’implémentation n’était pas achevée.

En 2018, travaillant désormais à Genève, nous avons proposé le projet au 2018 HUG Hackathon (Hopitaux Universitaires de Genève) et avons été rejoints par Michel Tran Ngoc et Vincent Rochas. Nous avons utilisé un casque EEG envoyant les données en temps réel sur un réseau avec LabStreamingLayer vers IntrAnat sur un autre ordinateur. Nous recevions les données, filtrées en temps réelles. Pour localiser les électrodes EEG par rapport au cerveau nous avons utilisé une application de scan 3D sous Android capable de générer un maillage texturé de la tête à partir de photos. Nous voulions recaler ce maillage avec le scalp extrait de l’IRM et détecter automatiquement les électrodes dans la texture, puis utiliser le logiciel Cartool pour calculer le problème inverse permettant de reconstruire l’activité des sources corticales à partir des signaux EEG. Nous voulions ensuite afficher cette activité en temps réel sur le maillage de cortex dans IntrAnat, puis localiser les LEDs par rapport au sources du cortex et ainsi projeter l’activite des sources sur la localisation des LEDs pour contrôler la couleur des LEDs. A cause du temps limité (36h) nous n’avons pas pu achever le prototype même si beaucoup d’éléments fonctionnaient. La présentation finale et le code source sur Github sont en ligne.

En 2019 j’ai participé au hackathon 2019 Geneva Brainhack avec PlasticBrain. De nouveau participants m’ont rejoint pour 36h : Victor Ferat, Jelena Brankovic, Gaetan Davout, Elif Naz Gecer, Jorge Morales and Italo Fernandes. Cette fois-ci nous avons choisi des objectifs moins ambitieux: utilisation d’un modéle de cerveau moyen et de la position moyenne des électrodes d’un casque EEG (pas de mesure de la position réelle des électrodes), résolution du problème inverse avec Cartool pour projeter l’activité des électrodes vers les sources corticales. Nous avons construit un second hémisphère pour avoir un cerveau complet et nous avons allumé une par une les 191 LEDs, cliquant dans cartool sur la source visuellement la plus proche de sa localisation. Un script a ensuite produit une matrice de passage des sources vers les LEDs et l’arduino appliquait une carte de couleur à la valeur calculée. Le signal était filtré et la puissance dans la bande alpha était calculée: c’est en effet le changement le plus simple à démontrer en EEG car fermer les yeux augmente l’activité alpha tandis que les ouvrir la diminue. Nous disposions d’un casque EEG pratique car à électrodes sèches actives, mais avec peu d’électrodes. Nous sommes arrivés à un prototype fonctionnel à la fin du hackathon (cf la vidéo en haut de cette page). Le code est disponible sur github.

A propos

Manik Bhattacharjee – LinkedIn

Pierre Deman

Participants au hackathon 2018 des HUG : Manik Bhattacharjee, Pierre Deman, Michel Tran Ngoc, Vincent Rochas

Participants au hackathon Brainhack Geneva 2019: Manik Bhattacharjee, Victor Ferat, Jelena Brankovic, Gaetan Davout, Elif Naz Gecer, Jorge Morales, Italo Fernandes