Les gyroscopes sont utilisés comme capteur de position angulaire, alors que les gyromètres sont des capteurs de vitesse angulaire. Le gyroscope donne la position angulaire (selon un ou deux axes uniquement) de son référentiel par rapport à un référentiel inertiel (ou galiléen). Lire la suite…
L’obtention de l’angle peut être donc réaliser en utilisant l’intégration numérique de la vitesse angulaire. Dans ce tuto on va utiliser la technique de Simpson pour intégrer une fonction. La technique est analogue à la moyenne glissante d’une fonction sur 3 échantillons (voir la figure ci-dessous).
La fonction AngleGyro() permet de convertir les données bruts issues du gyroscope en angles dans les trois axes. Elle est basée sur l’intégration de Simpson dans l’axe x, y et z. Ci-dessous les étapes de la mesure des angles :
Calcul des valeurs réelles (division par la sensibilité)
La période d’intégration est l’inverse de la période d’échantillonnage! Elle doit Être assez grande pour une bonne intégration et assez petite pour un système rapide!
// 2.2 Mise à jour des échantillons xyz[0][1]=xyz[0][0]; xyz[0][0]=x;
xyz[1][1]=xyz[1][0]; xyz[1][0]=y;
xyz[2][1]=xyz[2][0]; xyz[2][0]=z;
// 3. Conversion des angles du Radian en degré GyPitchRol[0] = X * (180.0/PI); GyPitchRol[1] = Y * (180.0/PI) ; GyPitchRol[2] = Z * (180.0/PI) ; }
A retenir
L’action proportionnel est facile à mettre en pratique. Elle ne nécessite pas la connaissance des paramètres physiques du système pour effectuer la commande (Wn, dépassement, etc.). Elle est utilisée pour augmenter la rapidité du système et réduire un peu l’erreur statique (k>1). En revanche elle a tendance à déstabiliser le système.
La mesure de l’ange basé sur l’accélération semble inefficace. Le capteur est très sensible aux vibrations durant le décollage du drone. Les mesures sont inutiles face aux vibrations des moteurs. En revanche, la mesure de l’angle par le gyroscope reste peu sensible aux bruits des vibrations. On peut encore améliorer la stabilité des mesure en utilisant une moyenne glissante (voir le tuto). On maintient la mesure par le Gyro dans les tutos à venir pour l’asservissement de l’angle.
Une intégration numérique d’ordre supérieur (plus de points) peut être utilisée pour réduire naturellement l’effet du bruit !
L’action (P) n’améliore pas la stabilité du drone. On verra dans le tuto prochain l’action PI et avance de phase.
Servo M1, M2; double Vitesse_M1,Vitesse_M2; long GyAccTemp[NumData]; double PitchRoll[3];
double x_nn=0.0; // Consigne de l'Angle à l'équilibre (Fixe: 0°)! double V0=40.0; // Consigne de la Vitesse (Variable par l'utilisateur: Télécommande) double y_n; double eps_n; // Erreur double y_capt; // Sortie du capteur double y_corr; // Sortie du correcteur
// Variables internes du système double x1[2], y1[3];
// Variables internes du correcteur double x_c[2], y_c[2];
void setup() { // Init module GY-512 // 1. Horloge interne: 8MHz Wire.begin(); // Début transmission Wire.beginTransmission(MPU); // Adresse du Module Wire.write(0x6B); // Adresse du registre de control Wire.write(0); // Valeur Wire.endTransmission(true); // Fin de transmission delay(10); // Retard avant la nouvelle transmission
// 3. Soustracteur: Calcul de l'erreur eps(n) eps_n=x_nn-y_capt;
// 4. Correcteur P (voir le lien en commentaire) const double k0=0.03; y_corr= k0*eps_n;
// 5. Définition de consigne de la vitesse V0 (0(0%, 180(100%)) V0=V0+0.01; if (V0> 110.0) V0=V0-0.01;
// 6.1 Mise à jour de la vitesse Vitesse_M1=V0-y_corr; Vitesse_M2=V0+y_corr;
// 6.2. Réglage du Problème de Saturation et Valeurs <0 const double Vmax=180.0; // Rapport Cyclique Maximal Vitesse_M1=Vmax*tanh(abs(Vitesse_M1)/Vmax); Vitesse_M2=Vmax*tanh(abs(Vitesse_M2)/Vmax);
// 6.3 Affection des vitesses aux Moteurs M1.write(Vitesse_M1); M2.write(Vitesse_M2);
// Affichage: Vérification du Module GY-512 (A commenter) Serial.print(y_corr); Serial.print(","); Serial.println(-y_corr); Serial.print(","); //Serial.println(y_capt);
// Lecture des données des capteurs sans Corrections void ReadGY521_0( long *GyAccTempp) { long GATCorr_0[NumData]={0,0,0,0,0,0,0}; ReadGY521(GyAccTemp,GATCorr_0); }
// Lecture des données des capteurs avec Corrections void ReadGY521( long *GyAccTempp, long *GATCorrr) { // Init du module GY-521 Wire.beginTransmission(MPU); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU,14,true);
// 2.2 Mise à jour des échantillons for(int i=0; i<3; i++) { xyz[0][i+1]=xyz[0][i]; xyz[1][i+1]=xyz[1][i]; xyz[2][i+1]=xyz[2][i]; } xyz[0][0]=x; xyz[1][0]=y; xyz[2][0]=z;
// 3. Conversion des angles du Radian en degré GyPitchRol[0] = X * (180.0/PI); GyPitchRol[1] = Y * (180.0/PI) ; GyPitchRol[2] = Z * (180.0/PI) ; }
Découvrez notre Chaîne YouTube "Ingénierie et Projets" Découvrez notre Chaîne Secondaire "Information Neuronale et l'Ingénierie du Cerveau" Broché: 230 pages Date de publication : 2 juillet 2023 Collection : Arduino Langue : Français ISBN-10: 8397581509 ISBN-13: 9798397581509 Dimensions du produit: 17,8 x 2,1 x Lire la suite…
Découvrez notre Chaîne YouTube "Ingénierie et Projets" Découvrez notre Chaîne Secondaire "Information Neuronale et l'Ingénierie du Cerveau" Objectifs du projet Comprendre l’architecture matérielle du système Savoir le schéma de puissance de la partie motorisée Savoir Lire la suite…
Découvrez notre Chaîne YouTube "Ingénierie et Projets" Découvrez notre Chaîne Secondaire "Information Neuronale et l'Ingénierie du Cerveau" Objectifs du projet Savoir les composantes dans d’un ascenseur Savoir le principe de fonctionnement d’un ascenseur Les Lire la suite…
Gérer le consentement aux cookies
Nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations relatives aux appareils. Nous le faisons pour améliorer l’expérience de navigation et pour afficher des publicités (non-)personnalisées. Consentir à ces technologies nous autorisera à traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines fonctonnalités et caractéristiques.
Fonctionnel
Toujours activé
Le stockage ou l’accès technique est strictement nécessaire dans la finalité d’intérêt légitime de permettre l’utilisation d’un service spécifique explicitement demandé par l’abonné ou l’utilisateur, ou dans le seul but d’effectuer la transmission d’une communication sur un réseau de communications électroniques.
Préférences
L’accès ou le stockage technique est nécessaire dans la finalité d’intérêt légitime de stocker des préférences qui ne sont pas demandées par l’abonné ou l’internaute.
Statistiques
Le stockage ou l’accès technique qui est utilisé exclusivement à des fins statistiques.Le stockage ou l’accès technique qui est utilisé exclusivement dans des finalités statistiques anonymes. En l’absence d’une assignation à comparaître, d’une conformité volontaire de la part de votre fournisseur d’accès à internet ou d’enregistrements supplémentaires provenant d’une tierce partie, les informations stockées ou extraites à cette seule fin ne peuvent généralement pas être utilisées pour vous identifier.
Marketing
Le stockage ou l’accès technique est nécessaire pour créer des profils d’utilisateurs afin d’envoyer des publicités, ou pour suivre l’utilisateur sur un site web ou sur plusieurs sites web ayant des finalités marketing similaires.
0 commentaire