Intelligence embarque IMA5 2022/2023 G2

De Wiki d'activités IMA
Révision datée du 28 novembre 2022 à 16:52 par Fderliqu (discussion | contributions) (NanoEdgeAIStudio)

Choix du projet

Nous avons décidé, d'utiliser dans la détection de problème dans le calibrage d'une machine

Contexte

De nos jours, la fabrication des engins de transports dans de nombreux domaines (e.g l'aéronautique, ferroviaire) sont réalisées par des machines. Et le calibrage de ces machines doit être précis pour fixer les éléments. Cependant, lorsque les moteurs commencent à être usés, le calibrage de ce dernier peut être imprécis. Une fluctuation de calibrage peut générer une longue erreur de production (ceci est grave pour l'entreprise de production en chaîne), il est alors nécéssaire de détecter ces erreurs de calibrage pour adopter une solution.

Idée

Le capteur sera monté sur un bras. On veut détecter la présence de trous sur des pièces afin d'y fixer des rivets. Ainsi, on peut mesurer la taille et profondeur des trous. Il y aura d'autres forme de détection : pronfondeur des trous, nombre de trous, etc

STMCubeIDE

Premier programme : Blink

Pour se familiariser avec STMCubeIDE, on essaye de faire fonctioner la carte Nucleo-F401RE, la LED utilisateur LD2 est situé sur le pin PA5 (GPIOA, GPIO_PIN_5) Pour se faire :

  • On crée un nouveau projet STM
  • On vérifie la configuration des GPIO et Clock
  • On clique sur Device Generation Tool Code Generation
  • On ouvre main.c et on ajoute ce code dans la boucle loop:
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1);
  HAL_Delay(1000);
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0);
  HAL_Delay(1000);
  • On build et on run le debug

Pour plus de détail, suivre sur ce lien

Premier pas avec le capteur NUCLEO-53L5A1

On récupère le projet sur ce fichier : Fichier:Ai4industry-master.zip

On ouvre ce projet sur l'IDE, puis on configure un utilitaire port série (par exemple minicom) :

  • Baud rate : 460800
  • 8N-1
  • Par défaut l'écoute sur /dev/ttyACM0

Le programme initial du projet nous affiche les valeurs sur un tableau 4*4, nous pouvons modifier cette variable pour avoir toute les valeurs dans un tableau 8*8 : Profile.RangingProfile = RS_PROFILE_8x8_CONTINUOUS;

Maintenant on essaye de récupèrer les valeurs vers un fichier csv, on modifie la fonction print_result pour afficher les valeurs séparées d'une virgule :

  static void print_result(RANGING_SENSOR_Result_t *Result)
  {
    int8_t j, k, l;
    uint8_t zones_per_line;
  
    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||
           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;
  
    for (j = 0; j < Result->NumberOfZones; j += zones_per_line)
    {
      for (l = 0; l < RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)
      {
        /* Print distance and status */
        for (k = (zones_per_line - 1); k >= 0; k--)
        {
   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){
   	       	   printf(",");
   	 }
          if (Result->ZoneResult[j+k].NumberOfTargets > 0)
            printf("%ld",(long)Result->ZoneResult[j+k].Distance[l]);
          else
            printf("0");
        }
      }
    }
    printf("\r\n");
  }

Puis on récupère les donénes dans un fichier csv : cat /dev/ttyACM0 >> data.csv

On récupère toutes nos datasets dans le répertoire /dataset

Liste des problèmes et résolutions

  • Impossible de télécharger le firmware de la carte
    • Résolution : Configurer le proxy (mettre en manuel et non native et configurer HTTP et HTTPS et tout cocher)


  • Erreur lors du débug : Could not determine GDB version using command: arm-none-eabi-gdb --version
    • Résolution : Lancer sur un terminal : sudo apt-get install libncurses5:amd64 source

NanoEdgeAIStudio

On upload nos datasets et on fait un benchmark :

maquette

Nous avons un résultat de 96%.

Maquette

On réalise 4 pièces en bois pour simuler une pièce à fixer avec différents trous :

Pièces en bois pour maquette

Nous avons fait aussi bricoler quelque chose pour simuler si la pièce est correctement percer :

bricolage

Puis on réalise notre maquette, on fixe le capteur de distance sur un support vertical, on place les pièces sur un autre support à même hauteur du capteur pour simuler le fait que la pièce arrive devant le bras fixeur (ou le capteur de distance)


maquette
maquette