Arduino et PID, quelques questions

Bonjour à tous,

Comme tout débutant (je pense), je cherche partout, tout le temps, de codes que je ne sais pas lire et qui ne fonctionnent pas. Je m'intéresse au Line Follower avec PID depuis un temps. Bien entendu, aucun code ne fonctionne réellement. Questions:

Un ami ingénieur m'a dit qu'un PID ne peut fonctionner si on ne le cadence pas. Or, les codes qu'on trouve ne semblent pas utiliser millis() ni d'horloge. Un avis? Peut-on cadencer un Arduino autrement?

Pour déterminer l'erreur, on compare les valeurs renvoyées par les capteurs. C'est toujours fait avec des if && && && interminables. Pourquoi ces gens ne se servent-ils pas de switch/case?

Il semblerait que ces programmeurs font faire à leur robot un tour sur lui-même pour se calibrer. Moi je veux bien, mais calibrer des capteurs digitaux, ça sert à quoi? S'ils étaient analogiques, à nuances de gris, je dis ok, mais là... Un avis?

Il est difficile de s'y retrouver dans la jungle du web, quelqu'un a-t-il un code pour un Line Follower PID qui marche et qui soit lisible? J'en ai marre de corriger des codes auxquels il manque la moitié.

J'en ai mal à la tête de pas progresser, pfff...

mais calibrer des capteurs digitaux, ça sert à quoi?

Un capteur digital est souvent un capteur analogique dont on a simplifié la gestion coté utilisateur en lui ajoutant une interface numérique. Exemple le DS18B20 ou le DHTXX ont pour capteur une thermistance tout ce qu'il y a de plus analogique et pourtant vu de l'utilisation ils se gèrent comme un composant numérique.

Tu peux conclure toi même que la calibration d'un capteur " à utilisation numérique " est tout ce qu'il y a de plus normal.

Oui, il faut le calibrer pour qu'il fasse la différence entre noir et blanc. D'origine, les miens le sont. Vu que ces capteurs (et je vois les mêmes ou presque partout) dissocient le noir du blanc, je ne comprends pas l'intérêt de la pirouette en début de course... Le signal renvoyé est bien HIGH/LOW.

Je ne te répondais pas sur ce cas particulier, je te répondais globalement pour signaler qu'un capteur numérique pur n'existe pratiquement pas. La grande majorité des capteurs sont analogiques avec ou pas une sur couche numérique.

Bonsoir à tous,

kammo:
Un ami ingénieur m’a dit qu’un PID ne peut fonctionner si on ne le cadence pas.

Les PID numériques calculent les dérivées (le D) et les intégrales (le I) avec des schémas à différences finies (du style f’(t)= (f(t+dt)-f(t))/dt). D’où l’intérêt de cadencer avec des pas de temps dt=constante.

kammo:
Or, les codes qu’on trouve ne semblent pas utiliser millis() ni d’horloge.

Quel code ? Un exemple ? Une librairie en particulier ? (https://playground.arduino.cc/Code/PIDLibrary)

kammo:
Il semblerait que ces programmeurs font faire à leur robot un tour sur lui-même pour se calibrer. Moi je veux bien, mais calibrer des capteurs digitaux, ça sert à quoi? S’ils étaient analogiques, à nuances de gris, je dis ok, mais là… Un avis?

Le tour sur lui-même, ce ne serait pas plutôt pour trouver la ligne la première fois avant de la suivre ? Combien de capteurs de luminosité ? Un seul ou deux (gauche et droite) ?

f-leb: D'où l'intérêt de cadencer avec des pas de temps dt=constante.

En effet, j'ai passé ma journée d'hier à chercher à comprendre, il existe des bibliothèques permettant de lancer une fonction tous les autant ms. Ca permet de cadencer facilement la chose. J'essaie aujourd'hui.

f-leb: Quel code ? Un exemple ? Une librairie en particulier ? (https://playground.arduino.cc/Code/PIDLibrary)

Le tour sur lui-même, ce ne serait pas plutôt pour trouver la ligne la première fois avant de la suivre ? Combien de capteurs de luminosité ? Un seul ou deux (gauche et droite) ?

Le souci avec ces codes, c'est qu'ils sont un bricbroc de mix de trucs trouvés et qui ne marchent pas. Je ne voulais pas poser des tartines de lignes ici. Maintenant, j'exclus systématiquement les codes qui ne sont pas cadencés, ils ne peuvent pas fonctionner.

Le tour sur lui-même, je crois que certains l'ont vu faire par des robots à nuance de gris et font la même sans que ça change quoique ce soit. Sisi ... Pour ce qui est de trouver la ligne et se caler dessus, c'est très pertinent. C'est d'ailleurs ce que fait maintenant le mien lorsqu'il arrive en bout de ligne. C'est vrai que c'est chouette un robot qui a un mouvement assuré quand il vient de percuter trois fois le chien dans le salon.

Depuis hier, j'ai recommencé un code très simple, avec un robot qui zigzague. Je vais implanter P. Quand ça fonctionnera, on verra pour I, et enfin D.

Content que ça intéresse quelqu'un :D

Mon plus gros problème c'est que je vais devoir le mettre en bluetooth, j'aimerais surveiller ses variables à distance. C'est pas si simple... Donc je dois m'intéresser à ça.

Salut,

Ben comme partout, les codes que tu trouveras ne sont pas forcement du "state of the art" ... d'où les tonnes de if a rallonge que tu trouveras parfois. Ensuite, il ne faut pas oublier qu'un switch/case ne sait pas faire avec des plages de données (enfin, sauf à y rajouter une fonction de normalisation devant).

Concernant le cadencage ... tu en as forcement un due au temps de conversion des capteurs. Donc peut-être que leur algo l'utilise pour géré leur dt.

A+

En effet, switch ne permet pas de faire des conditions rallonge parfois très utiles, mais pas ici selon moi, puisque je "case" tous les cas qui m'intéressent. Ca se ressemble beaucoup, mais ils ont tous deux leur intérêt.

Je pense que tu as raison, le timing se fait par la force des choses, mais j'avais chronométré avec des millis le nombre d'actions en une seconde, et je n'avais pas toujours le même retour. Je pense cadencer mon arduino via une bibliothèque. Ca fait un paramètre en plus, mais de toutes façons les capteurs doivent bien avoir un temps de réaction. Au moins j'aurai appris ça aujourd'hui^^

Merci

Arrête de fumer les merguez et vas voir ici, un post qui pourrait t'intéresser (il y a un code de PID et plein d'autres infos)