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

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


CARAR 2023 (INSA) - Homologuable !

2 avril 2023

Voici deux semaines qui ont été très chargées.

Au menu, intégrer les fonctions existantes pour créer un programme d’homologation et créer une ébauche de détection de l’adversaire.

Le programme d’homologation nous a réservé quelques surprises qu’il a bien fallu corriger, tandis que la détection de l’adversaire n’était qu’une ébauche avant notre départ pour la CARAR.

Après avoir pataugé bêtement pour faire fonctionner notre tirette, nous avons pu intégré la détection de l’adversaire sur place. Le robot était homologable.

Côté détection, une grosse mauvaise surprise : dans certaines conditions, lorsque le capteur n’avait pas d’obstacle à proximité, nous obtenions une valeur de l’ordre de 30 cm, pile dans la plage critique. C’est peut-être qu’un problème de code de notre côté, mais ça reste à confirmer !

Certes, il nous reste du travail, mais le robot commence à se montrer fiable sur un bon nombre d’actions et ça, c’est vraiment très important !


Match 3 - CARAR (720p - 12 Mo).

Nous avons également commencé à travailler sur notre panier définitif, mais il reste du travail :


Futur panier

Avancement

Un bon nombre de nos tâches ont été terminées, et nous basculons maintenant sur la réalisation de la stratégie...

Du côté de nos tâches :

    • Propulseur - correction des perturbations électromagnétique : Corrigé
      • Bouclier électromagnétique autour des moteurs (feuille de papier d’aluminium) : fait mais pas très efficace...
      • Changement de la fréquence de la commande : 50 Hz à 5 kHz  : fait et efficace !
    • Rampe entre l’aspiration et le propulseur
      • Certaines balles tombent, une rambarde à rajouter : fait !
  • Longer les bordures
    • Translation en longeant : fait !
  • Transformer la base roulante en robot :
    • Installer le mat balise : fait !
  • Améliorer la détection de l’adversaire
    • Tester la perturbation par un capteur en face : à faire
    • Éliminer les obstacles hors du terrain
  • 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 : fait, mais à améliorer
    • Enchaîner sur la prise des cerises proches du panier
    • Enchaîner sur la prise des cerises au milieu de la grande bordure.

Mots clés : Coupe, Vidéo, Robot holonome, 2023

0 commentaire


CARAR Junior 2023 - vers un robot fonctionnel

19 mars 2023

Presque un mois sans faire de point d’avancement, alors où en sommes nous ?

L’objectif de ces derniers jours était d’avoir un robot fonctionnel pour la coupe Auvergne-Rhône-Alpes junior. Même si nous avons passé un très bon moment là-bas, d’un point de vu du robot, ce n’est pas une réussite à 100%, le robot n’a pas pu rouler sur les tables de jeux, il n’était pas prêt.

Cependant, nous avons bien avancé sur de nombreux de points. Principalement, le propulseur a été prototypé, testé, amélioré, re-testé puis intégré. Il reste un problème à régler avec les perturbations électromagnétiques, mais envelopper les moteurs dans du papier d’aluminium devrait régler le problème.


Guide du propulseur

Moteurs du propulseur

La structure a aussi bien avancé avec la fixation du toit, de l’arrêt d’urgence, de la batterie et de la tirette.

Prochain rendez-vous le 1er avril 2023, pour la coupe Auvergne Rhône-Alpes à l’INSA de Lyon !

Avancement

Du côté de nos tâches :

  • Reprendre les tests avec la turbine
    • Aspiration : intégration + tests fonctionnels : fait !
    • Soufflage : abandon, nous allons tenter de propulser les cerises avec des roues.
    • Propulseur :
      • Prototype : fait !
      • Intégration : fait !
      • Tests fonctionnels : 90% - des problèmes de perturbation électromagnétiques
    • Rampe entre l’aspiration et le propulseur
      • Certaines balles tombent, une rembarde à rajouter
  • Longer les bordures
    • Accostage : fait
    • Translation en longeant : à faire
  • Transformer la base roulante en robot :
    • Installer le toit : fait !
    • Installer le mat balise
    • Installer le bouton d’arrêt d’urgence : fait !
    • Installer la tirette : fait !
    • Installer la batterie : fait !
  • Améliorer la détection de l’adversaire
    • Carte de détection fonctionnelle
    • Tester la perturbation par un capteur en face : à faire
  • Supervision
    • Mesurer la tension de la batterie et détecter une batterie faible
  • Stratégie
    • Intégrer la détection de l’adversaire dans la stratégie

Mots clés : Photo, 2023

0 commentaire


Ceci n’est pas un problème d’asservissement.

6 mars 2023

Sur la vidéo suivante, le robot ne se comporte pas comme demandé. Nous verrons pourquoi nous considérons que ceci n’est pas un problème d’asservissement.


Avance et tourne ! (480p - 5 Mo | 720p - 10 Mo).

Ce que l’on voit sur la vidéo, c’est que la rotation du robot sur lui-même n’est pas fluide. Elle devrait progresser en même temps que le mouvement.
Pour comprendre ce qui se passe, notre premier réflexe est de comparer la rotation du robot avec sa consigne de rotation.


Orientation du robot et sa consigne

En zoomant sur la courbe, ça ressemble vraiment à un asservissement mal réglé (à un ou deux détails près).


Détail de l’orientation

Dans la première partie, l’orientation suit bien sa consigne puis elle décroche et dépasse sa consigne lorsqu’elle est proche de sa valeur finale. C’est assez semblable au comportement d’un correcteur intégrale mal réglé.

Notre premier réflexe a été d’ouvrir le code de notre asservissement en rotation pour aller modifier le gain de notre correcteur intégral sur notre orientation. Et là, nous réalisons que nous n’avons jamais mis de gain intégral sur notre correcteur en orientation. Le seul gain intégral que nous ayons est sur l’asservissement des moteurs. Nous observons alors le comportement des moteurs


Vitesse moteur A et sa consigne

Vitesse moteur B et sa consigne

Vitesse moteur C et sa consigne

Sur le dernier graphique, celui du moteur C, le moteur n’atteint pas sa consigne à plusieurs reprises dans le cycle. Plus en détail, il semble décrocher quand la consigne dépasse les 500 mm/s alors que la consigne va grimper jusqu’à 1 500 mm/s (probablement sous l’influence du terme intégral).

Ceci arrive lorsque le robot atteint 60° d’orientation. À ce moment-là, tandis que toutes les roues assurent la rotation du robot, la roue C commence à être la seule à faire avancer le robot (selon le vecteur vert sur le schéma) alors que les deux autres roues, dans leur rôle de faire tourner le robot, participent à diminuer sa vitesse.

Projetez les vitesses sur l’axe Y, vous verrez !


Robot ayant tourné de 60°

Nous demandons au robot une consigne qu’il ne peut pas atteindre, car ses moteurs ne sont pas assez puissants.

Si cette théorie est bonne, alors le robot devrait pouvoir réaliser la même trajectoire, mais moins vite.

Ce qui se voit sur la vidéo et les graphiques ci-dessous, où la vitesse maximale a été diminuée de 1 000 mm/s à 300 mm/s.


Avance et tourne ! (3 Mo).

Tant pour l’orientation qui suit sa consigne :


Orientation du robot et sa consigne (lent)

Que pour les moteurs :

Ceci n’est donc pas un problème d’asservissement.

C’est un problème de consigne ! La consigne doit être atteignable. C’est une notion qui est importante, car nous aurions pu perdre beaucoup de temps à corriger nos gains sans obtenir de résultats. De là à considérer que si la consigne (ou l’erreur) sort de certaines valeurs il faut couper l’asservissement et sortir en erreur, il n’y a qu’un pas. Ce n’est pas notre priorité pour l’instant, car il faut ensuite gérer le cas où l’asservissement se "bloque", mais c’est une piste pour améliorer la fiabilité du robot.

Bien sûr, le doute peut persister, est-ce qu’un asservissement un peu plus violent nous permettrait de réaliser le même mouvement plus vite ? Probablement, mais nous pensons que l’effet serait plutôt marginal.

Note du 8/3/2023 : Si l’article s’attarde sur le problème de vitesse des moteurs, c’est parce que la vitesse est la donnée la plus facilement observable. En réalité, le problème se situe au niveau du couple moteur disponible à une certaine vitesse, donc à un problème de puissance des moteurs !

0 commentaire


Contacteurs et détection de l’adversaire

23 février 2023

 Inscription à la Coupe de France

Cette année, nous participons à la coupe de France de Robotique dans la catégorie "Legends" nouvellement créée. Une des conditions est de fournir un projet scientifique et un plan de communication. Voici le nôtre.

 Aspiration des balles

Le dernier prototype nous avait donné satisfaction, voici la vidéo.


Aspiration des balles avec le prototype (1 Mo).

Voici quelques photos de la construction de la version finale. Nous l’avons bien montée une fois sur le robot mais démontée presque aussi tôt pour s’occuper des contacteurs.


Aspiration cerises : démontée

Aspiration cerises : vue de face

Une autre raison pour laquelle nous avons démonté le système, c’est que lors de nos essais la turbine était maintenue à la main et que nous l’avons bousillée. Attention, les pâles de turbines sont vraiment dangereuses pour les yeux !


Turbine HS

Nous avons reçu les nouvelles turbines, mais nous ne les avons pas encore installées.

 Installation des contacteurs

Les contraintes de place sont assez fortes au niveau des contacteurs. Surtout que ceux-ci doivent être protégés car nous comptons sur eux pour longer des murs. Nous avons finalement un modèle qui nous satisfait. Voici le prototype :


Contacteur désassemblé

Contacteur assemblé

Surface en PTFE pour les frottements

L’intégration nous a quand même demandé un peu de temps. Mais les contacteurs sont maintenant câblés et raccordés à la carte électronique.


Contacteur "fin de course"

Contacteurs pour longer les murs

 Détection de l’adversaire

Nous avons fini la conception de nos cartes, commandé et reçu nos cartes de détection de l’adversaire.

Nous les avons aussi partiellement soudées. Nous avons commandé les mauvaises référence de LED, nous attendons la nouvelle commande. Nous n’avons pas encore soudé tous les capteurs. Nous attendons de valider un minimum le code avant de tous les souder.


Détection - dessus

Détection - dessous

Les quelques lignes de code montrent que la carte se comporte comme prévu, avec la possibilité de désactiver les capteurs un par un.

 Déplacement

Nous arrivons enfin à finaliser un mouvement qui nous tenait à cœur : avancer droit en faisant tourner le robot sur lui-même.
C’est probablement l’un des mouvements le plus complexe que le robot aura à faire et donc un bon moyen de valider notre architecture.


Avance et tourne ! (3 Mo).

Bref, la joie du robot holonome !

 Avancement

Du côté de nos tâches :

  • Reprendre les tests avec la turbine
    • Aspiration : nous avons enfin un prototype concluant
    • Soufflage : abandon, nous allons tenter de propulser les cerises avec des roues.
  • Placer des contacteurs sur le robot pour détecter les bordures : Fait !
  • Longer les bordures
  • Transformer la base roulante en robot :
    • Installer le mat balise
    • Intégrer la turbine : réalisation à 90%
  • Améliorer la détection de l’adversaire
    • Électronique : carte reçue et partiellement soudée et testée
    • Programmation : sélection des capteurs opérationnelle

0 commentaire

page précédente 1 2 3

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