Aller au contenu


Photo
- - - - -

La quadrature de phase obligatoire ?


14 réponses à ce sujet

#1 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 20 février 2014 - 12:54

Bonjour, j'ai une question qui me trotte dans la tête depuis pas mal de temps.

En matière d'odométrie et d'asservissement (distance, position et cap) la quadrature de phase est elle vraiment indispensable ?

Parceque bon, pour l'exemple, si je dis à mon robot d'avancer de 80cm, je vois pas l'intérêt du signal de sens puisque je le connais déjà ! (ben oui je lui dis d'avancer donc je connais le sens de rotation pour chaque roue ) Et du coup c'est pareil pour tout les cas, que le robot tourne à droite, à gauche ou recule.

Pourriez vous m'aiclairer svp ?

#2 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 21 février 2014 - 10:56

Bonjour rbot,

Je ne comprends pas ta question : quelle est la quadrature de phase dont tu parles, et le rapport avec l'odométrie et l'asservissement ?
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#3 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 21 février 2014 - 12:17

Bonjour rbot,


???... :no: :huh:

Je ne comprends pas ta question : quelle est la quadrature de phase dont tu parles, et le rapport avec l'odométrie et l'asservissement ?


He bien quand on utilise un encodeur incrémental à 2 voies, le signal du canal A est déphasé de 90° par rapport au signal du canal B. On dit donc, quand 2 signaux sont déphasés de 90° l'un par rapport à l'autre qu'ils sont en quadrature de phase.

Par contre on peut pas dire que ça commence bien parceque c'est vous qui êtes sensés répondre à mes question et pas l'inverse ! :lol:

#4 Wmickael

Wmickael

    Membre

  • Membres
  • 12 messages

Posté 21 février 2014 - 02:01

Salut ;)/>
Euh, moi non plus je ne vois pas trop où est le problème en fait, donc ne m'en veux pas si je répond à côté

EDIT : J'enlève l'énorme bêtise que j'ai mis :D, je me relierai la prochaine fois avant de poster

Voila ;)/>

#5 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 21 février 2014 - 02:16

Oui on est bien d'accord.

Ma question c'est : est-ce obligatoire ?

Parceque quand, via ton programme, tu dis à ton robot d' avancer sur tel distance tu sais déjà qu'il avance puisque c'est toi qui l'a programmé dans ce but. Donc quel intérêt d'avoir un signal de sens ?

merci !

#6 Wmickael

Wmickael

    Membre

  • Membres
  • 12 messages

Posté 21 février 2014 - 02:30

Tout dépend de ce que tu veux faire, dans l'absolu rien n'est obligatoire

Si tu lui dit toi d'avancer ou de reculer d'une certaine distance, tu apportes toi même l'information du sens, donc à mon avis l'information du déphasage n'est pas obligatoire

#7 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 21 février 2014 - 02:41

He bien quand on utilise un encodeur incrémental à 2 voies, le signal du canal A est déphasé de 90° par rapport au signal du canal B. On dit donc, quand 2 signaux sont déphasés de 90° l'un par rapport à l'autre qu'ils sont en quadrature de phase.

Par contre on peut pas dire que ça commence bien parceque c'est vous qui êtes sensés répondre à mes question et pas l'inverse ! :lol:/>/>


Pense à te présenter dans la section appropriée ... Et nous ne sommes pas sensés répondre à tes questions. Chacun est libre ou pas de répondre s'il le juge opportun. Plus la question est mal posée / pas claire, moins les gens auront envie de faire l'effort de te répondre.

Je sais ce qu'est la quadrature de phase. Mais ton explication éclaire un peu plus ta question.
L'information renvoyée par ton encodeur est une mesure sur le mouvement de ta roue : le sens (avec la quadrature), la vitesse (avec le nb de tick par seconde).
Quand tu dis à ton robot d'avancer de 80 cm, ou d'aller à 5cm / s pendant 20s, c'est une commande. Cet ordre est envoyé au contrôleur de moteurs, qui va appliquer la tension nécessaire pour que le moteur tourne à la vitesse spécifiée (en gros E = k.W dans un moteur, E étant la tension qui lui est appliquée, W sa vitesse de rotation). Cependant, le jeu dans les mécanismes, la variabilité dans la conception des moteurs font que les roues ne vont pas forcément à la même vitesse, ni à celle que tu as demandé.
La mesure, comparée à la commande, permet de connaître l'erreur entre ce que tu as demandé et ce qui est vraiment fait. À partir de cette information, l'asservissement calcule la bonne commande à envoyer aux moteurs pour qu'ils tournent vraiment à la bonne vitesse.
Je n'ai pas d'exemple convaincant pour illustrer ça en tête, mais c'est l'idée de récupérer la quadrature de phase (ou de compter les ticks d'ailleurs) : tu sais ce que fait réellement ton système, par rapport à ce que tu lui demandes.

EDIT : je viens de voir le post de Wmickael. Il y a une erreur dans ce que tu dis : un codeur incrémental 2 voies ne donne d'information que sur UNE roue. Les deux voies sont les deux pistes de la roue dentée. Il faut deux codeurs pour mesurer la vitesse et le sens de chaque roue, et dans ce cas, la notion de déphasage n'a pas vraiment de sens : les deux roues peuvent tourner à des vitesses complétement indépendantes.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#8 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 21 février 2014 - 03:49

Pense à te présenter dans la section appropriée

D'accord.

... Et nous ne sommes pas sensés répondre à tes questions. Chacun est libre ou pas de répondre s'il le juge opportun.

Oui je le sais bien, j'ai posé ma question courtoisement. J'ai pas le sentiment d'avoir mis le couteau sous la gorge à quiconque.

Plus la question est mal posée / pas claire, moins les gens auront envie de faire l'effort de te répondre.

Comme je l'ai dis, j'ai posé ma question courtoisement et je l'ai m^me étoffée d'un exemple pour illustrer mes dires.

Je sais ce qu'est la quadrature de phase. Mais ton explication éclaire un peu plus ta question.
L'information renvoyée par ton encodeur est une mesure sur le mouvement de ta roue : le sens (avec la quadrature), la vitesse (avec le nb de tick par seconde).
Quand tu dis à ton robot d'avancer de 80 cm, ou d'aller à 5cm / s pendant 20s, c'est une commande. Cet ordre est envoyé au contrôleur de moteurs, qui va appliquer la tension nécessaire pour que le moteur tourne à la vitesse spécifiée (en gros E = k.W dans un moteur, E étant la tension qui lui est appliquée, W sa vitesse de rotation). Cependant, le jeu dans les mécanismes, la variabilité dans la conception des moteurs font que les roues ne vont pas forcément à la même vitesse, ni à celle que tu as demandé.
La mesure, comparée à la commande, permet de connaître l'erreur entre ce que tu as demandé et ce qui est vraiment fait. À partir de cette information, l'asservissement calcule la bonne commande à envoyer aux moteurs pour qu'ils tournent vraiment à la bonne vitesse.
Je n'ai pas d'exemple convaincant pour illustrer ça en tête, mais c'est l'idée de récupérer la quadrature de phase (ou de compter les ticks d'ailleurs) : tu sais ce que fait réellement ton système, par rapport à ce que tu lui demandes.


Oui je suis d'accord sur toute la ligne. Le truc c'est que c'est pas vraiment ce que je cherche à savoir. là vous m'expliquez l'intéret de mesurer la vitesse pour la corriger si elle ne correspond pas à la commande. Je cherche à comprendre l'intérêt de mesurer le sens de rotation de la roue sachant qu'on le connais déjà via la commande. M^me si il y a du jeu dans les mécanismes etc. mon moteur ne va pas tourner dans le sens contraire de ce qui lui a été demandé... non ?

EDIT: Quand je disais: "Par contre on peut pas dire que ça commence bien parceque c'est vous qui êtes sensés répondre à mes question et pas l'inverse ! :lol: " C'étais de l'humour. Si vous l'avez mal pris je m'en excuse platement.

#9 ChristianR

ChristianR

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Male
  • Location:Isère (38)

Posté 21 février 2014 - 04:29

Une roue à encoches avec un seul capteur (donc mesure de la vitesse de rotation seule, mais pas du sens de rotation) suffit dans la grande majorité des cas, car on sait dans quel sens on roule.

La quadrature n'est alors utile pour corriger sa position que si on recule sans le faire exprès.
Christian

#10 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 21 février 2014 - 04:48

Merci, ça répond à ma question. C'est pas obligatoire. :ok:

#11 Wmickael

Wmickael

    Membre

  • Membres
  • 12 messages

Posté 21 février 2014 - 07:01

EDIT : je viens de voir le post de Wmickael. Il y a une erreur dans ce que tu dis : un codeur incrémental 2 voies ne donne d'information que sur UNE roue. Les deux voies sont les deux pistes de la roue dentée. Il faut deux codeurs pour mesurer la vitesse et le sens de chaque roue, et dans ce cas, la notion de déphasage n'a pas vraiment de sens : les deux roues peuvent tourner à des vitesses complétement indépendantes.


Oula wii, j'avais en effet pas du tout compris, et par conséquent, lors de ma 1ère réponse, j'ai dit n'importe quoi, je confirme, c'est bien dans 1seule roue le codeur avec le déphasage à 90° (honte à moi :$)

#12 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 21 février 2014 - 08:23

Comme je l'ai dis, j'ai posé ma question courtoisement et je l'ai m^me étoffée d'un exemple pour illustrer mes dires.

Pour moi, il manquait un élement dans la question, qui était que tu parlais d'un encodeur incrémental. Vu qu'on peut faire de l'odométrie avec d'autres capteurs (et même visuellement), le lien n'était pas évident. D'où ma demande.

Oui je suis d'accord sur toute la ligne. Le truc c'est que c'est pas vraiment ce que je cherche à savoir. là vous m'expliquez l'intéret de mesurer la vitesse pour la corriger si elle ne correspond pas à la commande. Je cherche à comprendre l'intérêt de mesurer le sens de rotation de la roue sachant qu'on le connais déjà via la commande. M^me si il y a du jeu dans les mécanismes etc. mon moteur ne va pas tourner dans le sens contraire de ce qui lui a été demandé... non ?

En fait, ce que je voulais mettre en évidence, c'est que l'on ne peut pas être sûr des grandeurs qu'on commande mais ne mesure pas. Dans la plupart des cas simples, il est probable que ton moteur tournera bien dans le sens qu'il faut. L'exemple dont je parlais, c'est celui où le robot monte une pente mais n'a pas assez de vitesse et se retrouve à reculer alors qu'on lui demande d'avancer (le cas que ChristianR a cité). L'exemple me semble un peu foireux, mais c'est l'idée. Pour en revenir à ta question initiale, rien ne t'empêche de ne pas tenir compte de cette information, parce que tant que tu seras dans un cas simple, l'approximation tiendra. Après, si tu dispose de l'information, autant l'utiliser.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#13 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 22 février 2014 - 07:57

Bonjour, j'ai une question qui me trotte dans la tête depuis pas mal de temps.

En matière d'odométrie et d'asservissement (distance, position et cap) la quadrature de phase est elle vraiment indispensable ?

Parceque bon, pour l'exemple, si je dis à mon robot d'avancer de 80cm, je vois pas l'intérêt du signal de sens puisque je le connais déjà ! (ben oui je lui dis d'avancer donc je connais le sens de rotation pour chaque roue ) Et du coup c'est pareil pour tout les cas, que le robot tourne à droite, à gauche ou recule.

Pourriez vous m'aiclairer svp ?

La question était parfaitement claire pour moi dès le début, bien formulée. Je vais apporter un éclairage différent.

En fait, ça dépend de ce que tu veux faire. Si tu veux faire un robot réellement asservi en distance, position, cap, comme tu le dis, où l'odométrie est la principale source d'information sur la position (en 2D) du robot, alors avoir des codeurs en quadrature est quasiment indispensable, mais dans certains cas, on pourrait s'en passer.
Ca dépend de plusieurs choses : du type d'asservissement que tu utilises, de la localisation des encodeurs, etc...

Tout d'abord, maintenir l'information position 2D d'un robot avec 2 odomètres (droit-gauche), ça nécessite clairement de ne "perdre" aucun top sur chacune des roues, et de n'en compter aucun en plus. C'est surtout critique en orientation, calculée avec l'écart d'avancement droite-gauche. A basse vitesse, et surtout lors de phases d'inversion de sens des moteurs, il est indispensable de connaitre le sens. Avec juste 1 seule information par roue, tu vas forcément te tromper d'1 pas au moins à l'inversion de sens, dans certaines situations. Fais-toi des chronogrammes montrant à la fois la vitesse d'1 roue et le signal d'1 encodeur, pour comprendre.
Et il faut se rappeler que les erreurs se cumulent dans le temps. Il ne faut donc faire aucune erreur, ne compter aucun top en trop ou en moins, pour maintenir une estimation d'orientation correcte. Sinon, au bout de plusieurs manoeuvres, l'erreur sera trop grande. C'est ce que j'ai expérimenté avec mes robots BOB2 et BOB3.

Ensuite, un vrai asservissement de type proportionnel, ou proportionnel-dérivé, ou PID, peut inverser très rapidement le sens de marche du moteur. Et dans ce cas, sans information de sens, à basse vitesse, tu ne sais pas dans quel sens tourne le moteur. L'inversion de sens est particulièrement critique. Un tel asservissement ne donne pas juste comme commande au moteur de s'arrêter une fois la position de consigne atteinte, l'asservissement continue après. Je suis en train de me bidouiller des motoréducteurs asservis (asservissement performant), et le maintien en position immobile est "actif" : autour de la position de consigne, je peux avoir ~100 oscillations par secondes, 100 périodes ou j'oscilles de +1 pas à -1 pas d'encodeur autour de cette position. Ces oscillations sont normales. L'encodeur étant côté moteur en amont du réducteur, ces micro oscillations (1/4 de tour côté moteur) ne se voient pas du tout en sortie de réducteur. Et on imagine bien que faire un tel asservissement nécessite de détecter le sens.

On pourrait peut-être se passer de connaitre le sens dans certains cas: si tu as un robot avec des moteurs très démultipliés, dont les motoréducteurs ont beaucoup de frottement, sur lequel tu fais des pauses avant d'inverser le sens de rotation d'un moteur (donc sans asservissement classique proportionnel par ex), et sur lequel ton encodeur est côté moteur (en amont du réducteur), alors tu peux sans doute te passer de la détection du sens (par quadrature). Mais ça sera un robot plutôt lent à priori.

Leon.

BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#14 hmnrobots

hmnrobots

    Membre passionné

  • Membres
  • PipPipPip
  • 316 messages
  • Gender:Male
  • Location:Périphérie Nantes

Posté 22 février 2014 - 08:22

Pour ma part je crois qu'un capteur à quadrature est nécessaire pour un capteur de rotation, par exemple une hélice qui mesure le sens et la vélocité d'un courant d'air car tu disposes alors du sens et de la vitesse;
par contre dans le cas d'un actionneur (par exemple une roue commandée) la quadrature est rarement nécessaire sauf effectivement dans des cas pointus comme expliqué par leon
Faire simple, c'est déjà bien assez compliqué!
http://hmnrobots.blogspot.fr/

#15 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 22 février 2014 - 12:38

Merci beaucoup c'est on ne peut plus clair pour moi maintenant !



Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users