Aller au contenu


Photo
- - - - -

Projet de robots joueurs de foot


29 réponses à ce sujet

#21 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 985 messages
  • Gender:Male
  • Location:Anglet

Posté 23 mars 2024 - 10:38

Essaye de rajouter une résistance de pull down sur ta gate.


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#22 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 269 messages
  • Gender:Male

Posté 24 mars 2024 - 06:39

Ou en test plus simple (sans connecter ton micro-controleur), connecte la gate a GND. Si connecté à GND ça ne s'active pas, alors (si tu ne te soucie pas de l'état initial), tu pourra sans problème commander le kicker depuis le micro-controleur (tu pourra alors ajouter la pull-down si tu veux que l'état initial soit désactivé). Si connecter à GND ne résoud rien, alors il faudra chercher ailleurs.

 

NB : au lieu de relier directement à GND, tu peux aussi relier la gate à GND via une résistance (si tu as, je prendrais entre 1k et 10k), ce qui à l'avantage que tu risques moins de faire de dégats si tu as un montage vraiment tordu


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#23 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 985 messages
  • Gender:Male
  • Location:Anglet

Posté 26 mars 2024 - 05:44

 

NB : au lieu de relier directement à GND, tu peux aussi relier la gate à GND via une résistance (si tu as, je prendrais entre 1k et 10k), ce qui à l'avantage que tu risques moins de faire de dégats si tu as un montage vraiment tordu

 

= mettre une résistance de pull down sur la gate ;) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#24 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 269 messages
  • Gender:Male

Posté 26 mars 2024 - 05:52

 

= mettre une résistance de pull down sur la gate ;)

J'avais interpréter ton message comme souder une résistance de pull-down (mais peut-être que j'ai mal interprété), alors que ma suggestion était de placer une pull-down provisoire sur le header destiné à la Teensy pour confirmer que le seul problème est que la gate est flotante (donc la pull-down ne sera probablement pas indispensable une fois la Teensy présente et le pin en output.

Mais oui, l'idée de fond est la même (et peut-être que c'est moi qui ai mal interprêté ta réponse, et que tu suggérais exactement la même chose que moi)
 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#25 LudovaTech

LudovaTech

    Membre

  • Membres
  • 16 messages

Posté 02 avril 2024 - 08:40

Désolé pour l'attente, on s'est plutôt concentré sur le déplacement du robot et son positionnement dans le terrain, en tout cas quand la gate est connectée au ground ça ne s'active effectivement pas. Il me semble que la teensy possède déjà des résistances pulldown pour ses pins digitaux, donc ça fera peut-être l'affaire. Et on dirait qu'une des teensy a l'air de ne plus fonctionner... je pense qu'il y a surement eu une fausse manip ou des mauvaises soudures sur le PCB, on va éviter de faire des choses trop risquées pour l'instant donc je ne sais pas si on aura le temps de faire fonctionner le kicker, en tout cas il faudra sans doute rajouter plus de protections sur la carte à l'avenir.



#26 LudovaTech

LudovaTech

    Membre

  • Membres
  • 16 messages

Posté 11 avril 2024 - 09:02

La semaine dernière avait lieu la compétition régionale d'Ile de France de la Robocup Junior à laquelle nous avons participé (https://www.ac-paris...p-junior-121792), qui réunissait d'autres équipes de robots des académies de Paris, Créteil et Versailles.

Equipe terrain.jpg
Couloirs.jpg
Robots terrain.jpg

Après des matchs assez peu concluants pour les robots (il reste encore du travail pour fiabiliser tout ça, je pense à toi la roue qui tombe en plein match), on a quand même réussi à finir 5è et à se qualifier (de peu) pour la compétition nationale !!

Bye bye roue.png
Classement.png



#27 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 985 messages
  • Gender:Male
  • Location:Anglet

Posté 11 avril 2024 - 10:33

Bravo !  :yahoo:  :clapping:   :Koshechka_08: 

Il reste plus qu'à fiabiliser pour la prochaine rencontre !


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#28 LudovaTech

LudovaTech

    Membre

  • Membres
  • 16 messages

Posté 18 avril 2024 - 11:34

Merci :)

Sinon pour en revenir à notre kicker, est-ce qu'un relais pourrait également fonctionner avec les 3.3V de la Teensy et simplifier le circuit ? Par exemple le SRD-03VDC-SL-C avec une tension nominale de 3V pour la bobine (https://html.alldata...03VDC-SL-C.html)



#29 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 985 messages
  • Gender:Male
  • Location:Anglet

Posté 18 avril 2024 - 08:48

Tu as des petits modules relais , regarde relais arduino( un relais monté sur un PCB avec un mosfet ) et tu pourras le mettre à côté de ta carte pour piloter le kicker sans soucis =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#30 LudovaTech

LudovaTech

    Membre

  • Membres
  • 16 messages

Posté 21 mai 2024 - 11:07

Bonjour

Voilà l'explication du système utilisé actuellement pour envoyer les positions des objets que la caméra détecte (balle et goals) au microcontrôleur Teensy 4.1 principal, si des gens veulent s'en inspirer ou si vous avez des conseils :) Je partagerai également l'algorithme qui détermine la position du robot dans le référentiel du terrain à l'aide du LIDAR une fois que le code sera un peu plus peaufiné

La caméra que l'on utilise est une OpenMV RT1062, elle possède déjà un microcontrôleur qui lui permet de traiter les images et une méthode find_blobs() permettant de récupérer les coordonnées d'un objet d'une couleur prédéfinie. Les deux composants communiquent à l'aide du protocole UART et on envoie les données avec ce code :
 

import machine
machine.UART(1, 115200) # Port de communication utilisé et baud rate

[...] # Algorithme de détection

data = "b{:+04d}{:+04d}{:+04d}{:+04d}{:+04d}{:+04d}e".format(ballCoord[0],
                                                             ballCoord[1],
                                                             myGoalCoord[0],
                                                             myGoalCoord[1],
                                                             enemyGoalCoord[0],
                                                             enemyGoalCoord[1])
uart.write(data)

Où la méthode format() permet d'intégrer certaines valeurs à une string. Par exemple dans {:+04d} on aura un caractère de signe (+ ou -) suivi de 3 chiffres, qui correspondent ici à la coordonnée en x de la balle. La teensy recevra donc par exemple "b+035-023-003-090+011+100e", ce qui fait 26 octets envoyés toutes les 60ms environ.

Du côté de la Teensy, la récupération des données d'un tour complet du LIDAR rotatif et leur analyse prend jusqu'à 130ms, pour les données de la caméra elle va donc simplement lire celles déjà disponibles dans le buffer circulaire de 64 octets avec la méthode readBytes(). Le code est le suivant :

RobotState getCamInfos() {
  size_t bytesAvailable = SerialCam.available();

  if (bytesAvailable >= 26) {
    byte buffer[65];
    size_t nbrBytesReceived = SerialCam.readBytes(buffer, min(bytesAvailable, sizeof(buffer) - 1));
    buffer[nbrBytesReceived] = '\0';

    std::string lastCompleteSequence = extractLastCompleteSequence((char*)buffer);
    if (!lastCompleteSequence.empty()) {
      int ball_x, ball_y, my_goal_x, my_goal_y, enemy_goal_x, enemy_goal_y;
      
      if (sscanf(lastCompleteSequence.c_str(), "b%d%d%d%d%d%de", &ball_x, &ball_y, &my_goal_x, &my_goal_y, &enemy_goal_x, &enemy_goal_y) == 6) {
        return RobotState(Vector2(ball_x, ball_y), Vector2(0, 0), Vector2(0, 0), Vector2(my_goal_x, my_goal_y), Vector2(enemy_goal_x, enemy_goal_y));
      } else {
        SerialDebug.println("Erreur lors de l'extraction des données de la caméra: " + String(lastCompleteSequence.c_str()));
      }

    } else {
      SerialDebug.println("Aucune séquence complète trouvée, reçu: " + String((char*)buffer));
    }    
  }
  return RobotState(Vector2(0, 0), Vector2(0, 0), Vector2(0, 0), Vector2(0, 0), Vector2(0, 0));
}

En sachant que
- La carte Teensy possédant plusieurs ports série, on a SerialDebug pour la connection avec l'ordi et SerialCam pour la caméra
- La classe RobotState permet simplement d'enregistrer certaines valeurs importantes nécessaires pour les stratégies de jeu

Ainsi, à partir d'une séquence complète (qui commence à b et se termine à e) extraite du buffer à l'aide de extractLastCompleteSequence(), on vient récupérer chacune des valeurs des coordonnées des objets détectés dans des variables à l'aide sscanf(), où chacun des %d correspond à une valeur. A propos de cette extraction de séquence, l'idée est que l'on cherche le dernier caractère de fin dans le buffer, puis on le parcourt de droite à gauche avec rfind() à partir de ce caractère de fin et jusqu'à rencontrer un caractère de début :

std::string extractLastCompleteSequence(const char* buffer) {
    std::string str(buffer);
    size_t lastE = str.find_last_of('e');
    if (lastE != std::string::npos) {
        size_t prevB = str.rfind('b', lastE);
        if (prevB != std::string::npos) {
            return str.substr(prevB, lastE - prevB);
        }
    }
    return "";
}

En mémorisant la position des derniers caractères b et e du buffer, on peut alors récupérer toute la séquence entre les 2 sous forme de string avec str.substr(prevB, lastE - prevB)

Voilà :)

 





Répondre à ce sujet



  


1 utilisateur(s) li(sen)t ce sujet

0 members, 1 guests, 0 anonymous users