Cours:SaeRobotique : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Composants eagle)
(Livrable)
 
(54 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
https://www.youtube.com/watch?v=xH8EIqh-2_Y
 
  
 
[[Cours:SaeRobotique correction|{{Vert|<big><big>Corrections enseignants</big></big>}}]]
 
[[Cours:SaeRobotique correction|{{Vert|<big><big>Corrections enseignants</big></big>}}]]
  
=Organisation=
+
=Evaluations=
  
*Fonctionnement en trinôme sur 12 jours
+
==2ème évaluation==
*{{Rouge|Compte rendu écrit quotidien individuel}}
 
**sera contrôlé chaque matin
 
**doit indiquer les tâches réalisées la veille
 
**doit indiquer le travail à réaliser le jour même
 
  
=Tâches élémentaires (4 jours)=
+
La 2ème évaluation portera sur :
 +
*l'assemblage de votre robot :
 +
**aspect mécanique (propulseur principalement)
 +
**aspect électrique
 +
***cartes fabriquées
 +
***câblage
 +
*la "fusion" de l'étude de la 1ère semaine avec un robot qui devra
 +
**{{Rouge|au strict minimum}}
 +
***se déplacer(suivre) vers une balle pendant un certain temps
 +
***ensuite se tourner vers le terrain adverse
 +
***avancer en direction du terrain adverse jusqu'à la ligne du milieu
 +
***s'arrêter sur la ligne du milieu
 +
**{{Rouge|pour obtenir la note maximum}}
 +
***attendre l'appui sur un bouton pour que le robot démarre
 +
***chercher une balle
 +
***se déplacer(suivre) vers la balle
 +
***attraper la balle
 +
***s'orienter vers le terrain adverse
 +
***propulser la balle dans le terrain adverse
 +
***avancer jusqu'à la ligne centrale
 +
***s'arrêter
  
 
* Trois tâches principales (déplacements) : un étudiant sur chaque tâche
 
** aller vers la balle (caméra Pixy)
 
** détecter les lignes (suivre petites lignes, s’arrêter sur ligne centrale) : capteurs de ligne => carte à faire (prototypage puis shield)
 
** s’orienter : magnétomètre (MPU9250)
 
 
* À faire globalement : câblage robot, sécurité
 
 
==Livrable==
 
* faire des recherches pour rendre un dossier (pour le lundi qui suit) expliquant : le pont en H, schéma sécurité et chaque partie (a, b, c)
 
* mini-concours à la fin des quatre jours :
 
** traversée la plus rapide en ligne droite (avec magnéto)
 
** aller vers la balle le plus rapidement possible
 
** suivre ligne et stop ligne centrale le plus rapidement possible
 
  
 
=Robot "joueur de tennis"=
 
=Robot "joueur de tennis"=
Ligne 53 : Ligne 54 :
 
== Livrable ==
 
== Livrable ==
  
* À la fin du premier jour :
+
* Rapport final :
** donner une organisation (en tâches, qui fait quoi)
+
** '''À envoyer au format pdf par mail avant le 27 juin 23h59'''
* Rapport :
+
** Description du problème posé en introduction
 
** Diagramme de Gantt
 
** Diagramme de Gantt
 
** diagramme algorithme général
 
** diagramme algorithme général
** stratégie de résolution de chaque tâche
+
** stratégie de résolution et description de chaque tâche :
** Mini-concours à la fin pour sélectionner le meilleur robot (évaluation des capacités du robot, par étudiant en fonction de l'organisation prévue).
 
 
** Chiffrage incluant le matériel ainsi que les ressources humaines.
 
** Chiffrage incluant le matériel ainsi que les ressources humaines.
 +
** Évolution possible
 +
** Conclusion
 +
 +
=Organisation=
 +
 +
*Fonctionnement en trinôme sur 12 jours
 +
**9h-12h
 +
**13h30-16h30
 +
*{{Rouge|Compte rendu écrit quotidien individuel}}
 +
**sera contrôlé chaque matin
 +
**doit indiquer les tâches réalisées la veille
 +
**doit indiquer le travail à réaliser le jour même
 +
 +
  
 
=Ressources=
 
=Ressources=
Ligne 102 : Ligne 116 :
 
   etapeActive=etapeSuivante;
 
   etapeActive=etapeSuivante;
 
}
 
}
 +
</source>
 +
 +
==Programmation : comment faire==
 +
 +
===Exécuter une action une seule fois :===
 +
<source lang=cpp>
 +
void loop()
 +
{
 +
  static bool dejaFait=false;
 +
  if (dejaFait==false)
 +
  {
 +
      executerMonAction();
 +
      dejaFait=true;
 +
  }
 +
}
 +
</source>
 +
 +
===Répéter une action régulièrement===
 +
{| class="wikitable"
 +
|-
 +
|
 +
<source lang=cpp>
 +
void loop()
 +
{
 +
  static uint32_t triggerTime=millis();
 +
  uint32_t currentTime=millis();
 +
 +
  if (currentTime>=triggerTime)
 +
  {
 +
      faireMonAction();
 +
      triggerTime += 500; // prochaine exécution dans 500ms
 +
  }
 +
}
 +
</source>
 +
||
 +
<source lang=cpp>
 +
void loop()
 +
{
 +
  static uint32_t triggerTime=0;
 +
  uint32_t currentTime=millis();
 +
 +
  switch (etapeActive)
 +
  {
 +
    ....
 +
    case etapeX:
 +
            if ( qqch)
 +
            {
 +
              etapeSuivante=etapeY;
 +
              triggerTime=currentTime;
 +
            }
 +
            break;
 +
    case etapeY:
 +
            if ( currentTime >= (triggerTime + duree ) )
 +
            {
 +
              etapeSuivante=etapeZ;
 +
            }
 +
            break;
 +
    case etapeZ:
 +
            ...
 +
            break;
 +
  }
 +
  etapeActive=etapeSuivante;
 +
}
 +
</source>
 +
|}
 +
 +
===Affichage provisoire pour deboggage===
 +
 +
<source lang=cpp>
 +
#define debug  // mode debug
 +
//ou
 +
#undef debug // mode sans debug
 +
 +
void loop()
 +
{
 +
  #ifdef debug
 +
      Serial.println("juste si debug");
 +
  #endif
 +
}
 +
 
</source>
 
</source>
  
 
==Composants/cartes==
 
==Composants/cartes==
 +
*[[Cours:capteurPhotoReflectif|capteur '''photoréflectif''' pour détection de la {{Rouge|ligne}}]]
 +
*Batterie LiFePo4
 +
**assemblage de 4 éléments LiFePo4
 +
**documentation sur les cellules [[Media:CellulesLiFePo4.pdf]]
 +
**tensions à ne pas dépasser :
 +
***maximum : 3,45V/élément
 +
***minimum : 2,65V/élément
 +
***ne pas démarrer le robot : 2,85V/élément
 
*divers
 
*divers
 
**Commutateur d'arrêt d'urgence https://fr.farnell.com/idec/yw1b-v4e01r/commut-bp-e-stop-spst-nc-10a-120v/dp/2833849?ost=2833849
 
**Commutateur d'arrêt d'urgence https://fr.farnell.com/idec/yw1b-v4e01r/commut-bp-e-stop-spst-nc-10a-120v/dp/2833849?ost=2833849
Ligne 116 : Ligne 218 :
 
***https://github.com/pololu/vl53l1x-arduino
 
***https://github.com/pololu/vl53l1x-arduino
 
**Mini Microrupteur - SPDT https://www.robotshop.com/eu/fr/mini-microrupteur-spdt-levier-rouleau.html
 
**Mini Microrupteur - SPDT https://www.robotshop.com/eu/fr/mini-microrupteur-spdt-levier-rouleau.html
**CNY70
 
***http://pierrecaulet.free.fr/Stage_BEN_02-20020/_%20Stage_02_2020_Seance-04/Detection_IR/index_IR.html
 
***http://electro.patgue.com/Ressources_isi2/Robot%20ISI2%20Etude%20du%20capteur.pdf
 
 
**GP2Yxxxx https://www.gotronic.fr/art-capteur-de-mesure-sharp-gp2y0a41sk0f-18338.htm
 
**GP2Yxxxx https://www.gotronic.fr/art-capteur-de-mesure-sharp-gp2y0a41sk0f-18338.htm
 
**lidar tfmini-s
 
**lidar tfmini-s
Ligne 130 : Ligne 229 :
 
***https://pixycam.com/pixy2/
 
***https://pixycam.com/pixy2/
 
***[[Cours:TPS_2103_tp_pixy|TP caméra pixy]]
 
***[[Cours:TPS_2103_tp_pixy|TP caméra pixy]]
 +
***Avoir un PixyMon plus rapide dans la g.008 :
 +
****utiliser un 2ème poste
 +
****ne pas se connecter sur nomachine
 +
****lancer un terminal
 +
****lancer la commande PixyMon
 
*IMU
 
*IMU
 
**Explications du principe du capteur mpu9250 : https://learn.sparkfun.com/tutorials/mpu-9250-hookup-guide/all
 
**Explications du principe du capteur mpu9250 : https://learn.sparkfun.com/tutorials/mpu-9250-hookup-guide/all
Ligne 136 : Ligne 240 :
 
***Réaliser la calibration et noter les valeurs affichées,
 
***Réaliser la calibration et noter les valeurs affichées,
 
***les entrer dans votre programme (fonctions setMagBias() et setMagScale()
 
***les entrer dans votre programme (fonctions setMagBias() et setMagScale()
***Pour réaliser une mesure :
+
***Pour réaliser une mesure, se servir des programmes d'exemples
**** attendre que la fonction mpu.available() renvoie ''true''
 
**** appel de la fonction update_mag()
 
**** puis appel des fonctions getMagX() et getMagY() pour récupérer les composantes x et y. L'angle vers le nord magnétique est obtenu avec l'inverse de la tangente (attention au signe)
 
 
*Robot Arrex :
 
*Robot Arrex :
 
** [[Cours:RobotArrex]] (section documents)
 
** [[Cours:RobotArrex]] (section documents)
 
** avec shield moteur
 
** avec shield moteur
  
==liens==
+
==liens (dont règlement concours) ==
 +
* concours robotique Cachan, lien vers le règlement en pdf : https://robotique-iut-2023.sciencesconf.org/data/pages/Reglement_rencontres_de_robotique_GEII_8_9_10_juin_2023_BUT1.pdf
 +
*[[Cours:archive SAÉ robot joueur de tennis]]
 +
*[[Cours:archive SAÉ suivi de ligne]]
 +
*https://www.youtube.com/watch?v=xH8EIqh-2_Y
  
*[[Media:Coupe_GEII_-_Règlement_-_2020.pdf| règlement de la coupe de robotique]]
+
==Composants Kicad==
 +
 
 +
*Résistances :
 +
**symbole R
 +
**boitier suivant la valeur : 1206(CMS)/Axial DIN0309 (traversant)
 +
*Condensateur
 +
**symbole C
 +
**boitier suivant la valeur 1206(CMS)
 +
*Arduino Nano
 +
**symbole Arduino_Nano_v2.x
 +
**modèle 3d
 +
***télécharger et décompresser : [[Media:Arduino_nano.STEP.zip]]
 +
***dans les propriétés de la carte (éditeur de pcb), onglet modèle 3d
 +
****ajouter le fichier téléchargé
 +
****rotation X -90
 +
****rotation Z 90
 +
****décalage Z 2,5mm
  
 
==Composants eagle==
 
==Composants eagle==
Ligne 162 : Ligne 283 :
 
|-
 
|-
 
| Connecteur || barrette femelle sécable || con-lstb || MA06-1
 
| Connecteur || barrette femelle sécable || con-lstb || MA06-1
 +
|-
 +
| Connecteur grove || carte driver moteur ... || Connector || TWIG-4P-2.0
 
|}
 
|}
  
Ligne 167 : Ligne 290 :
 
*[[Media:Troyesgeii.lbr]] : Divers composants utilisés en ER.
 
*[[Media:Troyesgeii.lbr]] : Divers composants utilisés en ER.
 
*[[Media:LibrairieEagleAdafruit.lbr]] : librairie du site http://www.adafruit.com/
 
*[[Media:LibrairieEagleAdafruit.lbr]] : librairie du site http://www.adafruit.com/
*[[Media::Connector.lbr]] : librairie connecteurs
+
*[[Media:Connector.lbr]] : librairie connecteurs

Version actuelle datée du 26 juin 2023 à 09:59

Corrections enseignants

Evaluations

2ème évaluation

La 2ème évaluation portera sur :

  • l'assemblage de votre robot :
    • aspect mécanique (propulseur principalement)
    • aspect électrique
      • cartes fabriquées
      • câblage
  • la "fusion" de l'étude de la 1ère semaine avec un robot qui devra
    • au strict minimum
      • se déplacer(suivre) vers une balle pendant un certain temps
      • ensuite se tourner vers le terrain adverse
      • avancer en direction du terrain adverse jusqu'à la ligne du milieu
      • s'arrêter sur la ligne du milieu
    • pour obtenir la note maximum
      • attendre l'appui sur un bouton pour que le robot démarre
      • chercher une balle
      • se déplacer(suivre) vers la balle
      • attraper la balle
      • s'orienter vers le terrain adverse
      • propulser la balle dans le terrain adverse
      • avancer jusqu'à la ligne centrale
      • s'arrêter


Robot "joueur de tennis"

Tâches matérielles (8 jours)

  • mat pour tenir ballon : on donne un tube (32) à couper (prévoir boite à onglet et scie) avec la base et les étudiants doivent fabriquer le support ballon
  • système perçage ballon
  • système démarrage avec ficelle à tirer
  • système détection murs : choix du capteur distance avec liste donnée (ultrason, lidar ou infrarouge)
  • fabrication shield pour Arduino Uno

Tâches logicielles

(1 étudiant sur chaque étape)

  1. Localiser balle avec caméra Pixy
  2. Attraper balle (détection opto)
  3. Renvoyer balle dans le camp adverse en s’orientant avec magnétomètre
  4. Recommencer

Codage des tâches en explicitant la structure du programme

  • Ajouter transmission sans fil pour supervision/débogage (Xbee ou HF) : affichage sur terminal pc de l’étape en cours (et éventuellement état de variables)

Livrable

  • Rapport final :
    • À envoyer au format pdf par mail avant le 27 juin 23h59
    • Description du problème posé en introduction
    • Diagramme de Gantt
    • diagramme algorithme général
    • stratégie de résolution et description de chaque tâche :
    • Chiffrage incluant le matériel ainsi que les ressources humaines.
    • Évolution possible
    • Conclusion

Organisation

  • Fonctionnement en trinôme sur 12 jours
    • 9h-12h
    • 13h30-16h30
  • Compte rendu écrit quotidien individuel
    • sera contrôlé chaque matin
    • doit indiquer les tâches réalisées la veille
    • doit indiquer le travail à réaliser le jour même


Ressources

structure du programme

Vous pourrez utiliser la structure de programme suivante :

enum state {etapeInit,etapeChercheBalle,etapeDeplacementVersBalle};

state etapeSuivante=etapeInit;
state etapeActive=etapeInit;


void setup() {

}

void loop() {

  // lecture des capteurs

  switch (etapeActive)
  {
    case etapeInit:

            // si ... etapeSuivante=
            break;
    case etapeChercheBalle:

            // si ... etapeSuivante=
            break;
    case etapeDeplacementVersBalle:

            // si ... etapeSuivante=
            break;
  }

  // on modifie l'étape active pour la prochaine boucle
  etapeActive=etapeSuivante;
}

Programmation : comment faire

Exécuter une action une seule fois :

void loop()
{
   static bool dejaFait=false;
   if (dejaFait==false)
   {
      executerMonAction();
      dejaFait=true;
   }
}

Répéter une action régulièrement

void loop()
{
   static uint32_t triggerTime=millis();
   uint32_t currentTime=millis();

   if (currentTime>=triggerTime)
   {
       faireMonAction();
       triggerTime += 500; // prochaine exécution dans 500ms
   }
}
void loop()
{
   static uint32_t triggerTime=0;
   uint32_t currentTime=millis();

  switch (etapeActive)
  {
    ....
    case etapeX:
            if ( qqch)
            {
               etapeSuivante=etapeY;
               triggerTime=currentTime;
            }
            break;
    case etapeY:
            if ( currentTime >= (triggerTime + duree ) )
            {
               etapeSuivante=etapeZ;
            }
            break;
    case etapeZ:
            ...
            break;
  }
  etapeActive=etapeSuivante;
}

Affichage provisoire pour deboggage

#define debug   // mode debug
//ou
#undef debug // mode sans debug

void loop()
{
   #ifdef debug
       Serial.println("juste si debug");
   #endif
}

Composants/cartes

liens (dont règlement concours)

Composants Kicad

  • Résistances :
    • symbole R
    • boitier suivant la valeur : 1206(CMS)/Axial DIN0309 (traversant)
  • Condensateur
    • symbole C
    • boitier suivant la valeur 1206(CMS)
  • Arduino Nano
    • symbole Arduino_Nano_v2.x
    • modèle 3d
      • télécharger et décompresser : Media:Arduino_nano.STEP.zip
      • dans les propriétés de la carte (éditeur de pcb), onglet modèle 3d
        • ajouter le fichier téléchargé
        • rotation X -90
        • rotation Z 90
        • décalage Z 2,5mm

Composants eagle

Type Composant/Boitier Librairie Eagle Référence eagle
Résistance CMS : 1206 rcl R-EU_R1206
Photocoupleur CNY70 CNY70 CNY70
Led 5mm ou 3mm led LED5MM ou LED3MM
Connecteur barrette femelle sécable con-lstb MA06-1
Connecteur grove carte driver moteur ... Connector TWIG-4P-2.0