Leçon précédenteAccueil du tutorielLeçon suivante

Lien d’achat

Acheter chez OSOYOO Acheter aux États-Unis

Sommaire


1Objectif

Ce tutoriel explique comment améliorer les capacités autonomes de la voiture robot OSOYOO V3 en utilisant le module MPU6050 (IMU) pour maintenir un cap souhaité. Le MPU6050, capteur de mouvement à 3 axes, fournit des données de vitesse angulaire (gyroscope) et d’accélération linéaire (accéléromètre), permettant au robot de corriger activement sa trajectoire. Cette leçon couvre les techniques de fusion de capteurs et les algorithmes de contrôle PID pour une conduite en ligne droite stable.Voiture robot OSOYOO V3 pour Arduino avec gyroscope MPU6050

2Composants nécessaires

Pour cette leçon, vous avez besoin du composant suivant. Assurez-vous de l’avoir sous la main avant de commencer.

Image Composant Qté Accessoires Lien
1 Module gyroscope MPU6050 à 3 axes Gyroscope MPU6050 à 3 axes 1 Cliquez ici pour acheter

3MPU6050 : Principes de fonctionnement

Le MPU6050 intègre un gyroscope à 3 axes et un accéléromètre à 3 axes. Le gyroscope mesure la vitesse angulaire, fournissant des informations sur la vitesse de rotation du robot autour de ses axes X, Y et Z. L’intégration de ces données dans le temps donne le déplacement angulaire (par exemple, l’angle de lacet). Cependant, les données brutes du gyroscope sont sujettes à une dérive, c’est-à-dire qu’elles accumulent de petites erreurs au fil du temps. L’accéléromètre mesure l’accélération linéaire, ce qui permet de déterminer l’orientation du capteur par rapport à la gravité. Bien que stables sur de longues périodes, les accéléromètres sont très sensibles aux vibrations et aux brusques mouvements, ce qui rend leurs données d’orientation brutes bruitées.
Module gyroscope MPU6050 monté sur la voiture robot OSOYOO V3

4Installation matérielle

Étape 1 : Effectuez le montage matériel de base décrit dans la leçon 1 de la voiture robot. Si vous avez déjà terminé la leçon 1, laissez tout en l’état.

Assemblage du châssis de base de la voiture robot OSOYOO V3

Étape 2 : Fixez solidement le module MPU6050 sur le châssis du robot comme indiqué ci-dessous. (Le MPU6050 communique avec l’Arduino via le protocole I2C, qui ne nécessite que deux lignes de données : SDA (Serial Data) et SCL (Serial Clock), ainsi que l’alimentation (VCC) et la masse (GND).)

Schéma de câblage du MPU6050 pour la voiture robot OSOYOO V3 Arduino

 

5Installation logicielle

Logiciel Arduino
open-source (IDE)
Logo Arduino IDE Télécharger le logiciel ici :
https://www.arduino.cc/en/Main/Software?setlang=en
7-Zip est un utilitaire gratuit
pour extraire les fichiers ZIP
Logo 7-Zip Télécharger 7-Zip gratuitement :
https://www.7-zip.org/

1. Configuration de l’Arduino IDE : Téléchargez et installez la dernière version de l’Arduino IDE depuis https://www.arduino.cc/en/Main/Software?setlang=en.

Installation de l'Arduino IDE
2. Téléchargement du code d’exemple : Téléchargez le code d’exemple pour la leçon 2 ici. Décompressez le contenu et vous trouverez un fichier nommé v3car-lesson2.ino dans un dossier appelé v3car-lesson2. Ouvrez v3car-lesson2.ino dans l’Arduino IDE.

Ouvrir le code d'exemple dans l'Arduino IDE

3. Installation des bibliothèques
Commencez par télécharger les fichiers ZIP des bibliothèques depuis les liens ci-dessous :
https://osoyoo.com/driver/2wd/MPU6050_light.zip
https://osoyoo.com/driver/2wd/PID.zip
Ne décompressez pas ces fichiers. Ouvrez l’Arduino IDE -> Croquis -> Inclure une bibliothèque -> Ajouter la bibliothèque .ZIP. Ajoutez les fichiers ZIP à l’Arduino IDE un par un.

Ajouter une bibliothèque ZIP dans l'Arduino IDE

4. Sélection du board et du port : Connectez le OSOYOO Basic Board (compatible avec Arduino UNO) à votre ordinateur via un câble USB (Important : assurez-vous que l’interrupteur de la voiture robot est éteint et que la batterie est déconnectée avant de connecter le board à votre PC). Lancez l’Arduino IDE. Allez dans Outils > Type de carte et sélectionnez Arduino Uno. Puis allez dans Outils > Port et sélectionnez le port série correct. En cas de doute, consultez le gestionnaire de périphériques de votre système d’exploitation.

Sélectionner le board et le port dans l'Arduino IDE

5. Téléversement du code : Cliquez sur le bouton « Téléverser » (icône flèche vers la droite) pour compiler et téléverser le sketch sur le OSOYOO Basic Board.

Téléverser le code sur le board Arduino

6. Vérifier si Arduino détecte le MPU6050

Ouvrez le Moniteur série (coin supérieur droit de l’Arduino IDE), réglez la vitesse de transmission sur 9600, et vous devriez voir MPU6050 Found! comme illustré ci-dessous. Félicitations ! L’Arduino détecte le MPU6050 — vous pouvez maintenant tester la voiture.

Moniteur série Arduino affichant MPU6050 Found

Remarque : Si vous voyez « Failed to find MPU6050 chip », il y a un problème de câblage. Vérifiez que :
1) Les broches VCC/GND/SDA/SCL du MPU6050 sont correctement connectées au shield OSOLINK Wi-Fi/BLE I/O conformément à nos instructions
2) Les broches A4/A5 et SDA/SCL de l’Arduino n’ont pas d’autres câbles connectés (dans les projets de suivi de ligne, A4/A5 peuvent déjà être utilisées par le capteur de suivi)

6Tester la voiture


Posez la voiture sur le sol et allumez l’alimentation. La voiture marque une courte pause pendant que l’Arduino initialise le gyroscope. Elle avance ensuite en ligne droite. Si vous la poussez du pied pour la faire dévier de sa trajectoire, elle se corrige automatiquement et reprend sa direction initiale.

7Brève explication des principes et du code

1) Comment la fonction Move() contrôle-t-elle le déplacement et la direction de la voiture ?
La voiture robot OSOYOO utilise un système de direction différentielle. La fonction move(speedL, speedR) prend deux paramètres, speedL et speedR, représentant respectivement la vitesse de rotation des roues gauche et droite. La valeur de vitesse va de -255 à +255 : une valeur positive indique une rotation vers l’avant, une valeur négative une rotation vers l’arrière. Par exemple, move(-50, 100) signifie que la roue gauche tourne en arrière à la vitesse 50 et la roue droite en avant à la vitesse 100, ce qui provoque un virage serré à gauche.
2) Introduction à la programmation du MPU6050
Après l’initialisation, le gyroscope MPU6050 suit en permanence l’orientation du robot par rapport à sa direction de départ. Lorsque la voiture robot dévie de cette direction initiale, le MPU6050 signale l’écart à l’Arduino.
Dans notre code, la variable Direction représente l’orientation de la voiture au moment où elle est posée sur le sol (on suppose qu’elle est dirigée vers l’avant, donc on définit Direction à 0).
Après les calculs des premières lignes de la fonction loop(), on obtient l’orientation actuelle de la voiture dans la variable currentAngle à la ligne 129.

3) Introduction au PID et au code :

a) L’idée principale : qu’est-ce que le PID ?
Imaginez que vous conduisez une voiture et que votre objectif est de rester parfaitement au centre de votre voie. C’est exactement ce que nous demandons à notre robot : rester sur la ligne « tout droit ».
Le PID est un algorithme de contrôle qui agit comme un conducteur attentif. Il pose continuellement trois questions pour décider comment braquer :
  1. P (Proportionnel) : À quelle distance suis-je du centre de la voie en ce moment ?
  2. I (Intégral) : Ai-je été constamment décentré ces derniers instants ?
  3. D (Dérivé) : Est-ce que je vire trop vite vers le centre ou en m’en éloignant ?

En combinant les réponses à ces trois questions, le contrôleur PID effectue une correction de trajectoire fluide et efficace.

b) Comment la fonction PID fonctionne dans notre code
Relions cette théorie directement à la bibliothèque PID_v1.h et à votre code.
1. Initialisation (dans setup()) :
// We tell the PID controller what to watch and what to control.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

Direction = 0; // Our TARGET is to have an angle of 0 degrees.
myPID.SetMode(AUTOMATIC); // Turn on the controller.
  • &Input : Un pointeur vers notre lecture de capteur. Dans notre code, Input est currentAngle. Le contrôleur PID lit cette valeur en continu.
  • &Output : Un pointeur vers notre résultat. Le contrôleur PID écrit la valeur de correction calculée dans la variable Output.
  • &Direction : Un pointeur vers notre cible. On veut aller tout droit, donc on le définit à 0.
2. La boucle principale (dans loop()) :
// 1. We get the sensor reading and put it into the Input variable.
Input = currentAngle; 

// 2. We call the compute function. This is where the PID magic happens!
myPID.Compute(); 

// 3. We use the result to control the motors.
int speedL = baseSpeed - Output;
int speedR = baseSpeed + Output;
move(speedL, speedR);
La fonction myPID.Compute() effectue tout le travail en interne. Chaque fois qu’elle est appelée (la bibliothèque gère le timing via SetSampleTime), elle :
  1. Lit la valeur de la variable Input (currentAngle).
  2. Calcule l’erreur : error = Direction - Input.
  3. Calcule le terme Proportionnel (Kp * error).
  4. Calcule et ajoute le terme Intégral (Ki * accumulated_error).
  5. Calcule et ajoute le terme Dérivé (Kd * rate_of_error_change).
  6. Additionne tout pour obtenir la valeur de correction finale.
  7. Écrit cette valeur finale dans la variable Output.
Ainsi, si Output est +15, cela signifie que le robot a besoin d’une correction de 15 unités. On l’applique en ralentissant un moteur (baseSpeed - 15) et en accélérant l’autre (baseSpeed + 15), ce qui fait tourner le robot et réduit son erreur. Si le robot va parfaitement tout droit, Input sera 0, l’erreur sera 0 et Output sera 0, donc les deux moteurs tournent à baseSpeed.

4) Régler Kp, Ki et Kd pour un déplacement stable

  1. Pour commencer : Définissez Ki = 0.0 et Kd = 0.0 dans votre code.
  2. Trouvez une valeur de Kp stable qui n’oscille pas (ou à peine). Elle sera probablement inférieure à 1,5.
  3. (Optionnel mais recommandé) Ajoutez une zone morte d’environ 0,5 degré à votre boucle pour ignorer le bruit du capteur.
  4. Une fois Kp stable, augmentez lentement Kd pour réduire tout dépassement résiduel.
  5. Enfin, augmentez lentement Ki pour éliminer la dérive à long terme.

 

8Considérations avancées et dépannage

En suivant ces recommandations et en comprenant les principes sous-jacents, vous pouvez transformer la voiture robot OSOYOO V3 en une plateforme performante pour la navigation autonome, posant ainsi les bases de projets robotiques plus avancés.

Leçon précédenteAccueil du tutorielLeçon suivante