Arduino Forum

International => Français => Réalisations et Projets Finis => Topic started by: FilBip on May 14, 2016, 07:29 pm

Title: yaaap, un pilote automatique pour bateau
Post by: FilBip on May 14, 2016, 07:29 pm
Bonjour tous,

je vous présente yaaap (Yet Another Arduino AutoPilot).

Yaaap est un calculateur de pilote automatique pour bateau.
Il est construit autour d'une carte mini pro et le code tient de justesse dans les 32k de mémoire.

L'objectif était de remplacer le calculateur analogique d'un antique pilote pour barre franche Autohelm 2000.
L'ancienne électronique avec un fluxgate fonctionne encore mais est vraiment à bout de course avec des performances très éloignées de ce qu'on peut espérer avec un capteur inertiel IMU 9dof actuel.
Je conservé le vérin électrique qui fonctionne toujours parfaitement.
 
L'interface est réduite à 3 boutons et un écran LCD.
Il n'y a pas d'interface avec un équipement extérieur (GPS, télécommande smartphone) mais tout est possible...
Les fonctions de calibration et de réglage des principaux coefficients sont intégrées à l'interface.

Il n'y a pas de capteur de position de la barre. La barre est poussée ou tirée en fonction du besoin de correction.
La fin de course du vérin (ou toute surcharge) est détectée en mesurant l'intensité du courant vers le moteur.

Quelques détails
C'est l'excellente librairie RTIMUlib qui gère le MPU9250 et permet d'obtenir un cap compas stable et peu influencé par les mouvements du bateau.
Le code de la librairie RTIMUlib est légèrement modifié pour capturer et sauvegarder le gyroBias après initialisation immobile.
Sur un bateau en mer, il est rare d'être assez immobile pour permettre une bonne initialisation du gyro à chaque allumage. Il en résulte une dérive permanente (drift) qui fait perdre tout l'intéret du gyroscope.
Le calcul de la correction est un PID (asservissement proportionnel/intégral/dérivé) mais sans partie intégrale. L'angle précédent de la barre fait déjà office de terme intégral.
Le moteur est piloté par impulsions longues (10ms mini) voire en continu. Le mode PWM ne donnait pas de bons résultats. Même pour de petits débattements, toute la puissance est nécessaire et mon vérin n'a pas de marge de puissance hélas.



Les composants
1 carte mini pro ATMega328P 5V
1 capteur compas gyro accélérateur : MPU9250
1 capteur d'intensité moteur : ACS712
1 driver mosfet pour le moteur : TB6612FNG (2 canaux en parallèle pour gérer 2Amp nominal et des pointes à 6A).
1 convertisseur DC-DC 12V-5V 500mA mini
1 afficheur LCD I2C 16x2
3 boutons étanches
1 boite étanche
câbles, connecteurs, plaques époxy, etc
Sans les tests et quelques tâtonnements, le coût de l'ensemble est d'environ 30€  :)



Le code
L'ensemble des sources pour IDE Arduino et la visualisation avec Processing sur PC/Mac sont téléchargeables sur GiHub.
https://github.com/FilBip/yaaap (https://github.com/FilBip/yaaap)





Merci de votre attention. Toute contribution sera bienvenue.


tags: mpu9250, autopilot, tillerpilot
Title: Re: yaaap, un pilote automatique pour bateau
Post by: vincenthure on Dec 05, 2017, 03:20 pm
Bonjour,

J'ai entrepris un projet très similaire.
Ce topic est'il toujours actif?
Nous pourrions mettre notre énergie en commun pour faire un super pilote :)

Vincent
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Dec 05, 2017, 07:44 pm
Bonjour,
faites bien d'ajouter un message à ce fil. J'ai reçu une alerte mail alors qu'aucun message n'est envoyé quand des messages privés arrivent.
Le projet est toujours d'actualité. Le programme a un peu évolué après une première saison.
Les sources à jour sont toujours accessibles ici : https://github.com/FilBip/yaaap

Mais surtout, tout peut être revu en utilisant un esp32 à la place du petit atmega328 !
Avec l'atmega on peut espérer traiter quelques dizaines d'échantillons par seconde reçus du MPU9250.
Avec l'esp32, beaucoup plus rapide, on peut tenter les 500 ou 1000 échantillons par secondes. Le lissage et la précision sont alors sans comparaison. Plus qu'à coder... Ce que je n'ai pas encore fait :)
Title: Re: yaaap, un pilote automatique pour bateau
Post by: ChPr on Dec 06, 2017, 10:50 am
Avec l'esp32, beaucoup plus rapide, on peut tenter les 500 ou 1000 échantillons par secondes. Le lissage et la précision sont alors sans comparaison. ...
Je ne suis pas sûr de la pertinence des échantillons du MPU9250 à cette fréquence car (doc MPU9250) :

Gyroscope : Low Pass Filter Response Programmable Range 5 --> 250 Hz
Accéléromètre : Low Pass Filter Response Programmable Range 5 --> 260 Hz

ce qui limite à une centaine de Hertz l'exploitation de ces données.

Quand bien même il en est capable, je ne suis vraiment pas persuadé que l'amélioration du lissage à cette fréquence ait une quelconque influence sur la précision alors que le constante de temps d'un bateau est largement supérieure à une seconde.

Cordialement.

Pierre
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Dec 06, 2017, 01:19 pm
je n'ai pas expérimenté mais la performance du filtrage s'améliore avec l'augmentation de la fréquence de rafraichissement. Voir les écrits de Kris Winner qui propose de bonnes implémentations pour MPU9250.
Voir entre autres https://github.com/kriswiner/MPU9250.

Cordialement
Title: Re: yaaap, un pilote automatique pour bateau
Post by: ChPr on Dec 06, 2017, 02:23 pm
... la performance du filtrage s'améliore avec l'augmentation de la fréquence de rafraichissement. ...
On est d'accord, c'est ce que d'ailleurs, j'ai écrit :

... je ne suis vraiment pas persuadé que l'amélioration du lissage à cette fréquence ait une quelconque influence sur la précision ...
Mais je le répète, lissage/filtrage ne veut pas dire précision.

En admettant qu'un échantillonnage à 10 Hz provoque des résidus de l'ordre de ± 0.5 °, cette valeur sera filtrée par la constante du bateau ( > 1 seconde) et vous aurez au final un résidu de l'ordre de 0.05 ° (soit une vibration de 0.75 mm au bout d'une barre de 1 mètre !! Elle doit en voir d'autres).

Dans ces conditions, un échantillonnage à 500 Hz vous donnera un résidu de 0.01 ° qui ramené au bateau ferait 0.001° : invisible. Certes mais la valeur moyenne sera la même avec les mêmes erreurs de calibration, du temps qui coule, ...

De plus, il est bien connu qu'aller titiller les performances aux extrêmes de capteurs et autres organes d'une chaîne de régulation entraîne systématiquement des instabilités liées aux bruits et différentes résonances inhérents (désolé, la règle du masculin s'applique encore sur les accords  ;) ) du système.

Cordialement.

Pierre
Title: Re: yaaap, un pilote automatique pour bateau
Post by: vincenthure on Dec 09, 2017, 04:28 pm
Bonjour,
Comme je vous l'ai dans un post précedent j'ai entrepris moi aussi la fabrication d'un pilote pour voilier :

Voici les choix techniques que j'ai pris ( pas définitf ) :

1 carte arduino nano avec un écran Crystaux Liquide et 5 boutons. Elle gère l'interface utilisateur , la visualisation des paramétres, les menus, la sauvegarde des preset en EEprom et envoie les commandes au deuxième arduino via un port série

1 carte arduino nano qui gère l'asservissement avec la library PID.

1 capteur IMU HNO055 ( magnétomètre 3 axes, accélerometre 3 axes, gyroscope 3 axes ) qui est pourvu d'un processeurs ARM pour calculer en temps réel les angles de Euleurs.

1 pilote de moteur MD10C R3 13 ampéres commandé en PWM et en sens de rotation

1 capteur de courant pour mesurer l'intensité demandé par le moteur

1 régulateur de tension 5 Volts

J'envisage de fabriquer un circuit imprimé pour connecter proprement tout ce petit monde.
Je vais brancher tout cela sur un moteur 12V 160W étanches (IP65) équipé d'un réducteur à vis sans fin qui entrainera ma barre franche via une chaine et un bout circulaire.

L'écriture du code et les essais commencent
mon compte Github est https://github.com/vincenthure/pilote
Je n'ai pas encore eu le temps de lire le code Yaap mais j'imagine que tu as du résoudre pas mal de problèmes.

Cordialement

Vincent Huré
Title: Re: yaaap, un pilote automatique pour bateau
Post by: vincenthure on Dec 10, 2017, 04:41 pm
Voici un schéma du projet
J'utilise deux arduinos car je trouve ça plus simple à programmer et plus efficace.
L'arduino qui assure l'asservissement n'a que cela à faire et son programme est très simple.
L'arduino qui sert d'interface utilisateur peux ètre modifier sans risque d'interférer avec l'asservissement.
Vincent
Title: Re: yaaap, un pilote automatique pour bateau
Post by: Willy22 on Jan 02, 2018, 02:16 pm
Bonjour !

Je travaille aussi sur un pilote automatique pour mon voilier (kelt 620) à base d'arduino !
Après une très longue phase de mise au point mécanique (moteur électrique de gonfleur et tige fileté + écrou) mon pilote fonctionne très bien pour fixer la barre et la commander à distance grâce à une télécommande infrarouge.
Concernant l'asservissement, j'ai implémenté un PID sur arduino à partir du cap compas obtenu par un shield BNO055 dont j'ai essayé de faire varier les coeficients sans succès ...

Je pense que l'erreur vient du cap compas qui est faussé par la gite ... Avez vous rencontré ce problème ?

J'utilise la fonction float readEulerHeading(void) qui devrait me retourner le bon cap compas mais je doute vraiment de ce résultat !

Willy
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Jan 02, 2018, 02:54 pm
Bonne année :)
le plus difficile est effectivement de conserver le cap avec des coups de gite.
Le capteur magnétique est très sensiblement faussé quand le plan change. C'est la raison des calculs de fusion avec les données de l'accéléromètre et du gyroscope.
J'avais conservé la bibliothèque IMU de mon projet; bien qu'elle ne soit plus maintenue, parce qu'elle permettait de régler le "poids" du capteur magnétique dans la fusion.
J'ai obtenu la meilleure stabilité avec un poids très faible pour le capteurs magnétique. Ce qui donne une grande inertie et limite les variations dues au tangage et à la gite brutale.

Plus le bateau est petit, plus le pilotage automatique est délicat en raison de l'instabilité de route par rapport à une grosse coque.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: Willy22 on Jan 02, 2018, 07:00 pm
Salut FilBip !

Merci pour la rapidité de ta réponse !

Si j'ai bien compris tu recommande de corriger les données du magnétomètre par celle de l'accéléromètre, c'est bien ça ?

Si oui y a t'il des formules/algorithmes génériques qui permettent d'effectuer ce traitement un peu plus facilement ?

Sinon il y a bien l'option du stabilisateur mécanique en roulis et tangage mais c'est cher et pas très joli :/

Qu'en pensez vous ?

Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Jan 02, 2018, 07:34 pm
Oui, il faut filtrer les données et réaliser quelques calculs pour obtenir une fusion correcte avec filtrage du bruit sur les données récoltées et lissage en fonction des données passées.
Je suis incapable de formuler les explications mathématiques. De nombreux articles existent sur le sujet. Ils sont en anglais en général. Chercher Kalman, Madgwick, quaternions,...
Le BNO055 est doté d'un logiciel de filtrage performant. De meilleure qualité que ce qu'on obtient avec les algorithmes des bibliothèques open-source (FreeIMU ou autres). C'est la raison de son prix supérieur au MPU9250.
Il faut tester le résultat de readEulerHeading() sur table avec du code qui affiche les données pendant qu'on fait bouger le capteur.
Voir aussi https://github.com/kriswiner/BNO055 qui n'utilise pas la bib adafruit pour le BNO055.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: vincenthure on Jan 03, 2018, 10:12 am
Bonjour,
J'utilise aussi un BNO055 et je confirme que l'on peut utiliser son processeur interne pour faire une lecture du cap avec correction tangage / roulis : euler angles. Je n'ai pas encore fais de test en condition réelle mais sur le bureau ça marche.
Si vous voulez jeter un oeil sur mon code il est sur github

https://github.com/vincenthure/sailing-autopilote-arduino

J'ai prévu de mettre un lecteur de courant pour limiter l'intensité dans le moteur en cas de blocage.
Cet parti de code n'est pas encore écrite et je ne sais pas encore comment je vais faire.
La premiere option est une mise en veille avec un bip sonore....
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Jan 03, 2018, 02:47 pm
Pour la lecture de l'intensité, j'utilise un acs712 avec temporisation en cas de surcharge sauf si inversion du sens de rotation.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: LizaVal on Jan 07, 2018, 03:27 pm
Bonjour,

Je découvre ARDUINO depuis 2 mois et j'ai un projet très similaire au votre.
Je veux remplacer un pilote Autohelm ST 3000 qui "controle" un verin LECOMBLE ET SCHMITT 40ST16 à travers un pont en H à base de mofsets et diodes.
Pour l'instant j'ai installé de simples microswitches de fin de course qui agissent sur le pont en H.
Donc je vous lis avec beaucoup d'attention !
Saluts !
Title: Re: yaaap, un pilote automatique pour bateau
Post by: vincenthure on Jan 13, 2018, 09:31 am
Je me dois d'apporter une correction concernant mon précédant post.
J'ai vanté les mérites du BNO055 en tant IMU car il intégre un processeur qui est capable de faire le calcul pour délivrer un cap compensé par le gite ( mode fusion ).
J'ai fais fabriquer un circuit imprimé pour intégrer tout ce petit monde et faire des essais plus précis. Je mes suis rapidement aperçu que les résultats n'était pas à la hauteur de mes espérances.
1/ le BNO055 dispose d'un système de calibration automatique et cela pose des problèmes car il ne fonctionne pas correctement. Il est impossible de le débrayer car il tourne en tache de fond et envoi des messages indiquant que la calibration n'est pas stable.
2/ Quand la calibration est bonne il faut sauver les datas dans les eprom de l'Arduino et les récupérer quand on rallume l'appareil pour éviter un long process de calibration. Je n'ai pas réussi à faire fonctionner cela correctement.
3/ d'après des discussions sur des forums il semble que le BNO055 ne soit pas adapté au mesure en mouvement, car la vitesse de déplacement du capteur degrade la precision du cap en mode fusion!
Bref, j'abandonne et je me tourne vers Adafruit Precision NXP 9-DOF Breakout Board - FXOS8700 + FXAS21002. Il ne dispose pas de processeur pour faire de calcul c'est donc Arduino qui doit s'en charger. l'avantage c'est que l'on a la main sur programme.
Adafruit propose cela : Adafruit_AHRS
Je vous tiens au courant
Vincent
Title: Re: yaaap, un pilote automatique pour bateau
Post by: LizaVal on Jan 19, 2018, 05:20 pm
Bonjour,

Bien lu le pb de BN 00 55.
De mon coté, je n'arrive pas à faire fonctionner mon MPU 6050, alors je ne suis pas prêt de vous rejoindre !
Au moins je sais envoyer un message sur le forum !
Saluts et Bonne Année.
Joël
Title: Re: yaaap, un pilote automatique pour bateau
Post by: ozolli on Feb 07, 2018, 11:47 am
Bonjour,

Je ne suis pas sur un projet de pilote auto mais sur celui d'une centrale de navigation que je fais évoluer cette année après 3 ans sans y toucher.

J'ai testé le BNO055 et je confirme, comme beaucoup, qu'il souffre de son auto-calibrage très perfectible.
En l'état, sur un voilier, c'est inutilisable !

J'attends un Adafruit Precision NXP et un Adafruit Feather M0 pour tester ce 9-DOF. J'ai l'intention de l'utiliser avec la librairie NXPMotionSense de Paul Stoffregen et pas celles d'Adafruit.

https://github.com/PaulStoffregen/NXPMotionSense (https://github.com/PaulStoffregen/NXPMotionSense)

Mon projet original : https://github.com/ozolli (https://github.com/ozolli)
Il n'est pas à jour avec les développements actuels mais je le ferai quand j'aurai avancé sur le NXP.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: vincenthure on Feb 07, 2018, 12:25 pm
Je continue mes tests et la programmation avec le capteur NXP FXOS8700 / FXAS21002C.
J'ai rencontré pas mal de difficultés mais maintenant ça avance bien.
Voici comment j'ai résolu mes problémes:
le capteur est connecté avec un arduino (un mini)
j'utilise les librairies Adafruit correspondante aux capteurs et le Adafruit_Sensor-master
j'utilise le filtre   Madgwick contenu dans la librairie Adafruit_AHRS_master
J'ai effectué la calibration avec le logiciel MotionCal ( mettre le serial à 115200 )
J'ai reporté les valeurs dans mon sketch
Et ça fonctionne correctement
Une loop prends environ 7 millisecondes ce qui donne une fréquence de rafraichissement d'environ 140 hz, qu'il ne faut oublier de spécifier dans le filtre.begin() du setup.
Le systéme est très réactif et très fluide mais en valeur absolu la précision du compas n'est pas terrible.
C'est pour ça que je compte vérifier mon COS ( course over ground ) avec un capteur GPS qui calcul le cap entre 2 points successifs.
Les autres fonctions du pilote sont gérés par un autre arduino ( PID, bouton, affichage ).
La communication entre les deux arduino se fait ainsi:
une impulsion "low" est envoyé sur la pin 2 de l'arduino qui s'occupe du capteur.
Il génere alors une interruption qui envoie sur le port serie (soft)  la valeur du "yaw" en faisant une conversion float to bytes.
J'éspere que j'ai été clair
Vincent
Title: Re: yaaap, un pilote automatique pour bateau
Post by: ozolli on Feb 07, 2018, 01:38 pm
J'ai effectué la calibration avec le logiciel MotionCal ( mettre le serial à 115200 )
(...)
Le systéme est très réactif et très fluide mais en valeur absolu la précision du compas n'est pas terrible.
Est-ce que tu as effectué le calibrage avec le capteur en position définitive dans le bateau ?

Les masses métalliques environnantes (soft iron, hard iron) ont une influence primordiale dans le calibrage.
Pendant le calibrage c'est le bateau qui doit tourner, pas le capteur dans le bateau.

D'autre part, les librairies Adafruit ne tiennent pas compte des corrections à apporter à l'accéléromètre. C'est la raison pour laquelle j'opte pour la librairie NXPMotionSense.

Une autre alternative est d'utiliser la méthode de Merlin avec son logiciel Magneto. Voir ici : https://thecavepearlproject.org/2015/05/22/calibrating-any-compass-or-accelerometer-for-arduino/ (https://thecavepearlproject.org/2015/05/22/calibrating-any-compass-or-accelerometer-for-arduino/)
C'est la méthode que j'ai utilisé jusqu'à maintenant
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 10, 2018, 10:09 pm
Bonsoir,
Pas de doute , c'est Yaaap qu'il me faut.    Cela correspond exactement à mon projet .   
Très beau travail et un code beaucoup plus beau que celui que je peu écrire moi même,   ( ! Admiratif et reconnaissant)
Mais mes essais avec plusieurs nano / UNO et 3 Mpu9250 9265 etc buttent toujours au même endroit:
le code « freeze » après INIT ***.   Puis plus rien ?
Le Mpu9250 retourne l'erreur 6.
  (Semble ne pas pouvoir récupérer les paramètres EEPROM)

Ce message pour prise contact

Merci
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Mar 12, 2018, 11:37 am
Bonjour,
le code retour -6 est dû à un mauvais identifiant de MPU9250.
voir dans le code de la méthode RTIMUMPU9250::IMUInit() dans le RTIMUMPU9250.cpp de la librairie "
"
    if (result != MPU9250_ID) {
         return -6;
    }
"
Le MPU9250_ID attendu = 71 (voir RTIMUMPU9250.h).
Je préconise de faire un test unitaire avec juste l'arduino et le mpu avec un programme de test minimal qui écrive toutes les étapes sur le port série pour valider la bonne initialisation de la communication arduino-mpu.

A+
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 12, 2018, 03:20 pm
MERCI.  Merci de votre réponse rapide

Test avec MPU9250BasicAHRC retourne :

MPU9250 I AM 73 I shoud be 71
MPU9250 is on Line...
X axis .....   
.....
MPU9250 initialized for active data mode...
AK8963 I Am 48 should be 48...
Ak8963  initialises for active data mode...

Donc en effet il s'agit probablement de l'adressage I2C incorrect avec mes 92-65 (chinois)  et mon GY-91 MPU9250

Soit il me faut modifier des  RTIMUlib...  (mais un peu d'aide ne sera pas inutile )
Soit vous me communiquez la référence exacte de votre sensor 9250 et son distributeur .  Si cela fonctionne pour vous , Cela ira très bien pour moi.
Cordialement. BD
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Mar 12, 2018, 04:18 pm
faut juste modifier libraries/RTIMULib/RTIMUMPU9250.h pour remplacer
#define MPU9250_ID                  0x71
par
#define MPU9250_ID                  0x73

Et retester :)
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 12, 2018, 05:22 pm
Ok et cela Fonctionne !     Magnifique et encore merci.
En fait j'avais déjà fait à plusieures reprises ces modifier sans succès ?
D'où Mon appel à l'aide.

Mon erreur.     (Si cela peu servir à d'autre)
 est d'avoir sauvegardée la bibliothèque dans un sous direction à côté ...
avant de modifier le fichier RTIMPU9250.h .

Erreur car la compilation ne prenais pas en compte la version modifiée du fichier ... 

A suivre. 
Cordialement
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 15, 2018, 04:52 pm
Bonjour , 
Mon projet Yaaap progresse tranquillement et ma compréhension de votre code aussi.   (Mais m'impose lectures et recherches en parallèle car je ne suis clairement pas au niveau )     
Fonctionnement ok sur plaques d'essais ...  Sauf la calibration du capteur
8 horizontal ou vertical ... qui semble sans effet.
 Le Lcd montre «  5. Calibration »     8 et 8 et 8 , Mais pas de offset ?     Il semble que MPU9250 n'entre pas en mode Calibration.
Avez vous une suggestion ?

Aussi , pour info, les boutons 1 et 3 me semblent inversés dans le sous menu choix des actions , mais cela est plus simple .
Cordialement   BD




Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Mar 16, 2018, 10:11 am
Ooups, la version sur Github a la calibration en commentaire.
Dans setupMenu.ino:
      case 4: //Calibration
//          compassCalibration();
        break;
Il faut enlever "//" en début de ligne... Désolé :(
La calibration dure jusqu'à l'appui sur le bouton du milieu.

J'en profite pour ajouter un mot sur la sauvegarde des paramètres (option menu 6).
Il y a 2 calibrations. Celle du compas (en faisant des 8 ) et celle du gyroscope.
Par défaut, le gyro du mpu9250 est calibré à chaque démarrage (calcul gyroBias dans la lib RTIMULib). Sur un bateau, le démarrage doit être possible avec un MPU en mouvement. Il faut alors éviter ce calibrage.
Lors de la première sauvegarde sur EEPROM, le calibrage est écrit en EEPROM. Ensuite il est lu en EEPROM et non recalculé au démarrage. Jusqu'à un éventuel reset EEPROM (option 6) qui le remet à zéro et autorise un nouveau calibrage gyro.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 16, 2018, 01:16 pm
Merci.    C'est bien clair.
Une semaine de pause dans mon projet Yaaap pour cause de mise à sec de Christelle pour antifouling.
Mais je reste déterminé.
A suivre ...
Cordialement   BD
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 30, 2018, 12:07 pm
Bonjour ,
Retour au projet, une petite question:  Yaaa.ino ligne 318.
int pulseWidth = 20 + abs(tillerCmd) * 18 / 10; // Higher command, longer pulse (20 to 200ms).   A quoi correspond le. « *18/10 » ?

Aussi si vous avez une petite explication pour ajuster la réactivité de la commande qui me semble lente même à 200ms. (sur ma table à vérifier en usage après réalisation réelle).   
De même le virement de bord ne semple pas réagir , Le cap commande prend bien +- 100 mais la commande vérin ne suit pas.

Aussi , il me semble que le TB6612 souffre beaucoup (vérin ST4000 dans mon application) , alors ils seront plusieurs dans la réalisation finale, en parallèle et empilés.
Merci
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Mar 30, 2018, 02:16 pm
Le mode classique de variation de vitesse consiste à faire varier le voltage en le découpant (PWM).
Mon vérin de ST2000 n'est pas très puissant et j'ai été déçu par mes premiers essais en mode PWM. J'ai opté pour des impulsions en 12V mais de durée variable (de 20ms à 200ms ou en continu).
Si ma commande est calculée à 50%, au lieu d'envoyer 6V (12 x 0.50), j'envoie 12V pendant 100ms.
Pour une commande à 100%, la durée de 200ms se traduit par 12V en continu jusqu'au calcul suivant. Avec un recalcul environ toutes les 200ms.

Avec un vérin plus puissant, il faut sans doute revoir tout cela et passer en mode PWM classique. un voltage faible pour de petits écarts et pleine puissance pour des écarts conséquents.
Il faut alors un autre driver pour le moteur les petits TB6612 sont limité à 1A par canal, soit 2A au total.
J'avais testé un BTN7970B avec succès mais une inversion de voltage fatale m'a fait essayer les petits TB6612 qui sont suffisants pour mon besoin. Le BTN est ancien mais en baisse sur ebay (chercher BTS7960B H-bridge, env 7$).

Le coeur du calcul est ici
  cmd = Kp * headingError + (Kd * deltaError) * 1000 / deltaTime;

La commande (-100 à 100) est la somme de l'erreur de cap et de la variation de l'erreur par le temps avec des coefficients Kp et Kd pour le réglage.
Kp est le coefficient "proportionnel" qui permet de régler l'influence de l'erreur de cap.
Kd est le coefficient pour la variation de l'erreur.
Quand l'erreur se réduit, le deltaError s'inverse, le bateau revient vers son cap et la commande doit déjà tendre à s'inverser.

J'étais parti d'un calcul PID mais le résultat n'était pas bon. De manière empirique, j'ai abouti à ce mode avec commande calculée sur des valeurs lissées sur 200ms.

Il faut augmenter Kp et Kd pour augmenter le gain et la réactivité, respectivement sur l'écart et sur la variation de l'écart.

Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 30, 2018, 04:36 pm
Magnifique,   
Il me faudra quelques temps pour assimiler ces informations qui sont très claires, merci encore.   
Pour le pont en H, le Tb6612 supporte OK le  vérin ST4000 (qui est proche du ST2000 avec 2,5A en blocage)   Mais le TB6612 chauffe BEAUCOUP .
Pour éviter sa protection thermique qui ne prévient pas , et comme je dispose de plusieurs modules ,j' en installerai 2 ou 3 en ||  (avec »stackable header » ).
Après ...           Pour l'instant  je préfère monter les marchés une par une.

Mais A quoi correspond le. « *18/10 » ?   
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Mar 30, 2018, 05:29 pm
Le 18/10 est une simple astuce pour éliminer des valeurs trop basses.
J'évite les impulsions de moins de 20ms.

Si la formule était
pulseWidth = abs(tillerCmd) * 2
le résultat irait de 0 à 200.

Avec la formule
pulseWidth = 20 + abs(tillerCmd) * 18/10
le résultat va de 20 à 200.

Si la commande est nulle, on ne passe pas par là et le vérin reste en standby.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Mar 30, 2018, 06:25 pm
C'est clair.
Enfin il me reste à comprendre un peu plus (donc à y travailler ) , puis construire la version réelle.   
Mais vous m'avez permi de bien progresser.   MERCI. BD
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Apr 02, 2018, 07:16 pm
Bonjour,
Ayant écrit précédemment que le TB6612 chauffait beaucoup avec mon vérin ST4000, je me dois de corriger cette information qui est fausse.  En effet il y avait une inversion D7 D8 … Après correction, cela fonctionne beaucoup mieux.
Je suis très Impressionné par ce minuscule TB6612 NG !

En ce qui concerne setupMenu.ino, et après plusieurs essais, une solution donne un bon résultat.   Ce n'est théoriquement pas correct, et je ne comprends pas réellement pourquoi cela fonctionne, mais cela fonctionne.
ligne 91        'u' par 'd'
ligne94         'd' par 'u'
ligne 153      'd' par 'u'
ligne  156     'u' par 'd'   
Peut-être avez-vous une solution plus élégante ?

Cordialement   BD
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Apr 03, 2018, 10:35 am
l'ordre des boutons 1/2/3 ou up/set/down est modifiable en fonction du montage en boitier.

Il est possible de changer l'ordre des boutons à plusieurs endroits. Soit échanger les connexions physiques sur A1, A2, A3, soit échanger A1 et A3 dans le code, soit changer le code dans upClick() et downClick()...
Title: Re: yaaap, un pilote automatique pour bateau
Post by: BDA343 on Apr 03, 2018, 01:00 pm
Merci. 
Mais mon problème était d'obtenir un comportement homogène:
Bouton de gauche « descent » et bouton de droite « monte » à chaque niveau du menu.   Or ce n'était pas le cas avant modification et je ne l'explique pas ?
Les modifications apportées ne sont pas logiques...  mais fonctionnent ?
Il doit y avoir des ++ et - - antagonistes quelque part.
Enfin, en attendant la livraison de pièces qui me manques ,  j'experimente avec des Kp et kd divers (jusqu'a 100 ) et commence à mieux comprendre le  PID.
A suivre
Title: Re: yaaap, un pilote automatique pour bateau
Post by: boss_the_best on May 29, 2018, 07:33 pm
bonjour a tous ,

je viens de trouver votre forum tres interessant.
je planche aussi sur un projet similaire .
j'ai rencontré une partie des memes probleme que vous .
j'ai en partie resolus certain point .

comme capteur de magnitude , j'utilise un cmps11 ==> pas de probleme de stabilité a la gite .
comme pont h j'ait un ibt2 ==> aucune chauffe .
je dois en + gerer un clutch  , le verin est un type 1 .

je pense m'inspirer du yaaap pour ce faire .

y a t-il un interet a utiliser un accelerometre et le gyroscope vu qu'il n'y a pas de deviation avec la gite sur mon capteur ?



Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on May 29, 2018, 08:05 pm
Le cmps11 semble intéressant et résout le gros problème de filtrage, fusion etc pour obtenir ce cap compas. Il fait tout le calcul de fusion avec son propre gyro et accéléromètre.
Mon yaaap fonctionne mais reste perfectible.
Si je devais partir de zero aujourd'hui je commencerais par essayer le pypilot (pypilot.org). Installable sur un Raspberry Pi Zero (moins cher que le cmps11).
Voir https://github.com/pypilot/pypilot/wiki/autopilot_computer (https://github.com/pypilot/pypilot/wiki/autopilot_computer) ou pypilot.org
Il utilise un mpu9250 mais ce serait sans doute plus simple (et un poil plus cher) avec un cmps11.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: MICROTECH on Jul 01, 2018, 05:28 pm
Bonjour à vous tous,
je termine la lecture de votre projet YAAAP en diagonale...et ne comprends pas votre choix de PA qui utilise uniquement le cap magnétique...un peu comme un barreur me direz vous. Vous constatez des erreurs et souvent cumulatives...alors pourquoi ne faites vous pas appel à une carte GPS de type OLIMEX

https://www.olimex.com/Products/Modules/GPS/MOD-GPS/

qui comporte une bonne antenne avec transmission de la trame texte NMEA sur liaison série...pour les erreurs COMPAS, utilisons les satellites  ou les étoiles non ? à vous lire. Votre projet est passionnant ! Gilles
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Jul 01, 2018, 06:25 pm
Ce pilote n'utilise pas seulement le cap magnétique mais la fusion des infos compas-accéleromètre-gyroscope.
Si tu fait un tour sur toi même, pour le gps, tu n'auras pas bougé.
Quand une vague pousse l'étrave de quelques degrés, il faut réagir à la barre avant de détecter un changement de route. C'est primordial en voilier.
Le gps est pertinent dans le logiciel ou la centrale de nav pour transmettre le cap au pilote.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: pako44444 on Aug 22, 2018, 04:17 pm
Bonjour FilBip,

Votre projet yaaap m'intéresse beaucoup! J'avais un pilote autohelm avec vérin type1 qui tombait régulièrement en panne. J'ai gardé le vérin qui fonctionne (avec embrayage).
A lire les post, le capteur cmps11  semble préférable, mais adaptation difficile ?
J'ai de la peine à trouver les éléments hard (sauf en chine mais avec des longs délais), vous auriez une piste?
J'ai en stock une arduino uno, compatible?
Merci pour votre partage!
Cordialement
Pascal
Title: Re: yaaap, un pilote automatique pour bateau
Post by: FilBip on Aug 27, 2018, 11:52 am
Bonjour Pako44444, un arduino uno fera l'affaire comme n'importe quel clone d'Arduino.
pour le vérin type 1 il faudra un contrôleur (pont H) plus costaud. Un IBT-3 ou 4 par exemple ou utiliser un driver de type ESC pour moteur classique (brushed) comme le Pypilot sur pypilot.org (à base Raspberry PI).
Il faudra aussi modifier mon code pour passer en mode PWM. Avec mon petit vérin, je n'envoie que des impulsions de 12V mais avec le type 1 plus puissant, il faudrait varier la puissance pour plus de progressivité.

Title: Re: yaaap, un pilote automatique pour bateau
Post by: pako44444 on Sep 21, 2018, 03:49 pm
Bonjour FilBip,

Je reviens vers vous après avoir bien progressé mais j'ai un souci avec le driver moteur. J'ai directement utilisé un ibt-2 (que j'ai testé avec une petite routine et qui fonctionne) mais rien ne se passe avec yaaap et le petit moteur que j'ai branché pour une simulation.
Est-ce que vous aviez testé votre programme avec : #define MOTORDRIVER 1 // BTN7970B   ?

Quand j'utilise DEBUG j'ai un message d'erreur avec :"lcd.print(tillerCmd);"


Est-ce que vous pourriez m'expliquer un peu KP , KD et deadband ?

Bien cordialement
Pascal

Title: Re: yaaap, un pilote automatique pour bateau
Post by: pako44444 on Oct 03, 2018, 05:13 pm
Bonjour,

J'ai relu les messages du forum et trouvé les réponses pour KP, KD,...  :))
Le moteur tourne mais j'ai dû remplacer analogWrite(RPWM, HIGH); par analogWrite(RPWM, 255);
Je vais attaquer le PWM.
Et j'ai branché R_EN et L_EN directement à VCC. Est-ce qu'il y a un intérêt à les utiliser?
A quoi sert la variable pulseState ?
Pascal

PS j'ai parfois des erreurs vraiment bizarre de linkage, suis-je le seul?
Title: Re: yaaap, un pilote automatique pour bateau
Post by: RadioG on Nov 26, 2018, 01:57 am
MERCI.  Merci de votre réponse rapide

Test avec MPU9250BasicAHRC retourne :

MPU9250 I AM 73 I shoud be 71

Ooups, la version sur Github a la calibration en commentaire.
Dans setupMenu.ino:
      case 4: //Calibration
//          compassCalibration();
Bonsoir à tous,
Pourriez vous me donner le lien du dépot MPU9250BasicAHRC sur Github que je ne trouve pas?
Merci.
Title: Re: yaaap, un pilote automatique pour bateau
Post by: pako44444 on Dec 03, 2018, 02:50 pm
Bonjour,

J'ai bien progressé, on peut dire que ça marche! Si ça peut aider qlq'un...

Les erreurs de linkage ont disparu en utilisant une version précédente de l'environnement (Arduino 1.8.5)
Le capteur cmps12 est nettement plus stable et facile à utiliser que le MPU9250
voila un lien pour tester le capteur:  https://www.robot-electronics.co.uk/files/arduino_cmps12_i2c.ino
En baissant la valeur de COMMAND_INTERVAL à 20  j'ai qlq chose de plus dynamique.

Merci encore à FilBip pour le partage

Bonne navigation
Title: Re: yaaap, un pilote automatique pour bateau
Post by: dailyroach on Apr 04, 2019, 09:48 am
Bonjour,

J'ai relu les messages du forum et trouvé les réponses pour KP, KD,...  :))
Le moteur tourne mais j'ai dû remplacer analogWrite(RPWM, HIGH); par analogWrite(RPWM, 255);
Je vais attaquer le PWM.
Et j'ai branché R_EN et L_EN directement à VCC. Est-ce qu'il y a un intérêt à les utiliser?
A quoi sert la variable pulseState ?
Pascal

PS j'ai parfois des erreurs vraiment bizarre de linkage, suis-je le seul?

Hi apology for using English I am trying to get this autopilot working but i need an example of the code and wiring you used to get your IBT-2 To function pictures would also help .

many thanks 
Title: Re: yaaap, un pilote automatique pour bateau
Post by: dailyroach on Apr 06, 2019, 09:12 am
I ended up going back to using the smaller motor controller and got " Tillerpush" and "Tillerpull" to function.

with debug on in standby mode MOTOR 100 and MOTOR -100 are displayed when manually driving the linear actuator using the buttons .

However when in RUN mode LCD displays MOTOR 0 and changing the position of the compass sensor results in the same so the actuator does not move .

Any ideas on what i might be missing I feel so close to getting this working

TIA
Title: Re: yaaap, un pilote automatique pour bateau
Post by: boss_the_best on May 20, 2019, 01:13 pm
pako44444 ,

Peux-tu placer une mise a jour du code avec un cmps12 ?

Merci
Title: Re: yaaap, un pilote automatique pour bateau
Post by: PtitDem on Aug 19, 2019, 09:51 pm
Bonjour à tous ,
Je suis tombé par hasard sur ce projet que je lis avec attention depuis un bon moment étant donné que je suis novice dans le domaine de l'Arduino ainsi que dans la programmation.
Alors j'ai commencé à apprendre sur le net mais là le niveau est vraiment trop élevé pour moi.
Ceci dit , j'ai quand même construit le Yaaap et il donne de bons résultats dans un premier temps .

J'ai quand même un soucis car le programme se bloque par moment ( en fonctionnement) et le capteur mou perd le nord par moment , les valeurs s'agitent et le bateau dévie de 90° .
Quand la mer bouge trop il a du mal a tenir Le Cap et commence à faire des rond dans l'eau mais cela devrait se résoudre en augmentant la cadence des impulsions. 
Title: Re: yaaap, un pilote automatique pour bateau
Post by: PtitDem on Aug 19, 2019, 09:57 pm
Un grand merci à Filbip pour ce projet et le partage, ainsi qu'à tous les autres qui ont fait vivre ce projet , ce qui m'a énormément aider à comprendre le fonctionnement.

J'ai aussi remarqué que le programme se bloque quand la VHF est en émission,  et la boussole perd le nord quand je croise un autre bateau , même d'assez loin.

En fait j'en conclue que les problèmes viennent de parasites extérieurs mais je ne sais pas comment les atténuer.

Peut-être une idée ??
Title: Re: yaaap, un pilote automatique pour bateau
Post by: PtitDem on Sep 19, 2019, 01:55 pm
Bonjour , mes post précédents étant restés sans réponse je ne sais pas si ce fil est encore suivi .
Je n'arrive pas à faire évoluer la situation malgré des essais de réglages,  Le Cap s'affole encore par moment.

Est-il impératif de faire une calibration à la première mise en route ??

Sans aide , je me verrai dans l'obligation d'abandonner le projet .
Dommage , j'y ai mis beaucoup d'efforts et passé beaucoup de temps mais mes connaissances sont vraiment trop faibles .

Cordialement.