Je suis actuellement en cours de réalisation d'un quadricoptère X avec une carte arduino.
Je dispose donc actuellement des données du joystick (car oui il sera relié en liaison série avec une raspberry pi), et des données gyroscopique du drone (Yaw, Roll et pitch).
Seul problème maintenant : Réussir à dirigé mon futur bébé. En effet, je vois bien le mécanisme pour le faire tourné à droite ou gauche, penché en avant, arrière, haut et bas. Mais le soucis, c'est que je ne vois pas comment faire pour calibré ma puissance sur les 4 moteurs, en fonction de l'inclinaison qu'il possède déjà et des commandes envoyé par le joystick.
Auriez-vous déjà des idée ou même, déjà fait ce genre de calcul ?
Je précise que mes moteurs seront contrôlé en PWM via des ESC.
Merci d'avance pour vos lanterne.
Cordialement,
Quentin
Moi je dirais que le principe de ces bébêtes est d'être asservies. un asservissement permet justement de ne pas trop s'embêter avec la valeur de PWM à envoyer, puisqu'elle se calcule tout seule en fonction de la position, le but étant de maintenir la bête parfaitement horizontale.
Une commande va dire à l'asservissement qu'il faut pencher (en avant / arrière / gauche...), donc simplement changer la position d'équilibre. avec certaines limites, car s'il reste incliné un certain temps, il atteindra une vitesse max qui risque de le faire tomber, donc asservissement et contrôles de limites, c'est "tout"...
il faut piquer un code tout fait et l'adapter à ta machine (juste changer les coëfs d'asservissement). malheureusement, à moins d'avoir les données exactes de tes moteurs, hélices, poids, inertie... il n'est pas possible de calculer un PID, au mieux s'en approcher, puis ajuster à la main...
Tu n'as aucune notion en asservissement? car c'est la base même de ton projet. Tu dois normalement avoir prévu un gyro. ce gyro va envoyer 3 valeurs à ton arduino qui reflêtent la position (horizontale). A partir de ces valeurs, l'arduino sait s'il doit corriger ou pas, mais de manière générale, il faut corriger tout le temps. Pour ça, il suffit de comparer avec des valeurs définies (en gros, tu poses le truc bien à plat (au niveau quoi), le gyro va envoyer les valeurs qui te serviront pour la suite. si tu modifies les valeurs de référence, alors l'appareil va pencher et l'arduino le maintiendra penché.
Un asservissement, c'est un système qui a deux entrées et une sortie. sur une entrée (entrée positive), tu mets une consigne. sur l'autre entrée, il y a une valeur qui dépend de la sortie (chaîne de retour). le système va faire tout ce qu'il peut sur la sortie pour que la valeur de retour soit la même que celle d'entrée. Tout ce qu'il peut, car il faudra lui en donner les moyens, et c'est souvent là qu'il y a plantage.
Dans ton cas, le sortie du système est une PWM. ta chaine de retour est alors moteur + hélisse + vent + densité de l'air + gyro. l'asservissement te permet de palier aux variations de l'air (air plus épais => l'hélice aura plus de force, donc ça va pencher, le gyro envoie une autre valeur, l'arduino baisse la vitesse moteur, il revient droit, on retrouve la consigne en sortie u gyro)...
Le principe d'un asservissement, c'est de maintenir la sortie d'un système (position de l'engin) de façon à ce qu'elle corresponde à l'entrée (commande envoyée).
Pour ça, il suffit que la sortie envoie en partie l'inverse de l'entrée "-". Si la position diminue, alors le retour diminue, la sortie va donc augmenter, et la position aussi. Du coup, on a bien un asservissement, car si un évènement externe (un coup de vent, un trou d'air) modifie la position, le système va corriger de lui-même pour retrouver la position initialement demandée.
Ok, je commence à mieux comprendre. Donc admetons que nous demandons un angle de 20°, et que le drone est à 15°, le systeme, va alors soustraire les 15° au 20° initialement prévu. Du coup, la commande réellement envoyer au drone sera de 20-15 = 5°.
Oui, tu dois faire comme eux, sauf que si ton quadri est différent du leur et que tu utilises les mêmes valeurs pour kp, ki, etc..., il y a des chances qu'il parte dans les choux. C'est pas facile de régler au pif un asservissement sur un objet volant...
Le PWM sur la mega est sur 1 octet. Seul soucis, avec cette régulation PID, je vais avoir une commande sur je ne sais combiens de bits. Comment la mapper avec ce PWM ?
avec la mega, tu as accès à 4 timers 16 bits, te donnant chacun 3 PWM 16 bits (donc jusqu'à 12 PWM 16 bits. mais il faut sortir un peu du contexte arduino et rentrer dans le lard...
Donc si j'ai bien compris (comme j'ai 4 moteur piloté par des ESC), je peux sans souccis utiliser 4 sorties PWM sur 16 bits.
Ca insinue forcement qu'il faut que je code ma comande et mes angles gyro sur 16bits.
Donc, si tout mes traitement avec des nombre de 16bits, je suis censé avoir un résultat sur 16 bits ?