Module L21 · Partie I · Robotique et systèmes embarqués
Décider comment bouger : cinématique, planification, commande.
Le robot sait où il est et voit les obstacles. Reste à choisir une trajectoire réalisable, puis à la suivre malgré les perturbations. Ce module relie trois disciplines : la cinématique (comment les moteurs déplacent le robot), la planification de mouvement (trouver un chemin dans un espace continu avec obstacles : RRT, fenêtre dynamique), et la commande (PID revisité, LQR, MPC : la théorie du contrôle que la prépa aborde en SI et que les ingénieurs utilisent partout).
Durée : 4 séances · Prérequis : L10, L12, L16, séances 27-29. Objectifs : modèles cinématiques (différentiel, Ackermann, holonome, bras), espace des configurations, RRT/RRT*, lissage, fenêtre dynamique, suivi de trajectoire (pure pursuit), analyse de stabilité (pôles), LQR, MPC, limites d’actionneurs et sécurité.
Ce que vous saurez faire à la fin
- Écrire la cinématique directe et inverse d’un robot différentiel et d’un bras plan.
- Planifier un chemin sans collision par RRT dans un espace continu.
- Concevoir un LQR pour un pendule inversé et un MPC pour un robot avec contraintes.
- Analyser la stabilité d’une boucle fermée par ses valeurs propres.
Références : Modern Robotics (Lynch & Park, gratuit), Planning Algorithms (LaValle, gratuit), cours « Underactuated Robotics » (Tedrake, MIT, gratuit), Feedback Systems (Åström & Murray, gratuit).
Fiche de cours · Définitions
Planification et contrôle : définitions
Fiche de cours · Formules
Formules à connaître
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (1/2)
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (2/2)
Fiche de cours · Méthodes
Méthodes et pièges
Pièges : dériver un signal bruité sans filtre ; windup de l’intégrale pendant une saturation ; gains réglés sans tenir compte de la période d’échantillonnage (Ki·Ts) ; chemin de A* qui frôle les murs (gonfler par le rayon + marge) ; DWA qui oscille entre deux candidats (hystérésis) ; oublier la non-holonomie (chemin impossible) ; LQR sans contraintes qui demande une commande irréalisable (saturer, ou passer au MPC).
Fiche de cours · Exercices corrigés
Exercices corrigés
01 / Cinématique
Robot différentiel : des vitesses de roues à la trajectoire, et retour
Les familles de robots mobiles
| Type | Commandes | Contrainte | Exemples |
|---|---|---|---|
| Différentiel | v, ω (2 roues) | Non holonome ; tourne sur place | Aspirateurs, TurtleBot |
| Ackermann | v, angle de braquage | Non holonome ; rayon minimal | Voitures |
| Holonome (mecanum, omni) | v_x, v_y, ω | Aucune : peut aller de côté | Robots de logistique |
| Quadrupède / bipède | Couples des articulations | Contacts intermittents, équilibre | Spot, Atlas |
| Drone | 4 poussées | Sous-actionné : 4 entrées pour 6 degrés de liberté | Quadrirotors |
01 / Cinématique
Bras articulé : espace des configurations et espace de travail
La planification se fait dans l’espace des configurations (les angles), pas dans l’espace de travail : un obstacle simple y devient une région compliquée, mais le robot y est un point. Pour un bras à 7 axes, l’espace a 7 dimensions et on ne peut plus le quadriller : il faut échantillonner.
02 / Planifier
RRT : explorer un espace continu par un arbre aléatoire
Pourquoi échantillonner
Le RRT (LaValle, 1998) ne quadrille pas l’espace : il tire des points au hasard et étend l’arbre vers eux. Il est probabilistement complet (s’il existe un chemin, la probabilité de le trouver tend vers 1) et fonctionne en dimension 7, 12 ou 30 — là où A* sur une grille est impossible. Le chemin est mauvais (en zigzag) : d’où le lissage, ou RRT* qui recâble l’arbre pour converger vers l’optimal. Les contraintes cinématiques (voiture qui ne tourne pas sur place) s’intègrent en remplaçant « segment droit » par « arc réalisable » : kinodynamic RRT. En pratique : OMPL (dans MoveIt pour les bras) et les planificateurs de Nav2.
02 / Planifier
Fenêtre dynamique : choisir (v, ω) à chaque instant en simulant
La fenêtre dynamique respecte les limites physiques (accélérations) et réagit aux obstacles imprévus, mais elle est myope : elle peut rester coincée dans un cul-de-sac. D’où l’architecture à deux niveaux de Nav2 (module L20) : planificateur global (A*, RRT) pour la stratégie, planificateur local (DWA, MPPI) pour la tactique et la sécurité. Le score à trois termes est un choix de conception : chaque poids est un compromis.
03 / Contrôler
Suivre une trajectoire : pure pursuit et retour d’état
Du PID au retour d’état
Pure pursuit est un contrôleur géométrique simple et robuste (voitures autonomes DARPA 2005). Plus généralement, un contrôleur est une fonction u = k(x) de l’état vers la commande. Le PID (séance 29) est un retour sur l’erreur et ses dérivée/intégrale ; le retour d’état u = −Kx utilise tout l’état estimé (module L19). La question centrale : comment choisir K pour que le système bouclé soit stable et performant ? Réponse dans les deux slides suivantes.
03 / Contrôler
Stabilité et placement de pôles : où sont les valeurs propres ?
En continu, stable ⇔ parties réelles négatives ; en discret, ⇔ modules < 1. Plus les pôles sont « à l’intérieur », plus la réponse est rapide — mais plus la commande est violente, jusqu’à saturer l’actionneur (et là, l’analyse linéaire ne vaut plus rien : K = [200, 3] est stable sur le papier et diverge en pratique). Le placement de pôles choisit K pour des pôles voulus (formule d’Ackermann) ; le LQR choisit les pôles pour vous, selon un compromis explicite.
03 / Contrôler
LQR : le meilleur compromis entre précision et effort
Riccati = Bellman pour un système linéaire à coût quadratique
Le LQR est l’apprentissage par renforcement (module L16) résolu exactement : la fonction de valeur est quadratique V(x) = xᵀPx, l’équation de Bellman devient l’équation de Riccati, et la politique optimale est linéaire u = −Kx. Il est robuste (marge de gain infinie, marge de phase ≥ 60° en continu), facile à régler (Q et R ont un sens physique), et c’est le contrôleur des fusées, des drones et des Segways. Ses limites : linéaire (autour d’un point de fonctionnement), sans contraintes (la saturation n’est pas vue). Pour cela : MPC.
03 / Contrôler
MPC : optimiser un horizon, appliquer le premier pas, recommencer
Ce que le MPC apporte, et ce qu’il coûte
Le MPC voit les contraintes (actionneurs, obstacles, vitesses max) et l’avenir prévu (trajectoire de référence à venir) ; il gère naturellement le multivariable. C’est le contrôleur des raffineries depuis les années 1980, des voitures autonomes, des quadrupèdes de Boston Dynamics et des fusées SpaceX (atterrissage : MPC convexe). Le coût : résoudre une optimisation à chaque pas (1-100 ms) — d’où les solveurs spécialisés, le code généré (acados, CasADi), et MPPI (module L20 : version par échantillonnage, parallélisable sur GPU). Théorie : stabilité garantie sous conditions (coût terminal, ensemble terminal invariant) — sujet de recherche toujours actif, surtout pour le MPC non linéaire et le MPC appris.
04 / Sécurité
Le contrôleur ne suffit pas : limites, surveillance, arrêts
| Couche | Rôle | Exemple |
|---|---|---|
| Limitation | Saturer vitesses, accélérations, couples avant les moteurs | velocity_smoother, rampe de PWM |
| Bouclier (safety filter) | Modifier au minimum la commande pour rester dans un ensemble sûr | Fonctions barrières de contrôle (CBF), zone de sécurité lidar |
| Surveillance | Détecter capteur en panne, dérive, timeout | NIS (L19), watchdog (L18), chien de garde de commande (arrêt si pas de /cmd_vel depuis 200 ms) |
| Arrêt d’urgence | Matériel, indépendant du logiciel | Bouton coup-de-poing qui coupe l’alimentation des moteurs |
| Vérification | Prouver ou tester massivement avant déploiement | Simulation Monte-Carlo (L11), atteignabilité, preuve (L09) |
Principe : la sécurité ne dépend pas de la qualité du planificateur ni de l’IA. Chaque couche suppose que celle du dessus peut se tromper. Un robot dont la sécurité repose sur un réseau de neurones n’est pas sûr.
Cours
Cours 1 — Systèmes dynamiques linéaires : modèle d’état, discrétisation, réponse
Modèle d’état continu : ẋ = A x + B u, y = C x + D u. x : état (positions, vitesses, courants…), u : commandes, y : mesures. Toute équation différentielle linéaire d’ordre n se met sous cette forme avec n états (masse-ressort : x = (position, vitesse)). Réponse libre : x(t) = eAt x(0), somme de modes eλit ; stable ⇔ Re(λi) < 0.
Discrétisation à période T (le contrôleur numérique n’agit qu’aux instants kT, commande constante entre deux) : xk+1 = Ad xk + Bd uk avec Ad = eAT (exact, scipy.linalg.expm) et Bd = ∫0T eAτ dτ B. Approximation d’Euler : Ad ≈ I + AT, Bd ≈ BT (valable si T ≪ constantes de temps). Les pôles discrets sont zi = eλiT : le demi-plan gauche devient l’intérieur du cercle unité.
| Grandeur | Continu | Discret |
|---|---|---|
| Stabilité | Re λ < 0 | |z| < 1 |
| Rapidité | |Re λ| grand (constante de temps 1/|Re λ|) | |z| petit (proche de 0 : réponse en quelques pas) |
| Oscillation | Im λ ≠ 0 (pulsation) | z complexe (angle = pulsation × T) |
| Commandabilité | rang [B, AB, A²B, …] = n : on peut placer les pôles où l’on veut (sinon, un mode est hors d’atteinte) | |
| Observabilité | rang [C ; CA ; CA² ; …] = n : on peut reconstruire l’état depuis y (sinon, un mode est invisible) | |
Cours
Cours 2 — Exemple travaillé : concevoir un contrôleur de vitesse de moteur, du PID au retour d’état
Ce qu’on retient. Le placement de pôles choisit la dynamique mais pas la commande (saturation possible) ; le LQR équilibre les deux ; un intégrateur est nécessaire pour rejeter une perturbation constante (comme le I du PID). Le vrai PID de la séance 29 est un cas particulier de retour d’état sur (erreur, ∫erreur, dérivée) — la théorie explique pourquoi il marche et comment le régler sans tâtonner.
Cours
Cours 3 — Planification de mouvement : garanties, coûts, et ce que RRT ne dit pas
| Méthode | Complétude | Optimalité | Coût par requête | Contraintes cinématiques | Usage |
|---|---|---|---|---|---|
| Grille + A* | Complète à résolution fixée | Optimale sur la grille | O(cellules log) | Difficiles (états augmentés) | 2D mobile, Nav2 |
| PRM (roadmap probabiliste) | Probabiliste | Asymptotique (PRM*) | Précalcul lourd, requêtes rapides | Moyennes | Bras, environnements statiques, requêtes multiples |
| RRT / RRT-Connect | Probabiliste | Non | Une requête, rapide | Bonnes (kinodynamic) | Bras 7 axes, planification unique |
| RRT* / Informed RRT* | Probabiliste | Asymptotique | Plus lent (recâblage) | Bonnes | Quand la qualité compte |
| Lattice (primitives de mouvement) | Complète sur le lattice | Optimale sur le lattice | Moyen | Exactes (arcs précalculés) | Voitures, Smac Planner |
| Optimisation de trajectoire (CHOMP, TrajOpt) | Locale | Locale | Moyen | Exactes | Lisser/raffiner un chemin initial |
Le coût réel est dans la détection de collision (90 % du temps d’un planificateur) : volumes englobants hiérarchiques (AABB, sphères), distances signées précalculées (L20), et pour un bras, tester chaque segment du bras contre chaque obstacle. Un planificateur est bon d’abord parce qu’il pose peu de questions de collision (RRT-Connect : deux arbres qui se rejoignent, très efficace).
TP guidé
TP — Identification, LQR et MPC sur un vrai moteur, puis un bras planifié (sur carte + PC, 4 h)
- Identification. Sur le robot (séance 27) ou un moteur seul avec encodeur : appliquez une séquence de PWM pseudo-aléatoire (PRBS) pendant 20 s, enregistrez (PWM, vitesse) à 200 Hz. Ajustez un modèle du premier ordre discret vk+1 = a vk + b uk par moindres carrés (L10) ; validez sur un autre enregistrement (erreur RMS, graphe superposé). Estimez la zone morte.
- LQR. Sur le modèle identifié (état augmenté avec l’intégrale de l’erreur), calculez K par Riccati pour trois couples (Q, R) ; simulez avec saturation ; choisissez. Implémentez sur la carte (C, virgule flottante ; le calcul de K se fait hors ligne, seul u = −Kx tourne en temps réel). Comparez au PID de la séance 29 : temps de réponse, dépassement, rejet d’une perturbation (freiner la roue à la main).
- MPC hors ligne puis en ligne. Sur PC : MPC avec contrainte de tension et de pente de commande (Δu ≤ 2 V par pas, pour ménager le pont en H) via
cvxpyouosqp; comparez au LQR saturé. Puis MPC « explicite » : tabulez la loi u(x) sur une grille et embarquez la table sur la carte (interpolation) — le MPC tourne en 10 µs. - Bras et planification. Un bras 2 ou 3 axes (servos) : cinématique directe/inverse ; RRT-Connect dans l’espace des angles avec des obstacles définis dans l’espace de travail ; lissage ; exécution sur les servos avec des profils trapézoïdaux de vitesse (pas de sauts). Mesurez l’erreur de position finale à la règle.
- Sécurité. Bouclier : vitesse max fonction de la distance lidar/ultrason ; arrêt si le microcontrôleur ne reçoit plus de commande depuis 200 ms ; test volontaire des deux.
- Livrable. Dépôt : données d’identification et modèle validé, scripts LQR/MPC avec figures, firmware, vidéo du bras, tableau comparatif PID / LQR / MPC.
Exercices
Exercices auto-corrigés — cinématique et planification
Exercice 1 — Odométrie différentielle et son incertitude
odometrie(pose, ticks_g, ticks_d) : nouvelle pose à partir des ticks d’encodeurs (résolution TICKS_PAR_TOUR, rayon R_ROUE, entraxe L_ESSIEU), par intégration sur un arc exact. Puis incertitude(poses) : simulez 500 trajets « tout droit 2 m » avec ±2 % d’erreur aléatoire sur chaque roue et renvoyez l’écart-type latéral final — il doit être bien plus grand que l’écart-type longitudinal.
Correction
def odometrie(pose, tg, td):
dg, dd = 2 * np.pi * R_ROUE * tg / TICKS_PAR_TOUR, 2 * np.pi * R_ROUE * td / TICKS_PAR_TOUR
d, dth = (dg + dd) / 2, (dd - dg) / L_ESSIEU; x, y, th = pose
if abs(dth) < 1e-9: return np.array([x + d * np.cos(th), y + d * np.sin(th), th])
Rc = d / dth; return np.array([x + Rc * (np.sin(th + dth) - np.sin(th)), y - Rc * (np.cos(th + dth) - np.cos(th)), th + dth])
def incertitude(n=500, distance=2.0, pas=0.05, erreur=0.02):
ticks = pas / (2 * np.pi * R_ROUE) * TICKS_PAR_TOUR; finales = []
for _ in range(n):
pose = np.zeros(3)
for _ in range(int(distance / pas)):
pose = odometrie(pose, ticks * (1 + rng.normal(0, erreur)), ticks * (1 + rng.normal(0, erreur)))
finales.append(pose[:2])
finales = np.array(finales); return finales[:, 0].std(), finales[:, 1].std()Exercice 2 — Profil trapézoïdal de vitesse
profil(distance, v_max, a_max, dt) renvoie les positions échantillonnées d’un mouvement qui accélère à a_max, croise à v_max, décélère à a_max, et s’arrête exactement à distance ; cas triangulaire si v_max n’est pas atteint. C’est ce que fait tout contrôleur de servo/CNC.
Correction
def profil(distance, v_max, a_max, dt=0.01):
v_pic = min(v_max, np.sqrt(distance * a_max)); t_acc = v_pic / a_max; d_acc = 0.5 * a_max * t_acc**2
t_cro = (distance - 2 * d_acc) / v_pic; T = 2 * t_acc + t_cro; t = np.arange(0, T + dt, dt); pos = np.zeros_like(t)
for i, ti in enumerate(t):
if ti < t_acc: pos[i] = 0.5 * a_max * ti**2
elif ti < t_acc + t_cro: pos[i] = d_acc + v_pic * (ti - t_acc)
else: tau = min(T, ti) - t_acc - t_cro; pos[i] = d_acc + v_pic * t_cro + v_pic * tau - 0.5 * a_max * tau**2
pos[-1] = distance; return posExercices
Exercices auto-corrigés — contrôle
Exercice 3 — Régler un PID discret par la méthode et par l’expérience
Sur le modèle de moteur discret vk+1 = 0,98 vk + 0,4 uk (u en volts, saturé ±12), écrivez simuler_pid(Kp, Ki, Kd, consigne, n) (PID discret avec anti-emballement de l’intégrale par écrêtage) et meilleur_pid(grille) qui choisit les gains minimisant ∫|erreur| + pénalité de dépassement > 5 %. Le gagnant doit atteindre 95 % de la consigne en moins de 40 pas sans dépasser 5 %.
Correction
def simuler_pid(Kp, Ki, Kd, consigne=100.0, n=300):
v, I, e_prec, V = 0.0, 0.0, 0.0, []
for _ in range(n):
e = consigne - v; I = np.clip(I + e, -2000, 2000); u = np.clip(Kp * e + Ki * I + Kd * (e - e_prec), -12, 12)
e_prec = e; v = 0.98 * v + 0.4 * u; V.append(v)
return np.array(V)
def meilleur_pid(grille):
def cout(g):
v = simuler_pid(*g); return np.abs(100 - v).sum() + 1e4 * (v.max() > 105) + 1e4 * (abs(v[-1] - 100) > 1)
return min(grille, key=cout)Exercice 4 — Observateur de Luenberger : estimer une vitesse qu’on ne mesure pas
Pour le moteur du cours 1 (états ω, i ; on ne mesure que ω), écrivez observateur(Ad, Bd, C, poles) qui renvoie le gain L (placement de pôles sur le système dual : Aᵀ, Cᵀ) et simuler_observateur(L) qui fait tourner en parallèle le vrai système et l’estimateur x̂k+1 = Ad x̂k + Bd uk + L (yk − C x̂k) à partir d’une estimation initiale fausse ; l’erreur d’estimation du courant doit converger vers 0 en quelques dizaines de pas.
Correction
def observateur(Adm, Bdm, Cm, poles): return ackermann(Adm.T, Cm.T, poles).T
def simuler_observateur(L, n=200):
x = np.array([50.0, 1.0]); xh = np.array([0.0, 0.0]); err = []
for k in range(n):
u = 6.0; y = Cm @ x
xh = Adm @ xh + (Bdm * u).ravel() + (L @ (y - Cm @ xh)).ravel(); x = Adm @ x + (Bdm * u).ravel()
err.append(abs(x[1] - xh[1]))
return np.array(err)Le principe de séparation dit qu’on peut concevoir le contrôleur (K) et l’observateur (L) indépendamment : les pôles du système bouclé sont ceux de A − BK et de A − LC réunis. Avec du bruit, l’observateur optimal est… le filtre de Kalman (L19) : L est alors le gain de Kalman stationnaire.
05 / Défis
Défi ★ — RRT pour le bras, et Ackermann
Consigne
1) Faites tourner le RRT dans l’espace des configurations du bras à 2 segments (avec la fonction collision) d’une configuration de départ à une configuration but ; animez (ou tracez 10 poses intermédiaires) dans l’espace de travail. 2) Écrivez la cinématique d’une voiture (Ackermann : ẋ = v cos θ, ẏ = v sin θ, θ̇ = v tan φ / L) et montrez qu’un pure pursuit y fonctionne avec φ = arctan(2 L sin α / L_lookahead). 3) Quel est le rayon de braquage minimal pour L = 0,3 m et φ_max = 30° ?
Piste
Pour le bras : les nœuds sont des (θ1, θ2) ; libre devient not collision(q) ; les angles sont périodiques (distance modulo 2π). Rayon minimal : R = L / tan φ_max ≈ 0,52 m.
05 / Défis
Défi ★★ — LQR sur le vrai pendule non linéaire, avec observateur
Consigne
1) Appliquez le K du LQR (calculé sur le modèle linéarisé) au pendule non linéaire (sin θ) simulé par RK4 (module L12) : jusqu’à quel angle initial le contrôleur récupère-t-il (bassin d’attraction) ? 2) Supposez qu’on ne mesure que l’angle (bruité, σ = 0,01 rad) et pas la vitesse : ajoutez un filtre de Kalman (module L19) pour estimer l’état et bouclez sur l’estimation (principe de séparation). Comparez à une dérivée numérique brute de l’angle. 3) Ajoutez un retard de 40 ms dans la mesure : à partir de quel retard le système devient-il instable ? Expliquez avec les pôles (le retard ajoute des états).
Piste
Bassin d’attraction avec u_max = 10 N : environ ±0,35 rad ; il chute avec une saturation plus stricte. Le retard : modéliser z_k = x_{k−d} en augmentant l’état de d copies ; les pôles se rapprochent du cercle unité ; typiquement instable au-delà de ~80-100 ms pour ce pendule rapide. C’est pourquoi la latence caméra → commande est LA contrainte de conception des drones et des robots agiles.
05 / Défis
Défi ★★★ — Esprit prépa : commande optimale par principe de Pontryagin et MPC convexe
Consigne
1) Problème à temps minimal : amener un chariot (ẍ = u, |u| ≤ 1) de (x₀, 0) à (0, 0) le plus vite possible. Montrez (principe du maximum de Pontryagin, ou raisonnement direct) que la commande optimale est bang-bang : +1 puis −1 avec une seule commutation, sur la courbe x = −½ ẋ|ẋ|. Implémentez ce contrôleur et comparez son temps à celui du LQR. 2) Formulez le MPC du pendule comme un programme quadratique (variables : la séquence u, contraintes linéaires |u| ≤ u_max) et résolvez-le par la méthode du gradient projeté accéléré (Nesterov) ou par une implémentation maison d’ADMM ; mesurez le temps par pas et comparez à 20 ms. 3) Lisez l’introduction de Underactuated Robotics (Tedrake, chapitres 1-3) et expliquez pourquoi un pendule simple ne peut pas être stabilisé en haut avec un couple trop faible sans balancer (swing-up par énergie) : concevez ce swing-up.
Piste (bang-bang)
def bang_bang(x, v):
"""Courbe de commutation : s = x + 0.5 * v * abs(v). Au-dessus : freiner (−1), en dessous : accélérer (+1)."""
s = x + 0.5 * v * abs(v)
if abs(s) < 1e-3 and abs(v) < 1e-3: return 0.0
return -1.0 if s > 0 else 1.0
x, v, t, dt = 3.0, 0.0, 0.0, 0.001
while abs(x) + abs(v) > 1e-2:
u = bang_bang(x, v); v += u * dt; x += v * dt; t += dt
print(f"temps minimal ≈ {t:.2f} s (théorie : 2√3 ≈ {2 * np.sqrt(3):.2f})")Le swing-up par énergie : u = k (E − E_haut) · signe(θ̇ cos θ) pompe de l’énergie jusqu’à approcher l’équilibre haut, puis on bascule sur le LQR quand |θ − π| < 0,3. Ce « contrôle hybride » (deux contrôleurs et une règle de commutation) est la solution classique et un beau sujet d’oral.
06 / Vérification
Un système discret bouclé x_{k+1} = (A − BK) x_k est stable si :
Deux questions supplémentaires
1. Pourquoi planifier dans l’espace des configurations ? Parce que le robot y est un point ; les collisions deviennent des régions à éviter et les algorithmes de graphe/échantillonnage s’appliquent.
2. Que fait un MPC qu’un LQR ne fait pas ? Respecter des contraintes (saturation, obstacles) et anticiper une référence future.
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| Cinématique directe / inverse | Commandes → mouvement / mouvement voulu → commandes. |
| Non holonome | Contrainte sur les vitesses (pas de déplacement latéral). |
| Espace des configurations | Espace des paramètres du robot (angles) ; le robot y est un point. |
| RRT / RRT* | Arbre aléatoire ; probabilistement complet / asymptotiquement optimal. |
| Fenêtre dynamique | Choix de (v, ω) par simulation courte et score. |
| Pure pursuit | Suivi géométrique par point d’anticipation. |
| Pôles | Valeurs propres du système bouclé ; |λ| < 1 en discret. |
| LQR / Riccati | Retour d’état optimal pour coût quadratique. |
| MPC | Optimisation sur horizon glissant avec contraintes. |
| Bang-bang | Commande saturée à temps minimal. |
| Bouclier de sécurité | Filtre qui garantit un ensemble sûr quelle que soit la commande demandée. |
Pour continuer
Le robot bouge comme il faut
Module suivant : communication et réseaux — bus embarqués (SPI, I2C, CAN), protocoles, sockets, MQTT, sécurité : faire parler les composants entre eux et avec le monde.
À faire chez soi
- Suivre les chapitres 1-4 de Underactuated Robotics (avec les notebooks Drake).
- Sur robot : remplacer le PID de la séance 29 par un LQR sur le modèle identifié (vitesse en fonction de la PWM : identification par moindres carrés, module L10).
- Implémenter RRT* et comparer la longueur des chemins à RRT sur 50 problèmes aléatoires.