ssi_elec_asservissement_mbot
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| ssi_elec_asservissement_mbot [2025/11/29 14:48] – mistert2 | ssi_elec_asservissement_mbot [2025/12/08 11:22] (Version actuelle) – [Étape 2 : Action PI] mistert2 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | # TP – Asservissement en distance du mBot avec correcteur | + | ===== TP – Asservissement en distance du mBot : Correcteur |
| - | ## 🎯 Objectifs | + | ==== Objectifs |
| - | - Comprendre | + | |
| - | - Utiliser | + | |
| - | - Découvrir | + | * Étudier séparément |
| - | - Expérimenter | + | |
| - | - Analyser | + | * Interpréter |
| - | --- | + | ==== Prérequis ==== |
| - | ## 🛠 Matériel nécessaire | + | Lirairie |
| - | - mBot ou carte mCoreLite avec capteur ultrason | + | |
| - | - Arduino IDE ou mBlock (selon le matériel) | + | |
| - | - Un obstacle (mur, boîte, livre) | + | |
| - | - Une règle ou un mètre | + | |
| - | --- | + | ==== Activité===== |
| - | ## 1) Principe général de l’asservissement | + | {{ https:// |
| - | Le robot doit se stabiliser | + | Forcer le mBot à suivre une cible à 20 cm de distance. |
| - | On définit une **erreur** : | + | ==== 1) Principe général de l’asservissement ==== |
| + | Le robot doit se stabiliser à **20 cm** de l’obstacle. | ||
| + | |||
| + | L’erreur est définie par : | ||
| <mt> | <mt> | ||
| - | e = D_{\text{mes}} - D_{\text{cons}} | + | e = D_{mes} - D_{cons} |
| </mt> | </mt> | ||
| - | - **e > 0** : le robot est trop loin → il doit avancer | + | |
| - | - **e < 0** : le robot est trop près → il doit reculer | + | * si e < 0 → le robot est trop près → reculer |
| - | + | ||
| - | La commande se calcule via un correcteur PID : | + | |
| + | La commande est donnée par un correcteur PID : | ||
| <mt> | <mt> | ||
| - | v = K_p \, e \;+\; K_i \int e\, dt \;+\; K_d \frac{de}{dt} | + | v = K_p e + K_i \int e\, dt + K_d \frac{de}{dt} |
| </mt> | </mt> | ||
| - | ### 🔹 Rôle des termes | + | ===== Rôle des trois termes |
| - | - **P** : corrige proportionnellement à l’erreur | + | |
| - | - **I** : supprime l’erreur statique mais peut créer | + | |
| - | - **D** : amortit, | + | |
| - | ### 🔹 Filtrage du dérivé | + | ===== Filtrage du dérivé |
| - | Le capteur ultrason étant bruyant, on utilise : | + | Le capteur ultrason étant bruyant, on utilise |
| <mt> | <mt> | ||
| - | d_{\text{filt}} = \alpha \, d_{\text{filt}} + (1-\alpha)\, | + | d_{filt} = \alpha\, d_{filt} + (1 - \alpha)\, \frac{e - e_{prev}}{dt} |
| </mt> | </mt> | ||
| - | ### 🔹 Anti-windup (limitation de l'intégrale) | + | ===== Anti-windup (limitation de l’intégrale) |
| <mt> | <mt> | ||
| - | I = \mathrm{clip}(I + e\,dt,\; -I_{\max},\; I_{\max}) | + | I = \mathrm{clip}(I + e\,dt,\; -I_{max},\; I_{max}) |
| </mt> | </mt> | ||
| - | Et reset si changement de signe : | + | Reset si inversion du signe de l’erreur |
| <mt> | <mt> | ||
| - | e \cdot e_{\text{prev}} < 0 \;\Rightarrow\; I = 0 | + | e \cdot e_{prev} < 0 \Rightarrow I = 0 |
| </mt> | </mt> | ||
| - | ### 🔹 Saturation | + | ===== Saturation moteurs |
| <mt> | <mt> | ||
| v = | v = | ||
| \begin{cases} | \begin{cases} | ||
| - | V_{\max} & \text{si } v > V_{\max} \\ | + | V_{max} & \text{si } v > V_{max} \\ |
| - | -V_{\max} & \text{si } v < -V_{\max} \\ | + | -V_{max} & \text{si } v < -V_{max} \\ |
| v & \text{sinon} | v & \text{sinon} | ||
| \end{cases} | \end{cases} | ||
| </mt> | </mt> | ||
| - | ### 🔹 Vitesse | + | ===== Zone de vitesse |
| <mt> | <mt> | ||
| - | |v| < V_{\min} \;\Rightarrow\; | + | |v| < V_{min} \Rightarrow v = |
| - | v = | + | |
| \begin{cases} | \begin{cases} | ||
| - | V_{\min} & \text{si } v > 0 \\ | + | V_{min} & \text{si } v > 0 \\ |
| - | -V_{\min} & \text{si } v < 0 | + | -V_{min} & \text{si } v < 0 |
| \end{cases} | \end{cases} | ||
| </mt> | </mt> | ||
| - | --- | + | ---- |
| - | ## 2) Travail demandé | + | ==== 2) Travail demandé |
| - | ### Partie A — Analyse conceptuelle | + | ===== Partie A — Analyse conceptuelle |
| - | 1. Expliquer | + | |
| - | 2. Justifier l’intérêt d’un correcteur | + | * Pourquoi |
| - | 3. Décrire séparément les rôles | + | * Donner le rôle séparé |
| - | 4. Expliquer pourquoi le dérivé | + | * Pourquoi la dérivée |
| - | 5. Expliquer à quoi sert l’anti-windup. | + | * Quel est l’intérêt du mécanisme |
| - | --- | + | ---- |
| - | ## 3) Partie B — Expérimentations | + | ===== Partie B — Expérimentations |
| - | ### 🔹 Étape 1 — Action | + | ==== Étape 1 : Action P seule ==== |
| - | - Mettre | + | |
| - | - Tester plusieurs valeurs de **Kp** : 2, 4, 6, 8… | + | |
| - | - Observer la stabilisation à 20 cm | + | |
| **Questions :** | **Questions :** | ||
| - | - Y a-t-il une erreur statique | + | * Une erreur statique persiste-t-elle ? |
| - | - Le dépassement existe-t-il ? | + | * Y a-t-il un dépassement |
| - | - Le robot oscille-t-il | + | * Le robot oscille-t-il |
| - | --- | + | ---- |
| - | ### 🔹 Étape 2 — Action | + | ==== Étape 2 : Action PI ==== |
| - | - Ajouter | + | |
| + | | ||
| **Questions :** | **Questions :** | ||
| - | - L’erreur statique disparaît-elle ? | + | * L’erreur statique disparaît-elle ? |
| - | - Le comportement | + | * Le robot devient-il plus oscillant ? |
| - | - Que se passe-t-il si Ki est trop grand ? | + | * Que provoque un Ki trop élevé |
| - | --- | ||
| - | ### 🔹 Étape 3 — Action | + | ---- |
| - | - Ajouter un terme **Kd** (ex. 0.5 ou 1.0) | + | |
| + | ==== Étape 3 : Action PID ==== | ||
| + | | ||
| **Questions :** | **Questions :** | ||
| - | - Le dépassement diminue-t-il ? | + | * Le dépassement diminue-t-il ? |
| - | - Le robot est-il plus stable lors de l’approche | + | * La stabilité augmente-t-elle ? |
| - | - Le dérivé amplifie-t-il le bruit ? | + | * Le dérivé amplifie-t-il le bruit ? |
| - | - Le filtrage | + | * Le filtre |
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Partie C — Analyse des données série ===== | ||
| + | |||
| + | Les données typiques affichées : | ||
| + | |||
| + | < | ||
| + | D = distance mesurée | ||
| + | e = erreur | ||
| + | v = commande moteur | ||
| + | I = intégrale | ||
| + | d = dérivée filtrée | ||
| + | </ | ||
| + | |||
| + | **Questions :** | ||
| + | * La commande v se rapproche-t-elle de 0 une fois stabilisé ? | ||
| + | * L’intégrale atteint-elle les limites Imax ? | ||
| + | * Le dérivé filtré est-il stable ou bruité ? | ||
| + | * Observe-t-on un dépassement (overshoot) dans la distance D ? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== 3) Synthèse finale ==== | ||
| + | |||
| + | Rédiger un paragraphe répondant aux questions suivantes : | ||
| + | |||
| + | * Pourquoi P seul ne suffit-il pas ? | ||
| + | * En quoi I améliore la précision mais peut dégrader | ||
| + | * Quel est le rôle du dérivé dans l’amortissement ? | ||
| + | * Quel triplet (Kp, Ki, Kd) est optimal pour VOTRE robot ? (justifier) | ||
| + | * Pourquoi d’un robot à l’autre les réglages diffèrent-ils ? | ||
| + | |||
| + | ---- | ||
| - | --- | + | ==== 4) Bonus facultatif ==== |
| - | ## 4) Partie C — Analyse des courbes | + | * Ajouter une consigne variable via le port série |
| + | * Tracer les courbes | ||
| + | * Tester 10 cm, 20 cm et 30 cm pour analyser la robustesse | ||
| - | Le moniteur série du robot affiche typiquement : | ||
ssi_elec_asservissement_mbot.1764427699.txt.gz · Dernière modification : de mistert2
