Tourelle

De fablab
Aller à : navigation, rechercher

Présentation

POC 2021-2022 Tourelle Photo 2.png

C'est un projet ludique où nous avons voulu faire une tourelle qui doit viser un QR Code. La méthode de projection a été remplacée par un laser pour avoir une confirmation de la visée. La tourelle est composée de deux servomoteurs pour pouvoir avoir des rotations sur la verticale et l'horizontale et pour avoir des angles précis.

Équipe

  • Baron Thibaud
  • Ben-Amar Hassan
  • Coppo Manuel
  • Glorvigen Axel
  • Rigondaud Thibaud

Problématique

Le projet n'a qu'un but ludique. En effet les débouchées de ce type projet amène possiblement à des questionnements éthiques, ou permettent la mise en place de certains projets comme un distributeur de balle de tennis de table ou des exemples similaires. Nous avons donc cherché uniquement à nous amuser à concevoir un système interactive à partir du matériel disponible.

Materiel Utilisé

  • Raspberry PI (~40-50€)
  • Caméra Rasberry PI (~30€)
  • Ecran, Clavier, Souris, câble HDMI
  • ROBOTIS Dynamixel :
    • 2 servomoteurs AX-12A (~2x50€)
    • Adaptateur USB
    • contrôleur Power HUB
    • 2 supports plastiques, câbles
  • Laser
  • Support: Bois, vis, ...
  • QR Code : Contenu quelconque
  • Multiprise
Tourelle materiel dislpay.png

Nombres d'heures

15 heures au Fablab en équipe et 9 heures personnelles supplémentaires (Travail supplémentaire à Fablab, travaux individuels).

Fonctionnement

POC 2021-2022 Tourelle Photo Axe Schéma.jpg

La partie motricité est contrôlé par le Raspberry PI et est assuré par le système ROBOTIS Dynamixel mis en place. Les servomoteurs assurent les axes de rotations suivantes:

  • Rouge : l'axe de rotation verticale est permis par le servomoteur (boitier noir sur l'image) inférieur entouré en Rouge.
  • Violet : l'axe de rotation horizontale est permis par le servomoteur supérieur entouré en Violet.

Concernant la camera, elle permet de prendre des photos pour pouvoir ensuite calculer deux angles, l'un sur l'axe horizontale et l'autre sur l'axe verticale.

Donc nous avons deux étapes dans le fonctionnement:

Recherche du QR code dans le champ de vision de la caméra

Comme dit précédemment, on prend n photos qui vont permettre d'avoir le centre du QR Code avec une bonne précision selon n. On doit connaitre:

  • La distance entre la tourelle et le plan où est placé le QR code.
  • La taille du QR Code
  • La résolution en pixel

Nous avons utilisé la bibliothèque opencv sur Python pour trouver le QR code sur une image. On peut avoir les coordonnées en pixel des coins du QR Code pour calculer le centre du QR code et la largeur d'un côté du QR code.

POC 2021-2022 Schema Calcul Angles.jpg

Ainsi on peut estimer les distances sur l'axe horizontale et l'axe verticale entre le centre de la caméra projeté sur le plan du QR code et le centre du QR code. Ces distances on va la noter Ox (horizontale) et Oy (verticale). Ox (resp. Oy) va être calculée grâce la distance en nombre de pixels entre le centre du QR code et le centre de la caméra sur l'axe horizontale (resp. verticale). On peut avoir ensuite Ox (resp. Oy) en centimètre en faisant un produit en croix avec la largeur d'un côté du QR code sur la photo et la largeur exacte en centimètre du QR code. On a la distance entre la tourelle et le plan du QR code qu'on note A. Le vecteur associé à cette distance, est normale (perpendiculaire) au plan du QR code. Ainsi on peut calculer l'angle de rotation pour l'axe horizontale arctan( Oy / A). Même chose pour l'angle de rotation pour l'axe verticale mais on remplace Oy par Ox.

Mouvement de la tourelle

Nous avons trouvé un code de démonstration pour pouvoir utiliser les servomoteurs et qui nous a servi de modèle pour le code python de la partie motricité. Nous avons deux fonctions:

  • init() pour réinitialiser les angles de rotation de la tourelle pour que la camera puissent être bien en face et que la tourelle soit bien doit.
  • target_code(angle1, angle2) qui va prendre argument les deux angles de rotation qui va transmettre aux deux servomoteurs.

Les servomoteurs ont leur propre id, ce qui permet de pouvoir s'assurer de transmettre les bonnes instructions au servomoteur qui doit agir. On peut par ailleurs préciser la vitesse de rotation des servomoteurs et on a du faire attention à limiter l'angle de rotation pour éviter d'abimer les câbles (assez courts) et les ports qui sont connectés.

Scénario d'utilisation

Mise en place du matériel et initialisation

Vous devez faire les branchements et avoir les paramétrages nécessaires suivants:

  • Brancher l'alimentation du Raspberry PI, connecter le câble HDMI pour connecter l'écran et le Raspberry PI, branchez le clavier et la souris.
  • Brancher l'alimentation du système ROBOTIS Dynamixel, brancher l'adaptateur USB avec le Raspberry PI.
  • Connecter le ruban de la Caméra au Raspberry PI sur le port CAMERA.
  • Les servomoteurs doivent être connectés sur les ports du contrôleur POWER HUB. Ils doivent avoir leur id correctement initialisé 1 pour celui entouré en rouge sur la photo dans Fonctionnement et 2 pour celui entouré en violet.
  • Le Raspberry PI doit avoir installé les bibliothèques utilisées et avoir python.

Code source et Manuel

Voir le git suivant: https://gitlab.ensimag.fr/coppom/objet_co

Démonstration

Voir la vidéo: https://www.youtube.com/watch?v=ofv6nk-kCSo

Bilan

On a réussi à avoir un prototype prometteur qui répond à l'essentiel du cahier des charges:

  • Recherche de la cible (QR code)
  • Motricité pour centrer la caméra horizontalement et verticalement sur la cible (avec certe une précision relative mais avec aussi de nombreuses pistes d'amélioration).

Cependant nous avions prévu de mettre un système de projection que nous n'avons pas pu mettre en place par manque de temps (qui de plus n'était pas le centre de réflexion autour de ce projet). A la place, nous voulions mettre un laser pour vérifier physiquement que le centrage de la caméra était bien fait. Hélas, pour la même raison, nous n'avons pu mettre en place. On s'est contenté d'un retour vidéo de la caméra pour vérifier le positionement final. Le projet est donc perfectible sur certains points mais le prototype est fonctionel et répond au coeur de la problématique fixée. De plus de nombreux pistes d'améliorations sont possibles pour envisager le futur du projet.

Nous sommes satisfait du prototype que nous avons conçus. La manipulation du matériel, l'environnement du fablab et la conception du projet ont été très ludiques et instructifs.

Axe d'amélioration

Notre projet est fonctionel mais reste perfectible sur de nombreux points. En effet nous avons, au cours des tests et de la réalisation du projet, repéré plusieurs pistes d'amélioration:

  • Nous pouvons tout d'abord accélérer le temps d’exécution de recherche du QR Code. Avec, par exemple, un nombre de photos prises inférieur (actuellement N=10) avec de plus une résolution inférieur (actuellement en HD/720p). Il faudrait juste mesurer l'impact sur nos capacité à détecter un QR Code ou mettre en place un système de détection des erreurs majeures pour trouver une configuration optimale entre le temps d’exécution et la précision de la recherche.
  • Nous avons aussi une précission relative lorsque l'on vise le QR Code. Cela peut s'expliquer par le positionnement de la camera sur la structure de notre tourelle ou par de multiples facteurs assez alléatoires dans notre prototype actuel (Caméra mal fixée, QR Code incliné, ...). De plus cette marge d'erreur est un peu plus visible sur des angles importants. Cette erreur peut être possiblement corrigé, par exemple, avec une succession d’itération de notre rechecher de QR Code pour affiner notre résultat petit à petit (il faudrait cependant fixer des limits d'arrêts pour avoir une marge d'erreur connue). De plus il est possible de revoir le placement des composants matériels et leur fixation à la structure pour limiter les facteurs pouvant altérer notre fonctionnement.
  • Une structure plus solide permettrait aussi d'accélerer la vitesse de rotation des moteurs, qui combiner avec les pistes précédentes permettrait d'avoir une recherche plus rapide et arriver à une mesure précise (avec plusieurs itérations) aussi plus rapidement.
  • Les pistes précédentes permettent d'améliorer les résultats obtenus sur notre prototype. Nous pouvons imaginer aussi rajouter des fonctionnalités comme une mesure automatique de la distance Tourelle-QR Code (nécessaire pour le calcul d'angle). Dans notre cas il est hard coder et doit être changer à la main pour les différents tests. Il aurait déjà été plus propre dans un premier temps de le demander manuellement dans le script du scénario basique avec un input pour facilité l'exécution. Pour ensuite rajouter possiblement un capteur ultrason (ou laser) pour connaître cette distance automatiquement.
  • Une dernière fonctionnalité qui s'intégrerait bien avec le prototype actuel est la recherche de QR Code. On peut imaginer faire tourner lentement la tourelle pour qu'elle balaye de droite à gauche en scannant pour trouver des QR Code avec donc un champ de vision plus large. Une fois le QR Code détecté il suffirait de mettre le script actuel avec en plus les solutions précédemment citées. Les itérations de détection de QR Code pourrait permettre en plus de suivre la cible et en cas de sortie trop rapide du champs de vision de la camera, la recherche pourrait recommencer.