Skip to content

Commit

Permalink
Merge pull request #2 from RobotechNancy/garatim
Browse files Browse the repository at this point in the history
Garatim
  • Loading branch information
garatim authored Sep 28, 2024
2 parents f0c519b + f16397c commit 4d76642
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 2 deletions.
4 changes: 2 additions & 2 deletions pages/Odometrie/OdometrieAbsolue/Liens.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
[title]: # (Liens)
[description]: # (Liens utiles)

Liens utilies pour le travail sur l'odométrie absolue (ArUCO)
__Liens utilies pour le travail sur l'odométrie absolue (ArUCO) :__
 
https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html
https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html
https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html
Expand Down
1 change: 1 addition & 0 deletions pages/Odometrie/OdometrieAbsolue/Materiel.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Matériel utilisé pour l'odométrie absolue
### Les Poteaux-Caméras

Nous utilisons donc des caméras afin de pouvoir voir le plateau et faire la reconnaissance et l’estimation.

Nous avons à notre disposition 3 poteaux fabriqués sur lesquels nous avons travaillé avec le pôle mécanique et le pôle électronique.

On retrouve dans ces poteaux une caméra qui se compose de différents éléments :
Expand Down
12 changes: 12 additions & 0 deletions pages/Odometrie/OdometrieAbsolue/PresentationArUCO.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,33 @@ C’est un code carré constitué d’un cadre noir avec à l’intérieur une m
*Exemple de code ArUCO (ici code 53 en taille 4x4)*

Pour utiliser les codes ArUCO, on définit les dimensions, le type de codage et la taille utilisé par le choix d’un dictionnaire qui contient les informations permettant de reconnaître correctement les codes.

Dans notre cas, nous utilisons des codes de taille 100x100 mm avec un codage interne 4x4.

Ces codes sont placés sur les robots et sur l'aire de jeu du plateau.

 
### OpenCV
Pour pouvoir analyser le flux image d'une caméra, y reconnaître les codes et estimer les positions de ces dernoers, nous avons besoin d’utiliser une bibliothèque de traitement d’image et de données : OpenCV.

OpenCV (Open Source Computer Vision Library) est une bibliothèque logicielle de vision par ordinateur et d'apprentissage automatique à code source ouvert.

OpenCV a été conçu pour fournir une infrastructure commune pour les applications de vision par ordinateur et pour accélérer l'utilisation de la perception automatique dans les produits commerciaux.

La bibliothèque comprend plus de 2500 algorithmes optimisés, dont un ensemble complet d'algorithmes de vision artificielle et d'apprentissage automatique classiques et de pointe.

Ces algorithmes peuvent être utilisés pour détecter et reconnaître des visages, identifier des objets, suivre les mouvements de caméra, suivre des objets en mouvement, extraire des modèles 3D d'objets, produire des nuages de points 3D à partir de caméras stéréo, assembler des images pour produire une image haute résolution d'une scène entière, trouver des images similaires dans une base de données d'images, reconnaître des paysages et établir des marqueurs pour les superposer à la réalité augmentée, etc.


 
On l'utilise pour détecter et lire les codes ArUCO :

- l’image est analysée pour trouver des formes carrées qui seraient des marqueurs.
Dans cette étape, l'image est analysée afin de trouver des formes carrées susceptibles d'être des marqueurs. Elle commence par un seuillage adaptatif pour segmenter les marqueurs, puis les contours sont extraits de l'image seuillée et ceux qui ne sont pas convexes ou qui ne se rapprochent pas d'une forme carrée sont éliminés. Un filtrage supplémentaire est également appliqué (suppression des contours trop petits ou trop grands, suppression des contours trop proches les uns des autres, etc.)

- la codification interne est ensuite lu (matrice de carrés) et les dimensions sont analysé sur l’image transformée pour déterminer s’il y a bien un code appartement au dictionnaire utilisé
Ici, on détermine s'il s'agit bien de marqueurs en analysant leur codification interne. Cette étape commence par l'extraction des bits de chaque marqueur. Pour ce faire, une transformation de perspective est d'abord appliquée pour obtenir le marqueur sous sa forme canonique. Ensuite, l'image canonique est seuillée à l'aide d'Otsu pour séparer les bits blancs et noirs. L'image est divisée en différentes cellules en fonction de la taille du marqueur et de la taille de la bordure. Le nombre de pixels noirs ou blancs dans chaque cellule est ensuite compté pour déterminer s'il s'agit d'un bit blanc ou noir. Enfin, les bits sont analysés pour déterminer si le marqueur appartient au dictionnaire spécifique.

- on obtient et enregistre données de positions des coins et orientation du code


Expand All @@ -42,7 +50,11 @@ Les codes ArUCO de références sont positionnés sur le plateau dont leurs coor
*Plateau de jeu 2024*

Ici, il y a (encadrés orange-rouge) :

-le code 20 en haut à gauche (701 ; 1551)

-le code 21 en haut à droite (2201 ; 1551)

-le code 22 en bas à gauche (701 ; 551)

-le code 23 en bas à droite (2201 ; 551)
5 changes: 5 additions & 0 deletions pages/Odometrie/OdometrieAbsolue/Programmes/Calibration.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,16 @@ Cette grille est donc utilisée avec la fonction “calibrate”
[> ./ArUCO calibrate]

qui permet de prendre des captures de la grille sous différents angles, orientations et éloignements.

Elle fonctionne comme suit :

-La grille de calibration est détecté

-On appuie sur « c » pour prendre des captures de l’image

-Une fois les nombreuses captures prises, la fonction compare des données issues de la reconnaissance de la grille physique à la même grille d’origine reconstruite numériquement (utilisation des informations de configuration)

-Cette comparaison permet de calculer des paramètres de la caméra

-Ces paramètres sont ensuite enregistrés dans le fichier "camera_params.yml"

3 changes: 3 additions & 0 deletions pages/Odometrie/OdometrieAbsolue/Programmes/Configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
Doc sur la configuration

Nous avons tout d’abord en premier lieu la configuration, c’est-à-dire la définition de et données et paramètres qui seront utilisés par les programmes, qui se trouvent dans le fichier "config.yml".

Ce fichier contient les informations suivantes :

-des chemins pour accéder à des fichiers de paramètres ou pour enregistrer la grille ArUCO de calibration

-le port et l’adresse Xbee utilisés pour la communication Xbee (l’adresse change en fonction de la caméra et du robot)
Expand All @@ -16,5 +18,6 @@ Ce fichier contient les informations suivantes :

 
Ce fichier est utilisé pour récupérer les données utilisées dans le code, où certaines données sont choisies spécifiquement en fonction de la situation, notamment en ce qui concerne le code de référence utilisé par la caméra qui est défini selon la caméra et l’équipe.

Ces données sont récupérées et enregistrées dans des objets d’estimation et de tests (des structures organisant les données qui seront manipulées), en particulier les informations concernant l’ID du marqueur de référence, sa position sur l’aire de jeu, et les paramètres de la caméra.

6 changes: 6 additions & 0 deletions pages/Odometrie/OdometrieAbsolue/Programmes/Estimation.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,20 @@ Doc sur le programme d'estimation


Le programme principal de la caméra c’est l’estimation.

C’est le programme qui a pour but de reconnaître les codes (repères et robots) puis de récupérer les informations sur ces codes pour en estimer la position réelle sur le plateau.

Pour ce faire, le programme récupère une image sur laquelle va être fait la détection des codes par OpenCV, qui va ensuite obtenir des vecteurs de translation (tVecs) et des vecteurs de rotation (rVecs) par le biais de la fonction estimatePoseSingleMarker(), qui donnent des données positions de chaque code par rapport au repère de la caméra.

Ces vecteurs vont alors être transformés afin d’obtenir l’orientation et la position de chaque code sur le plateau.

En premier lieu, on récupère la position par rapport au code repère utilisé par la caméra, puis on obtient la position par rapport à la base origine du plateau par un changement de base (décalage de coordonnées en utilisant la position connue du code de référence utilisé)

 
La fonction affiche donc les valeurs obtenues par l’estimation d’OpenCV puis les données transformées par rapport au code de référence.

Une fois les coordonnées sur l’aire de jeu obtenu, la caméra va envoyer ces données au robot dans une trame où chaque valeur est mis en 16 bits (ce qui permet d’aller de 0 à 65 535).

Cette fonction peut être lancée sans envoie d’une trame Xbee avec "estimateTest".

 
Expand Down
9 changes: 9 additions & 0 deletions pages/Odometrie/OdometrieAbsolue/Programmes/Tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Doc sur les fonctions de tests

Nous avons réalisé des fonctions de tests qui nous permettent de pouvoir vérifier le bon fonctionnement de la reconnaissance ArUCO et aussi pouvoir faire des mesures et tests.

Ces fonctions pourront aussi être utiles pour les prochaines personnes de l’équipe afin de pouvoir découvrir et prendre en main rapidement la détection.

Il y a 4 fonctions différentes :
Expand All @@ -13,7 +14,9 @@ Il y a 4 fonctions différentes :
#### "testDetection"

Cette fonction permet de tester la détection des codes ArUCO.

Lors de son exécution, il montre la sortie image de la caméra en affichant les ids, le coin 1 (haut-gauche) et les axes de chaque code ArUCO détecté par la caméra.

Cela permet de voir quels sont les codes qui sont détectés et voir leur orientation par rapport à la caméra.


Expand All @@ -23,7 +26,9 @@ Nous avons souvent utilisé cette fonction pour vérifier que la caméra fonctio
#### "testPosition"

Cette fonction permet de tester la position image de codes détectés par leur coin 1.

Lors de l’exécution, on affiche les ids et les coordonnées sur l’image en pixels du coin 1 (haut-gauche). Il y a une attente de 2 secondes pour éviter trop de données d’un coup.

La fonction nous donne donc la position des codes par leurs coins 1 dans l’image, où le repère (0;0) est placé en haut à gauche de l’image.


Expand All @@ -33,13 +38,17 @@ Cela a est utile pour comprendre et vérifier le positionnement image issue de l
#### "testCoherence"

Cette fonction permet de tester la cohérence des codes détectés, c’est-à-dire savoir si le code détecté est bien conforme aux dimensions, avec les 4 coins bien corrects par les coordonnées images (pixels).

Lors de l’exécution, on affiche les ids et les coordonnées sur l’image en pixels des 4 coins, ainsi que le résultat du calcul de cohérence. Il y a une attente de 2 secondes pour éviter trop de données d’un coup.

La fonction nous donne donc la position des 4 coins 1 dans l’image, où le repère (0;0) est placé en haut à gauche de l’image..

 
#### "cameraPosition"

Cette fonction permet de tester la position du poteau-caméra.

En fonction de la caméra et de l’équipe actuelle, cela permet de savoir si caméra est bien placé au bon endroit sur le plateau.

Elle affiche le résultat sur le terminal si c’est « Position correcte » ou « Position incorrecte »

0 comments on commit 4d76642

Please sign in to comment.