Le robot secondaire




<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>
Vue coté droit. Noter les éléments pour les carrés de fouille et les capteurs fixes.

Table des matières

1. Objectif – Fonctions

1.1. Fonctions du robot

2. Structure

3. Aspects

4. Partie Câblage

4.1. Aspect alimentation

4.2. Estimation de l’autonomie

5. Câblage des signaux de l’Arduino

6. Les Moteurs

6.1. Le module DRV8871

6.2. Direction du mouvement et Changement de direction

7. Les Servomoteurs

7.1. Inventaire des servomoteurs et de leurs positions

8. Approche logicielle

8.1. Le programme d’initialisation

8.2. La tâche de fond

8.3. La stratégie

A. On va au piédestal

B. Pose de la réplique

C. On va aux carrés de fouille

D. Alignement sur les carrés de fouille

E. On agit sur les carrés de fouille

F. On se gare dans une zone de fouille

8.4. Gestion des adversaires

9. Identification-Correction de la commande moteurs

9.1 Enoncé du problème

9.2 Analyse du comportement des moteurs

9.3 Place des correcteurs

9.4 Méthode du modèle

9.5 Méthode du placement de pôles

9.6 Validation par Simulations

1. Objectifs – Fonctions

Cette page vise à présenter les équipements, les câblages et les traitements réalisés pour assurer le fonctionnement du robot secondaire, autonome de BOBBY candidat aux trophées de robotique 2021-2022 : « AGE OF BOTS ».

L’équipe Bobby s’est organisée pour réaliser :

  • Une manette permettant un grand nombre d’actions de natures durables (interrupteurs), fugitives (poussoirs), analogiques (accéléromètres et joystick) communiquant par radio et autonome électriquement (par batterie CdNi 8,4V).
  • Un robot principal communicant par radio et autonome électriquement (par batterie Li-Po 3S). Puissamment équipé pour manipuler les échantillons et la statuette.
  • Une vitrine et une statuette
  • Un robot secondaire, totalement autonome. C’est le sujet de cette page.

1.1. Fonctions du robot

Ce robot est prévu pour assurer tous les points associés à la compétition :

  • Il se déplace et finira la compétition en s’éloignant du bord du plateau.
  • Il dispose d’un moyen de préhension de la réplique pour la poser sur le piédestal.
  • Il dispose d’un moyen de mesure des carrés de fouille pour reconnaître ceux de l’équipe et basculer le carré de fouille de son équipe.

Ce robot est équipé de :

  • 4 capteurs périmétriques IR permettant de :
    • Mesurer la distance aux rebord de plateau et donc le suivre
    • Détecter par balayage sectoriel un éventuel robot adversaire à moins de 30cm
  • Un capteur de ligne blanche qui permettra de détecter :
    • L’arrivée devant le piédestal
    • le passage sur les zones de carré de fouille
  • 1 poussoir permettant l’ouverture de la pince pour
  • 1 organe de détection de départ (largueur)
  • 1 interrupteur indiquant le coté de jeu et donc le programme à exécuter.
  • 1 boussole I2C permettant de connaître son cap par rapport au plateau.

2. Structure

3. Aspects

Les figures suivantes illustrent certaines vues du robot selon différents points de vue.




<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>
Vue de dessus déployé. Noter l’arrêt d’urgence l’inter coté de jeu et le poussoir d’ouverture de pince



<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>
Vue coté gauche. Noter les capteurs orientables et le capteur de ligne blanche

4. Partie Câblage

La figure ci-dessous illustre les connexions réalisées pour alimenter et relier toutes les parties du robot.

4.1. Aspect alimentation

La batterie, de 2200 mAh de tension 3s (11,1V nominal ) est surveillée par un buzzer qui retentira si elle se décharge trop.

Un arrêt d’urgence transmettra cette tension au robot au début de la compétition.

Une platine Bus Alim et I2C distribuera cette tension à :

  • 2 modules DRV8871 pour piloter les moteurs 12V
  • module d’alimentation DC-DC 5V – 5A vers le module PCA9685 pour les servomoteurs et les capteurs

L’électronique prendra son alimentation sur le +5V fournit par l’Arduino Nano.

4.2. Estimation de l’autonomie

5. Câblage des signaux de l’Arduino

Le tableau ci-dessous illustre les connexions réalisées sur l’Arduino Nano chargé d’assurer les mouvements du robot sur le plateau de jeu et les gains des points de la compétition.


Usage – (Couleur)


Nom

Nom

Usage – (Couleur)
Réservé Communication USBTx-D1VIN(Orange)
Réservé Communication USB Rx-D0GND(Gris)
ResetReset
GND5Vutilisé pour les capteurs et inters (Rouge)
Capteur Rotation droit (Jaune)D2A7
Capteur Rotation Gauche (Jaune)D3A6Mesure carrés de fouille
Coté de jeuD4A5Bus I2C – SCL (Vert)
IN1 Moteur Droit (Gris)D5A4Bus I2C – SDA (Jaune)
IN2 Moteur Droit (Bleu)D6A3Capteur Arrière droit
Ouvre PinceD7A2Capteur Arrière gauche
LargueurD8A1Capteur Avant gauche
IN1 Moteur Gauche (Gris)D9A0Capteur Avant droit
IN2 Moteur Gauche (Bleu)D10Vref
Capteur Ligne BlancheD113V3
Sens moteur Droit (Vert) D12D13Sens moteur Gauche (Vert)

Fonctions des broches de l’Arduino NANO employé

On y trouve :

  • La liaison I2C vers le module PCA9685 et la boussole : SDA et SCL en A4, A5
  • Les liaisons aux modules DRV8871 qui portent les PWM de pilotage des moteurs
    • IN1 et IN2 du moteur Droit en D3 et D5
    • IN1 et IN2 du moteur Gauche en D9 et D10
  • Les capteurs de rotations des moteurs sur les broches interruptions D2 et D3
  • D0 et D1 seront préservées pour assurer le dialogue avec le PC pour la programmation et les tests
  • Les 5 signaux analogiques des capteurs de distance et de mesure de résistance A0..A3 et A6
  • Les 4 signaux logiques de largage, coté de jeu, ligne blanche et ouverture de pince.
  • Il reste 3 broches disponibles sur l’Arduino. On envisage d’utiliser D12 et D13 pour détecter les sens de rotation des moteurs.

6. Les Moteurs

Les deux moteurs du robot sont actionnés indépendamment à travers un interface de puissance, On a choisi le module DRV8871 Mais comment fonctionne un tel module?

6.1. Le module DRV8871

On appelle rapport cyclique, le rapport entre la durée d’impulsion et la période. Sur Arduino la période est de 1 ou 2ms car la fréquence est de 1kHz ou 500Hz.

Pour faire tourner le moteur dans un sens on choisit donc le niveau de l’un des signaux. Et le rapport cyclique sur l’autre signal fixe la vitesse.

Pour avancer : IN2 = 0, et IN1 est la vitesse (qui croit avec le rapport cyclique)

Pour reculer : IN1 = 0 et IN2 est la vitesse (qui croit avec le rapport cyclique)

Les essais montreront si Le sens de rotation vis à vis du robot sont bien conforme, sinon on permuttera IN1 et IN2.

6.2. Direction du mouvement et Changement de direction

Lorsque les deux moteurs tournent à la même vitesse, le robot va tout droit ; vers l’avant ou vers l’arrière.

La différence de vitesse entre deux moteurs provoque des virages dans les déplacements du robot.

Lorsque les deux moteurs tournent à la même vitesse, le robot va tout droit ; vers l’avant ou vers l’arrière.

La différence de vitesse entre deux moteurs provoque des virages dans les déplacements du robot.

Ainsi, vers l’avant, si le moteur gauche tourne plus vite que le moteur droit, pour chaque unité de temps les distances parcourues seront différentes et le robot tourne à droite comme le montre la figure ci-contre.

7. Les Servomoteurs

7.1. Inventaire des servomoteurs et de leurs positions

Le tableau et la figure ci-dessous illustrent les connexions réalisées autour du module PCA9685 chargé des mouvements des parties actives du robot.

On a pris soin de les ranger par nature d’actions : 0-1 = Réplique; 2-3 = Carré de fouille; 4-5 = Orienteur de capteur gauche.


Le tableau indique aussi si le servomoteur est employé en linéaire ou en avec un nombre de positions limitées, et lesquelles.

8. Approche logicielle

L’Arduino qui équipe ce robot secondaire fonctionne toujours selon le diagramme ci-contre.

A la mise sous tension, le processeur s’initialise, observe pendant 2s s’il reçoit un programme à enregistrer.

Dans le robot, comme ce n’est pas le cas, il exécute alors le programme d’initialisation : la fonction setup().

Après quoi il entre dans une tâche de fond qui ne s’arrêtera qu’à la disparition de la tension d’alimentation. C’est la fonction loop().

8.1. Le programme d’initialisation

La fonction Setup() doit configurer les organes employés sur le robot et fixer les grandeurs initiales que le robot utilisera (les variables).

Les organes à initialiser sont :

  • L’interface de pilotage des servomoteurs PCA9685 sur le bus I2C puis la mise de chacun dans sa position initiale, de repos
  • La boussole

Les grandeurs à initialiser sont :

  • Les broches d’entrées et de sorties (et, pour les sorties, positionner au niveau haut ou bas)
  • Les tableaux des servomoteurs (les valeurs limites de chacun, les positions que l’on emploiera, …)
  • On mesure le cap initial pour en déduire les directions polaires des axes X et Y du plateau
  • On mesure les distances des rebords du coté fixe et on cherche à détecter le robot principal en balayage sectoriel. Un tableau pour chaque orienteur contient les distances des 20 valeurs prises à 5° car on explore de -10 à +90° par rapport à l’axe « avant/arrière » du robot)
  • On quitte cette fonction lorsque l’on déclenche le départ en retirant le fil du largueur

8.2. La tâche de fond

La tâche de fond est le programme proprement dit.

Il s’articule autour de trois traitements en parallèle (trois tests « indépendants ») :

  1. Quels sont les distances actuelles (fixes et sectoriel) ? Pour en déduire :
  • la présence d’un adversaire
  • la mise à jour des pilotages moteurs (pour aller droit, rester à distance constante…)
  1. Une action est en cours ? On la traite.
  2. Ou en est-on du déplacement en cours ?
  3. Toutes les 20ms (car la fréquence signaux servomoteurs = 60Hz), on lit les 4 capteurs et on tourne les deux SM orientables. On met à jour les tableaux et les deux distances droite.
  • Selon le cas, on arrête le robot si la distance orientable mini passe sous les 20cm vers la direction de déplacement, 5cm dans toute direction.
  • Si on est en train de suivre un bord, on teste si on en en train de corriger ou en cours d’asservissement. On compare alors à la consigne la moyenne des deux mesures et on change la vitesse du moteur gauche en conséquence.
  1. Avant de parler des actions à mener, faisons leur inventaire.
  • B = Réorientation et dépose de la réplique : Activée au début lors de la détection de ligne blanche. Terminée lorsque la pose de la réplique est faite et la pince relevée
  • D = Action sur les carrés de fouille : Pose des lignes de mesure tous les 5cm, si R!=0 et R!= infini, on compare R à celle de notre coté de jeu et si voisin : on éjecte le carré de fouille. On avance de 5cm. Terminée lorsque l’on a vu la troisième ligne blanche avant la dernière tentative.
  1. Avant de parler des déplacements à gérer et mener, faisons leur inventaire.
  • A = On va vers le piédestal pour la réplique
  • C = On va vers la zone de carrés de fouille
  • E = On va vers la zone de fouille la plus proche

Ces trois ensembles de traitements gèrent le temps écoulé de proche en proche par l’emploi de la lecture de l’heure interne de l’Arduino par la fonction millis() qui renseigne du temps écoulé en millisecondes depuis la mise sous tension ou la réinitialisation de l’Arduino.

8.3. La stratégie

On décrit ici les déplacements et les actions que doit mener le robot secondaire.

A. On va au piédestal

Entrée dans cet état : On tire la cordelette du largueur.

Le robot autonome va attendre que le robot principal ait eu le temps de prendre la statuette sur le piédestal.

A.1. Pour cela, on l’immobilise pendant 20s.

A.2. Il se rend ensuite vers le piédestal en conservant (lectures toutes les 50ms) :

  • Soit la distance au bord de 30cm. (on prend un des capteurs comme témoin (celui à l’avant si on est coté jaune) et on ajuste le moteur gauche en fonction de ce que mesure le capteur arrière.
  • Soit le cap relatif au plateau que l’on maintient inchangé par rapport à la mesure d’initialisation.

Sortie de cet état : Il quitte cet état et cesse son déplacement lorsque le capteur de ligne blanche à l’avant détecte la ligne devant le piédestal.

B. Pose de la réplique

Entrée dans cet état : On quitte l’état A

Dans cet état on va déposer la réplique sur le piédestal. Cela va demander 1 déplacement et 3 actions selon la séquence suivante :

B1 On tourne le robot avec la roue vers le centre du plateau plus rapide que celle à l’extérieur : Sur une distance vers l’avant de 7cm et qui doit correspondre à un changement de cap de 45°. Cela va amener le robot à ce trouver en face du centre du piédestal.

B2 On descend la réplique

B3 On lâche la réplique

B4 On remonte la pince.

Sortie de cet état : La réplique est posée et la pince relevée.

C. On va aux carrés de fouille

Entrée dans cet état : On sort de la séquence B2, de l’état B

Cette séquence est la succession des deux déplacements suivants

C1 on tourne sur soi (sens trigo) de 45° vers le centre avant du plateau (on utilise la boussole pour cela)

C2 on avance (Jaune) ou on recule (Violet) jusqu’à ce que le capteur ligne blanche à l’avant réagisse.

Sortie de cet état : On a détecté la première ligne blanche

D. Alignement sur les carrés de fouille

Entrée dans cet état : on est au niveau du premier carré de fouille de son équipe (sortie de C)

Cet état demande plusieurs mouvements sous forme itératifs pour mettre en parallèle le robot à la distance de 2cm du rebord du plateau.

D1 On fait un arc de cercle Si capteur avant plus près que capteur arrière,

et les deux plus loin que 2cm (4cm au capteur), on avance jusqu’à 1 capteur à 4cm.

Si le capteur arrière est plus près que capteur avant

D2 On tourne sur son axe jusqu’à mesure distance capteur arrière = mesure de distance capteur avant.

D3 Dans ces itérations, on s’est éloigné de la ligne blanche, on y retourne à reculons. Initialisation de la mesure de distance

Sortie de cet état : Le robot est aligné, à bonne distance pour manipuler les carrés de fouille.

E. On agit sur les carrés de fouille

Entrée dans cet état : On est bien aligné, à la bonne distance du plateau, sortie de l’état D

Cet état demande la répétition d’un déplacement et d’une séquence d’actions

E1. On avance de 3cm en ligne droite (maintien des distances de cm du bord (4cm du capteur) ou du cap du rebord)

E2 On descend les fils de mesure

E3 On opère la mesure de la tension divisée par le carré.

E4 On relève les fils de mesure

E5 Si c’est la tension mesurée est dans la plage attendu pour notre coté de jeu, on actionne l’éjecteur (mise à 90°)

E6 On range l’éjecteur

On revient en E1 jusqu’à ce que E1 à E6 ait eu lieu après avoir détecté la troisième ligne blanche

Sortie de cet état : les 7 carrés de fouille susceptibles d’être les nôtres sont explorés (distance > 1,5m).

F. On se gare dans une zone de fouille

Entrée dans cet état : Les carrés de fouille sont visités (sortie de E) ou bien le temps des 90s de la compétition est écoulé.

Selon l’endroit où l’on est (le numéro de carré de fouille exploré), on tourne vers le centre du plateau (cap à 180° du cap de l’initialisation) et on avance de 30cm .

Sortie de cet état : Mise à l’arrêt des moteurs et mise au repos des actionneurs.

8.4. Gestion des adversaires

Le robot fait tourner de 5° toutes les 20ms les deux servomoteurs de balayages sectoriels gauche. Les 120° utiles sont explorés en 500ms

A partir de l’état C, on risque de rencontrer des adversaires.

Cela se manifestera par des mesures instantanées de distances inférieures à 30cm sur les capteurs sectoriels gauches du robot.

Dans ce cas, selon le sens de déplacement du robot (si c’est le capteur dans la direction du déplacement qui détecte), le robot suspend tout déplacement en attendant la disparition de cette proximité.

9. Identification-Correction de la commande moteurs

9.1 Enoncé du problème

Le pilotage des deux moteurs pour assurer un déplacement en ligne droite, tourner selon un rayon donné et autres déplacements demande que les moteurs se déplacent précisemment d’une distance et solon une vitesse précises. Les deux de la manière voulue.

Il faut donc savoir parfaitement comment se colmportent ces moteurs : c’est l’identification. Puis les piloter avec précision grace à des correcteurs : C’est la correction.

On commande les moteurs à PWM constante puis on modifie la valeur de cette PWM brusquement, on relève une variation de vitesse manifestée par une vairation du nombre d’impulsions par période Rythme fixe de 20ms pour notre robot.

Le tableau suivant montre le cas de nos essais, différents pour les deux moteurs droite et gauche.

La PWM intiale est de 150/255 pour le moteur droit, de 180/255 pour le moteur gauche.

La colonne 1, à gauche indique le numéro d’ordre de la mesure Rythme.

Les colonnes 2 et 4 montrent les cumuls des impulsions capteurs et donc les déplacements parcourues par les roues.

On constate qu’aux valeus de PWM retenue ici, les déplacements sont proches. Mais pas égaux. Il faut donc corriger les moteurs !

C’est l’étude des correcteurs pour chaque voies que nous allons élaborer maintenant.

Pour cela, notons les valeurs des colonnes 3 et 5 portant les nombres d’impulsions capteurs relevées pour chaque période Rythme.

Dans un premier temps traduisons ces colonnes 3 et 5 en courbes temporelles.

En effet, elles révèlent la manière dont chaque moteur répond à la sollicitation : variation brutale de commande PWM.

9.2 Analyse du comportement et modèlisation des moteurs

On constate dans la figure précédente que les deux moteurs réagissent différemment.

Le moteur droit, en bleu, présente des ondulations importantes, manifestant des freinages internes à la mécanique du moteur. Il va falloir les aténuer fortement par notre future correction.

Au niveau des valeurs, portées sur les courbes, notons les éléments suivants :

Valeurs finales :

La PWM de 150 sur le moteur droit amène à une vitesse finale d’environ 88 impulsions par Rythme.

La PWM de 180 sur le moteur gauche amène une vitesse de 82 impulsions toutes les 20ms.

On en déduit des gains statiques de ces moteurs de :

Moteur droit : GD = 88imp/RapportCyclique = 88*255/150 = 150

Moteur Gauche : GG = 82 imp * 255 / 180 = 116

La forme de la courbe relaint les mesures à chaque Rythme montre un comportement proche d’un système passe-bas du premier ordre.

9.3 Place des correcteurs

Avant de calculer les correcteur, fixons-nous un comportement attendu de l’ensemble : pilotage + moteurs + roue.

C’est ce que l’on appelle se fixer un modèle comportemental. En effet, la figure suivante représente ce que l’on veut faire et celle qui suit les éléments impactés par cet objectif.

9.4 Méthode du modèle

Le correcteur que l’on peut envisager de réaliser devra :

  • Donner à H un gain statique de 1 (H(1) = 1) afin d’avoir une erreur statique nulle
  • Ajouter une intégration dans la correction pour annuler l’erreur statique
  • Donner à H des pôles proches du centre pour augmenter la rapidité.

9.5 Méthode du placement de pôles

A partir des G(z) des moteurs, on peut aussi envisager de faire un placement de pôles pour :

  • ajouter un pôle d’intégration afin d’améliorer la précision
  • retirer le pôle propre au moteur car ils sont loin du centre et donc lents
  • placer un second pôle près du centre afin d’améliorer la rapidité
  • Se doter d’un gain K réglable qui assurera la stabilité

9.6 Validation par Simulations

La figure suivante illustre la simulation – avec le logiciel SCILAB Xcos – de notre motorisation de moteur droit avec les deux types de corrections numérique.

La troisième courbe : sortie corrigée, montre la rapidité et la précision de la correction.

La seconde courbe montre que les impulsions accélératrices de la loi de commande ne dépassent pas 50% de l’amplitude du signal, ce qui reste acceptable et ne devrait pas saturer l’étage du pont en H.

Moteur Droit Méthode du modèle :

On notera la grande qualité de la correction en ce qui concerne la rapidité. Cette méthode devrait pouvoir gommer les ondulations remarquées en 9.1.

Moteur Droit Méthode du placement de pôle

On notera K abaissé à 0,032 pour limiter le dépassement

En effet, avec la valeur envisagée précédemment de K= 0,045, on obtient des dépassements qui peuvent amplifier les ondulations « naturelles » du moteur.

Laisser un commentaire