Différences entre versions de « Projet 4A - Repérage par camera »

De Polybot Grenoble
Sauter à la navigation Sauter à la recherche
Ligne 79 : Ligne 79 :
 
===Détection des tags===
 
===Détection des tags===
 
===Traitement des données===
 
===Traitement des données===
 +
====Calibrage====
 +
====Changement de  base====
 +
 
===Le réseau===
 
===Le réseau===
 
===Support mécanique===
 
===Support mécanique===

Version du 27 avril 2020 à 16:00

Le but du projet

EN CONSTRUCTION

[INTRO]

ARUCO est une librairie OpenSource qui permet la détection des marqueurs rectangulaires dans une image. Le projet est développé à l'Université de Cordoba en Espagne. Il s’agit des librairies des marqueurs (tags) et des algorithmes qui permettent leur détection et suivant une procédure d'étalonnage l’estimation précise de la position des tags et de la caméra qui les détecte.

Suivant le règlement de la coupe de robotique de France, tous les robots verront attribuer un marqueur, qui est placé au sommet du support de balises.

Position du support de balises.png

Ces marqueurs permettent à un système de vision présent sur le mât central d’identifier et de localiser chaque robot.

Terrain de jeu.png

Le but est de créer ce système de vision pour identifier le positionnement de chaque robot, et un réseau pour envoyer ces coordonnées. Cette information peut être utilisée pour mieux synchroniser les deux robots à notre disposition, leur permettant de mieux collaborer, et pour éviter des collisions avec des robots adversaires.

Le système peut aussi être utilisé pour identifier des éléments de jeu et changer les actions des robots. Par exemple, cette année, le terrain de jeu dispose une girouette qui s’arrête de tourner après le début du match pour indiquer dans quel sens souffle le vent. La direction du vent (nord ou sud), indique l’emplacement d'arrêt des robots à la fin du match ainsi que le positionnement des certains éléments du jeu. La girouette est disposée d’un tag ARUCO.

Girouette .png

Notre plan est de placer une caméra sur un de nos robots, capter l’angle d'arrêt de la girouette et transmettre l’information à l'autre robot afin d'exécuter les correctes actions. Le fait d’avoir cette information a notre disposition va nous permettre de gagner de points.

Participants

Prénom & Nom Filière
Errikos Messara IESE-4
Pedro Lopes IESE-4

Tuteur: Sylvain Toru

Cahier des charges

Architecture du système

Schéma .png

Travail réalisé

Le choix du matériel

Le système utilisé le langage Python et la librairie OpenCV et il est principalement composé d’un ordinateur Raspberry Pi et d’une caméra.

Nous avons choisi le Raspberry car ça petite taille et faible consommation d’énergie le rendre idéal pour les applications embarquées. Nous avons utilisé la version la plus performante, le Raspberry Pi 4 4GB. Le Raspberry est équipé d’un processeur ARM quadricoeur de Broadcom, d’un module WiFi dont nous utilisons pour la communication, et d’une interface CSI utilisée pour connecter une caméra.

La caméra du dispositif de repérage centrale, comme elle est positionnée à 1m du terrain et le terrain fait 3m de longueur et 2m de largeur, doit avoir un champ de vue assez large. Plus précisément, nous avons calculé le champ de vue nécessaire pour capter tout le terrain:

Côté Angle minimale
Largeur (2m) 113°
Longueur (3m) 63°

D’après ce calcul nous avons choisi une caméra avec un champ de vue de 160°. Cela nous donne un peu de marge pour pouvoir capter les marqueurs qui sont placés sur les robots. De plus le capteur de la caméra ne produit pas des images en plein champ de vue en mode vidéo, donc nous avons besoin de marge complémentaire pour pouvoir visualiser tout le terrain. Malheureusement, cet objectif grand angle, produit une image aux fortes distorsions, dont nous devons prendre un compte plus tard. Une autre caractéristique perturbante des objectifs grand angle de est le fait que les coins des images peuvent apparaître floues même si la mise au point est bien réglée.

Boîtier avec ventirad

Nous avons placé le Raspberry dans un boîtier en aluminium qui le protège et qui dispose d’un ventilateur pour refroidire le processeur. Cela nous permet d'augmenter la fréquence maximale du processeur de 1,5 à 2,0 GHz, et gagner en temps de calcul.

Capture des images

La librairie picamera nous permet de recevoir des images et de définir des paramètres comme la résolution, le nombre des images par seconde, la sensibilité ISO, etc. Nous avons choisi les paramètres suivantes :

  • Résolution : 1280x960 px, compromis entre la précision et le temps de calcul
  • Images par seconde (fps) : 30 fps, la valeur minimale supportée par la caméra, vu que la Raspberry n’est pas capable d’analyse plus que ≈10 fps
  • ISO : 800, pour forcer la caméra à utiliser une courte durée d’exposition qui produit des images plus nettes et rendre la détection des tags en mouvement plus fiable. Le désavantage de ce réglage est l'augmentation du bruit.

Nous analysons l'efficacité de ce réglage dans la partie “Évaluation de la performance”

La librairie produit des matrices numpy de taille 1280x960x3 qui représente l’image capté, contenant l'information pour chaque pixel. A ce point, nous pouvons créer une boucle qui effectue les opérations de capture et de traitement en série.

Pour mieux gérer le flux des images générées par la caméra nous avons créer la classe python PiVideoStream. Cette classe, à l’aide de la librairie threading de python, permet à notre programme de paralléliser les tâches de la capture et du traitement des images. Cette technique de parallélisation a doublé la performance du système (~4fps à ~8fps)

Détection des tags

Traitement des données

Calibrage

Changement de base

Le réseau

Support mécanique

Modèle 3d de la boite conceptualisée pour supporter la caméra, la Raspberry Pi et une batterie usb

Evaluation de la performance

Résolution spatiale

Résolution temporelle

Consommation énergétique

Améliorations possibles

Mode d'emploi

Installation par image disque (recommandé)

Installation manuelle

  1. Mise à jour du système d’exploitation et des paquets installés:
    sudo apt update, sudo apt upgrade
  2. Recompiler et installer la plus récente version de OpenCV et ses depandances avec des options d’optimisation (procédure longue >1h). Guide à suivre
    1. Pour activer des options de multithreading il faut ajouter les flags WITH_TBB=ON, WITH_OPENMP=ON, pendant la génération du makefile. Ces flags de compilation permettent à OpenCV de fonctionner en multithreading. De plus, les flags ENABLE_NEON=ON, ENABLE_VFPV3=ON, forcent la librairie d’utiliser d’instructions spécifiques à l'architecture ARM, qui en conséquence améliorent la performance.
      Liste des flags complète :
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D CMAKE_SHARED_LINKER_FLAGS=-latomic \
    -D WITH_TBB=ON \
    -D WITH_OPENMP=ON \
    -D BUILD_EXAMPLES=OFF ..
3. Installer imutils
pip3 install imutils

Programmes de base

Calibrage

Pendant la coupe