Pilote automatique fait maison sur un ordinateur à carte unique (SBC) Tinker board et Arduino DUE

image

L'idée de construire un pilote automatique est venue il y a environ 2 ans. Je voulais créer un appareil entièrement autonome capable de se déplacer d'un point A à un point B avec la possibilité d'éviter les collisions et de contourner les obstacles, capable de surmonter les zones de brouillage ou l'absence de signal satellite. Je voulais également avoir un contrôle simple et pratique avec la souris car il est implémenté dans des jeux (stratégies) contrôlant le mouvement de l'avion à l'aide de points. J'ai dû tout recommencer à zéro, comme cet article, donc s'il y a des erreurs, écrivez à ce sujet dans les commentaires. Je vais commencer dans l'ordre.



Matériel


Au départ, je ne savais pas quel fer était préférable d'utiliser pour ce projet, mais à la fin, je suis arrivé à la conclusion que la meilleure option serait un tas de microcontrôleur (MK) + ordinateur à carte unique. Où MK résout le problème de la stabilisation d'un avion (LA), son mouvement à un cap et à une altitude donnés, et un ordinateur monocarte résout le problème de la navigation et du mouvement le long d'un itinéraire. Étant donné que le plan était d'éviter les collisions, l'ordinateur devait être suffisamment puissant pour traiter les informations des capteurs de détection d'obstacles, compacts et pas trop chers à l'époque, TinkerBoard était le plus approprié pour cette description, Raspbery alors c'était 3B + et ses caractéristiques étaient bien inférieures. En tant que MK, je voulais avoir un contrôleur compatible Arduino parce que arduino avait une énorme base de croquis prêts à l'emploi et donc le choix s'est porté sur DUE 84 MHz, 32 bits ARM Cortex-M3 caril était le plus puissant et devait compenser la franchise de mes mains)).

Au départ, je prévoyais d'utiliser le MPU 9250 avec un filtre Majevik comme capteurs d'orientation, et ses résultats étaient excellents. Le principal avantage de cette option était que tous les calculs, y compris l'étalonnage des capteurs (accéléromètre, gyroscope et magnétomètre), étaient sur le MK. Mais il y avait un problème, le filtre compensait mal l'accélération linéaire, qui se produit constamment lors de chocs ou d'un changement de cap brutal. Cela s'exprime dans les lectures de tangage et de roulis, au moment de l'accélération, ils commencent à flotter, et en passant par le régulateur proportionnellement différentiel (PD) et en particulier la partie différentielle, les problèmes de flottement créés. Par conséquent, j'ai dû utiliser un capteur avec un filtre BNO 055 déjà implémenté.

Contrairement au MPU 9250, le BNO intègre le Cortex M0 MK intégré, qui calcule immédiatement l'orientation dans les angles d'Euler, l'orientation absolue quaternine et calcule l'accélération linéaire, bien que ce capteur présente également plusieurs inconvénients. Le principal problème de ce capteur est l'auto-étalonnage, ou plutôt, qu'il ne peut pas être désactivé, il est tellement «ajusté» à ce capteur et cet étalonnage a une propriété désagréable à disparaître, parfois tout à fait soudainement même juste au même endroit sans mouvement. Cela se reflète principalement dans le lacet qui est attaché au magnétomètre dans ce capteur et devrait montrer la direction du pôle nord magnétique (bien sûr), mais parfois il affiche 100 degrés à strona, puis après l'étalonnage, il peut revenir en arrière)))). Dans d'autres domaines, le problème de parcours peut toujours être résolu en utilisant la synchronisation avec le GPS. Sinon, le capteur fonctionne bien,il détermine toujours le tangage et le roulis correctement, et les accélérations linéaires n'affectent pas beaucoup son travail, à moins, bien sûr, que l'accélération ne dépasse pas 2G, car ce seuil est utilisé pour mesurer le vecteur de gravité et compenser la dérive des gyroscopes.

Le reste du jeu de fers est le suivant: GPS Ublox Neo M8N avec sortie USB,
baromètre BMP 280, sonar HSCR 04 pour recevoir des données sur la disponibilité au sol et une vitesse verticale plus précise, EEPROM 24c16 pour stocker les données d'étalonnage et les paramètres PID, module GSM Neoway M509E pour l'envoi messages sur les coordonnées de l'avion en cas d'accident.

Le diagramme fonctionnel est illustré à la figure 1:

image
Figure 1 - Diagramme fonctionnel du pilote automatique .

Logiciel


Pour le développement de logiciels, j'utilise QT avec l'IDE QT Creator. il m'est le plus familier, et aussi grâce à la fonctionnalité multiplateforme, je peux exécuter mes programmes sur un PC à carte unique avec Debian et un bureau avec Windows, ce qui est très pratique. Pour le développement d'un logiciel de microcontrôleur, l'IDE Arduino est utilisé. Pour plus de clarté, je vais essayer de présenter toutes les sections de la figure 2.

image
Figure 2. - Architecture de l'AP (BNO 080 ajouté pour l'avenir).

1) Interface de contrôle graphique - est une carte satellite à l'aide de laquelle l'avion est contrôlé. Le programme d'affichage d'images satellite en lui-même n'est pas le mien, il a été volé par moi ici (son auteur a également essayé de faire quelque chose de similaire).

Vous pouvez contrôler l'avion à l'aide de points (marqueurs) ou de boutons WADS. Pour contrôler les points, il est nécessaire de tracer l'itinéraire de vol avec des marqueurs verts, ils sont mis avec la souris (RMB), et cliquez sur charger l'itinéraire, ou utilisez le marqueur de déplacement instantané (LMB) et ensuite l'avion de la position actuelle volera jusqu'à ce point, pour son fonctionnement, il est nécessaire de définir case à cocher dans la case "Manuel" des clics accidentels.

Tous les paramètres des marqueurs sont entrés dans les champs appropriés du formulaire, vous pouvez supprimer les marqueurs en double-cliquant sur le bouton central de la souris, alors qu'ils resteront dans la mémoire de l'avion, pour supprimer la mémoire, utilisez le bouton Supprimer l'itinéraire. En atteignant le point, comme dans les stratégies de l'avion, il tournera autour de lui. Commande par bouton WADS contrôle directement les volants à l'aide des contrôleurs PD. Lorsque chaque bouton est enfoncé, une valeur est entrée dans l'entrée du contrôleur, par exemple, lorsque S est enfoncé, la hauteur 30 et lorsqu'il est relâché est 0. Lorsque W -30 est enfoncé, etc. WADS est activé à l'aide des cases à cocher: «manuel», «boutons». Ce mode permet de vérifier la fonctionnalité de tous les gouvernails avant de démarrer. L'interface graphique fonctionne sur l'ordinateur portable, les commandes de contrôle de l'interface graphique utilisant le socket TCP sont transférées au noyau. L'interface de contrôle graphique est illustrée à la figure 3:

image
Figure 3 - Interface de gestion graphique.

2) Le cœur du pilote automatique est la partie du logiciel qui est calculée sur un ordinateur monocarte TinkerBoard. Le noyau est responsable de la navigation et des déplacements le long de l'itinéraire. Pour ce faire, un capteur GPS est connecté à l'ordinateur. En l'utilisant, vous pouvez obtenir la position actuelle de l'avion (latitude et longitude) et comparer cette position avec ce qui se trouve sur l'itinéraire de vol. À la suite de cette opération, l'azimut de la cible est obtenu, qui est envoyé au microcontrôleur avec le reste des paramètres de vol. À l'avenir, le noyau pourra être équipé de son capteur IMU pour implémenter l'ANN. Par exemple, vous pouvez utiliser BNO 080 pour intégrer, accélérer et obtenir de la vitesse, et en intégrant la vitesse, obtenir la distance. La distance reçue de l'ANN devra être traduite dans le système de coordonnées GPS (latitude et longitude) pour son utilisation dans le calcul de l'azimut.

Un tel ANN peut être utilisé en conjonction avec un capteur GPS en cas de perte temporaire de communication avec le satellite afin que l'avion ne manque pas un «virage» vers un point. Au moment du fonctionnement du GPS, l'ANN sera constamment ajusté par ses lectures et comblera les écarts entre les périodes de mise à jour du capteur GPS. De la même manière, l'algorithme de vision industrielle ou SLAM doit être ajusté en changeant la hauteur du point et en créant des biais de l'azimut calculé. Une fois le calcul de l'itinéraire terminé, le noyau envoie des données UART: azimut, altitude, angle d'attaque, type de point, et également si une rotation autour de ce point est nécessaire.

3) Le microcontrôleur exécute les commandes de base, la tâche principale du MK est de suivre le cours donné à une hauteur donnée. Pour cela, le MKU est équipé d'un capteur IMU BNO 055, d'un baromètre bmp 280 et d'un sonar. Pour le mouvement le long du parcours, l'azimut obtenu à partir du noyau est utilisé, il est comparé au taux actuel et le décalage résultant est transmis aux contrôleurs PD pour le lacet et le roulis. Le contrôle de la hauteur est effectué par 2 contrôleurs PD: le 1er détermine la non-concordance des hauteurs actuelles et prédéterminées, qui est alimentée à l'entrée du deuxième contrôleur, tandis que la sortie du contrôleur de hauteur est limitée par l'angle d'attaque actuel pour contrôler son ensemble. Si dans l'interface graphique le type de point est sélectionné pour le décollage ou l'atterrissage, un sonar est utilisé pour déterminer la hauteur. Son témoignage est combiné avec les données du baromètre,pour déterminer le plus précisément la distance au sol et la vitesse verticale. En plus des fonctions principales, le MK collecte également la télémétrie sur le fonctionnement des capteurs IMU, la direction et l'altitude actuelles, les transfère au noyau, où ces données sont complétées par des données GPS et entrent dans l'interface graphique.

Conclusion


À l'heure actuelle, le pilote automatique est encore au stade des essais en vol et n'est pas entièrement configuré. Cependant, je n'ai passé que deux démarrages et je n'ai pas encore récupéré les coefficients des régulateurs.

En général, les régulateurs PD me semblent instables et je veux les remplacer par quelque chose de plus fiable, d'autant plus qu'ils sont déjà dépassés. Il est également nécessaire de remplacer les calculs par des angles d'Euler par des calculs en quaternions, car ces derniers se comportent de manière plus stable lors de la rotation de l'avion à des angles supérieurs à 120 degrés et du vol par vent.

Un plan plus détaillé de l'avionique


image



Lien vers le code source du poison (avec bibliothèques) Github ici uniquement la source mais plus récent

All Articles