Bienvenue sur le site de l'équipe Poivron

Ici nous vous informerons des dernières nouvelles concernant l'avancement de nos projets et autres !

Bonne lecture !

Dernières nouvelles

2 semaines avant la coupe

23 avril 2024

Voilà un mois que nous n’avons rien publié et nous voilà à 2 semaines de la compétition... Mais qu’avons-nous fait ?

 Le VL53L8X

Rappelons que ce capteur mesure 64 distances à chaque acquisition, répartis sur une grille de 8x8.

Ce capteur nous a bien occupé et les résultats sont au niveau des attentes. Le robot détecte les bordures et se recale. Il trouve même sa position de départ tout seul !

L’identification de la bordure se fait en prenant 8 points horizontaux. Nous utilisons une régression linéaire et les caractéristiques de la droite trouvée nous ont vite donné satisfaction. Ce qui nous a embêté, c’est le rejet des valeurs perturbées par la présence d’un pot devant la bordure. Pour cela, nous utilisions un critère, nommé qualité de prédiction par Wikipédia. Ce critère, pour estimer que les points forment une droite, est proche de 1 si les points forment une droite, proche de 0 dans le cas contraire. Or dans notre cas, face à une bordure, le critère variait en fonction de l’angle du robot avec la bordure. Ci-dessous, nos données expérimentales :


Critère régression linéraire

L’explication détaillée mériterait un article, mais en gros, le critère que nous utilisions évaluait le rapport entre la variation en Y des points théoriques par rapport à la variation en Y des points réels. Quand l’angle entre la bordure et le robot est proche de 0, la variation des points théoriques devient très faible alors que la variation des points réels reste constant à cause des erreurs de mesures.

Nous avons bidouillé notre propre critère en se basant sur les écarts en les Y réels et les Y théoriques.

Le capteur permet aussi au robot de trouver les plantes, avec une logique simple, ciblant le point le plus proche.

 Attraper les pots

Le robot a attrapé ses premiers pots. Un moment touchant pour nous, car le spectacle semble à la hauteur de nos espérances.

 PAMI

Nous vous avions présenté la conception de la carte électronique des PAMIs, voici la conception mécanique !


Modélisation PAMI 2024

Et le premier PAMI partiellement monté :


PAMI 2024 - montage en cours

 La suite

C’est maintenant une course contre la montre :

  • Aurons nous le temps (et les pièces) pour fabriquer 6 PAMI
  • Le gros du code du robot semble être en place, mais il faut
    • intégrer la tirette ;
    • intégrer la gestion de la couleur de démarrage ;
    • s’assurer que la détection de l’adversaire fonctionne ;
    • réaliser un semblant de stratégie

0 commentaire


La pince à 3 doigts marche !

23 mars 2024

... mais ce n’est plus un grappin.

Après nos essais non-concluants, nous nous sommes remis au travail. Nous avons coupé les doigts du grappin, percer des trous pour pouvoir fixer différents types de doigts. Finalement, notre seconde itération s’avérera concluante.

 Finalisation électronique

Nous avons fixé nos cartes électronique et raccordé la quasi-totalité de capteurs et actionneurs. Il ne manque que la tirette, le bouton de sélection de la couleur de l’équipe et le petit écran qui indique le score.

Ce qui nous a permis de reprendre le programme de l’an dernier et ses nombreux tests unitaires. Le début ne s’est pas fait sans mal :

❌Recompilation du code en mode test : pas de mode test
❌make clean puis recompilation en mode test : pas de mode test
❌rm -r build/* puis recompilation en mode test : mode test OK (c’est le cache du cmake qui posait soucis), mais pas de retour des codeurs
❌ Oh, le code de test n’initialise pas le module codeur : le code tourne, mais les codeurs sont à 0 en permanence
✅ Ah, oui, après relecture du plan de la carte, les codeurs ne sont pas alimentés par l’USB. On attrape l’arrêt d’urgent de l’an dernier, le connecteur pour la batterie, la batterie et Oh ! Les données arrivent !
✅ Quoi ? Pas de graphique teleplot pour nos codeurs : ça c’est corrigé !

La suite se déroule beaucoup mieux :

✅ Lecture des codeurs
✅ Pilotage des moteurs
✅ Asservissement des moteurs
✅ Lecture du gyroscope
✅ Localisation par codeur + gyroscope

 Finalisation mécanique


Vue arrière du robot (mars 2024)

Nous fixons l’arrêt d’urgence (à cause du souci rencontré plus haut), le gyroscope et le capteur de détection des plantes (VL53L8).

L’arrêt d’urgence se base sur notre système habituel, une sorte de tringlerie en bois qui active un interrupteur à levier.


Arrêt d’urgence (2024)

Le gyroscope est situé à un endroit accessible, afin de facilement pouvoir y accéder en cas de soucis (notamment l’enfermer dans une cage en aluminium).


Gyroscope - sur le toit du robot

Et notre capteur est situé au milieu du robot, à hauteur des plantes qu’il doit identifier.


VL53L8 - Monté sur le robot

 Programmation

Nous avons réglé les positions des 6 bras avec leurs aimants et rajouter sur la carte servomoteur, le code pour communiquer en I2C.

Le gros point restant est le traitement du capteur VL53L8 et la stratégie !

0 commentaire


Un capteur, le VL53L8CX et un actionneur, le bras pour les pots

26 octobre 2023

Le règlement définitif de la Coupe de France de robotique est enfin publié et nous avons donc avancé dans la conception générale de notre robot.

Tout d’abord, nous avons abandonné complètement l’idée de notre premier actionneur, cette espèce de doigt. En effet, la présence des feuilles faisait qu’il repoussait les plantes au lieu de les saisir et pour les pots, la force nécessaire pour les tenir lorsqu’ils contiennent une plante nous paraissait trop grande.

Puis nous avons décidé que nous nous focaliserons sur la partie principale du règlement, attraper les plantes pour les mettre en pot et les stocker dans la jardinière. Pour cela, nous identifions trois parties principales du robot :

  • une pince pour attraper les plantes ;
  • un bras pour manipuler les pots ;
  • une zone de stockage des pots.

 Le bras des pots

Le bras pour manipuler les pots va avoir un gros impact sur la conception du robot. Nous avons rapidement réalisé un prototype en faisant un pari risqué : nous parions que les pots seront ceux d’Ikea lors des compétitions et nous les ersatz en impression 3D.

Prototype de manipulation des pots

 La détection des plantes

Cette année, l’élément de jeu principal - les plantes - ne se trouve pas à une position fixe sur la table de jeu. Nous décidons d’utiliser un système de détection pour les trouver.

Notre choix se porte sur le VL53L8CX après des essais plus ou moins concluants avec le VL53L1X. Le VL53L1X semblait prometteur dans le sens où nous étions en bonne voie d’arriver à détecter un pot. Mais le VL53L8CX présente de nombreux avantages, notamment une utilisation plus simple pour ce genre de cas et une bien meilleure précision.

Nous fournissons un code "rustique", basé sur l’API de STMicroelectronics (STM), pour le Raspberry Pi Pico avec un bout de code pour visualiser les données sur le PC avec Processing. L’ensemble est sur notre Gitea.

Le montage se base sur les cartes SATEL de STM.


Montage avec le Raspberry Pi Pico et la carte SATEL-VL53L8CX

Voici une vidéo des données visualisées lorsque le capteur voit une plante passer devant puis s’en rapproche. Chaque pixel contient une information de distance, de 2 cm à 4 m, avec une précision de l’ordre du millimètre. Bleu signifie que l’objet est loin (65 cm dans la vidéo), rouge que l’objet est très proche.

Bref, nous sommes très contents de ce capteur !

0 commentaire


Détection de l’adversaire et affichage du score

25 avril 2023

 Après le retour de la CARAR 2023

La CARAR nous avait laissé un petit goût amer. Nous avions perdu du temps sur la gestion de la tirette, la détection de l’adversaire était dans sa forme la plus primitive et nous avions pris en défaut notre précieuse carte de détection. Et après tout ce temps passé sur le robot, l’un des membres souhaitait faire une petite pause. S’en suivi donc une semaine qui fut plutôt passée sur le panier que sur le robot...

Ensuite, il fallait savoir si la carte de détection pouvait poser problème... Au bout de deux séances d’essais, et la correction d’un bug potentiel, il fallut nous rendre à l’évidence. Dans certaines conditions, certes assez précises, un capteur VL53L1X peut détecter un obstacle à 35 cm alors qu’il n’y a rien à moins de 2 mètres devant lui. C’est quelque chose que nous avons pu reproduire, mais uniquement dans certains lieux.

C’est assez embêtant, mais en penchant les capteurs vers le bas, on devrait pouvoir contourner le problème, au moins partiellement...

 Détection de l’adversaire

Nous avons accepté ce défaut, pour continuer de travailler sur la détection de l’adversaire. Le code utilisé lors de la CARAR stoppe net le robot dès qu’un objet est détecté à proximité. D’un côté, le robot risquait de basculer, de l’autre, une fois au contact d’un obstacle, il n’est pas possible de repartir.

Nous avons dessiné des cônes de détection où nous souhaitons prendre en compte la présence d’un obstacle en fonction de la direction d’avancement du robot.


Zone de détection Zones de détection en fonction de la direction d’avancement du robot.

Chaque zone de détection d’un capteur est comparée avec le cône. Si les deux zones ne s’intersectent pas, le capteur est ignoré.


Selection des capteurs

Pour vérifier le bon fonctionnement du code, nous créons une fonction permettant d’éteindre les LEDs associées aux capteurs de la carte de détection. Ces indications nous seront précieuses pour le débogage du code.


Les LEDs, qui en s’éteignant, aident au debug.

 Intégration avec les fonctions Trajets

Les fonctions Trajets nous permettent de suivre une trajectoire avec un contrôle fin de l’accélération et de la décélération. Une trajectoire peut être une droite, un arc de cercle ou une courbe de Bézier. La solution que nous avons trouvée pour coupler élégamment la détection avec les fonctions Trajets a été de tout piloter au niveau de la stratégie. Le principe est le suivant : la fonction Stratégie appelle successivement :

  • Trajet_get_orientation_avance() : qui renvoie la direction dans laquelle avance le robot.
  • Balise_VL53L1X_get_distance obstacle_mm(angle) : qui renvoie l’obstacle le plus proche en tenant compte de la direction d’avancement du robot.
  • Trajet_set_obstacle_mm (distance_obstacle) : qui définit la distance pour laquelle la fonction Trajet_avance() calculera la courbe de décélération liée à cette distance lors du calcul de la consigne de vitesse.

De cette manière l’impact sur les fonctions Trajets est minime et le résultat est fonctionnel.

 Affichage du score

Comme l’an dernier, nous utilisons un écran E-Ink pour afficher le score. Cette année, il est plus grand et nous souhaitons le piloter directement avec les microcontrôleurs Raspberry Pi Pico. S’il ne nous a pas fallu très longtemps pour afficher le test sur l’écran, charger des images s’est avéré bien plus compliqué.

Le code proposé n’est fait que pour charger des images faisant exactement la taille de l’écran. Le seul format pris en charge étant celui - non standard, mais compréhensible - du programme, un format binaire brut. Notre image étant bicolore, chaque octet code 8 pixels. Nous avons réutilisé des bouts de code du vendeur (Waveshare) en C fournis pour Linux pour convertir nos images sur le PC avant de copier les données dans le code en C. Un printf bien placé aurait fait l’affaire, mais nous avons voulu être intelligents et nous avons perdu beaucoup de temps...

Le processus était même plus complexe :

  • Création de l’image dans Inkscape (ça, c’est facile), export en PNG
  • Import de l’image dans GIMP, conversion de l’image en couleur indexée, 2 couleurs. Enregistrement en BMP.
  • Utilisation de notre programme pour obtenir les valeurs en C
  • Insertion des données dans le code C.

Mais à la fin, nous avons ce que nous voulions : un écran lisible de loin !


Intégration de l’écran

Affichage de 22 points !

 Avancement

  • Améliorer la détection de l’adversaire
    • Tester la perturbation par un capteur en face : Fait
    • Éliminer les obstacles hors du terrain : Fait
  • Supervision
    • Mesurer la tension de la batterie et détecter une batterie faible
    • Être capable de récupérer des "logs" en fin de match
  • Stratégie
    • Intégrer la détection de l’adversaire dans la stratégie :
      • Code fait et globalement fonctionnel : A valider
    • Enchaîner sur la prise des cerises proches du panier
    • Enchaîner sur la prise des cerises au milieu de la grande bordure.
    • Stratégies d’évitement à implémenter
  • Fiabiliser la dépose des cerises : bien avancé, mais ce sera pour un autre article
  • Écran :
    • Coder l’affichage du score : Fait !
    • passer la liaison SPI de 100 kHz à 4 MHz comme dans l’exemple

0 commentaire


Le robot se structure + détection de l’adversaire

15 janvier 2023

À force de faire des essais et de laisser traîner la carte sur le bureau, une patte de résistance qui traînait a arqué et ça nous a motivé à faire un support propre pour la carte électronique.


Support carte électronique

Support carte électronique

Nous avons profité de l’arrivée d’un jeune nouveau membre pour commencer la carte de détection de l’adversaire. Si tout se passe comme prévu, nous utiliserons des capteurs VL53L1X :

  • Côté électronique, nous sommes proches d’avoir fini le schéma
  • Côté programmation, nous arrivons à lire un capteur, notre code est sur github.

Enfin, nous avons fini notre article sur les astuces pour utiliser VS Code pour le Raspberry Pi Pico.

Du côté de nos tâches :

  • Écrire notre mémo sur l’utilisation de VSCode avec le Raspberry Pi Pico : Fini à l’instant.
  • Finaliser le code i2c non bloquant : Fait !
  • Reprendre les tests avec la turbine
    • Aspiration : nous avons enfin un prototype concluant
    • Soufflage : les premiers essais donnent une bonne piste pour le prototype
  • Placer des contacteurs sur le robot pour détecter les bordures
  • Longer les bordures
  • Transformer la base roulante en robot :
    • Fixer la carte électronique : Fait !
    • Installer le mat balise
    • Intégrer la turbine : conception ok
  • Améliorer la détection de l’adversaire
    • Électronique : schéma à 90%
    • Programmation : lecture du capteur ok

0 commentaire

page précédente 1 2 3 4 5

Copyright "POIVRON" 2011-2023, tous droits réservés
Administration du site