Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

Suivre la trajectoire prédite pendant l'exécution

Exécutez « Ligne droite · décalage de 1 m » et lancez la lecture. Les tirets verts, à chaque instant, forment la trajectoire prédite résolue à cet instant. Le MPC détermine l'ensemble de la séquence de courbure sur l'horizon, mais n'applique au véhicule que la première valeur, puis résout de nouveau tout le problème au cycle suivant (0,05 s plus tard). La trajectoire prédite s'écarte de la trajectoire réelle à la fois parce que le modèle de prédiction est une approximation et parce que le plan est mis à jour aux cycles suivants.

Enregistrez le résultat sous A, puis exécutez « Horizon court (3 pas) » ou « Horizon long (30 × 0,2 s) ». Avec les mêmes pondérations, la distance à laquelle le contrôleur regarde change la façon dont la direction s'établit. La durée de l'horizon en secondes est le nombre de pas N multiplié par le pas Δt.

Modèle de prédiction et problème d'optimisation

Les états sont l'écart latéral e_y par rapport à la trajectoire (positif à gauche) et l'erreur de cap e_ψ. La prédiction utilise un modèle linéaire simplifié pour le MPC.

e_{y,k+1} = e_{y,k} + v_k\,\Delta t\,e_{\psi,k},\qquad e_{\psi,k+1} = e_{\psi,k} + v_k\,\Delta t\,(u_k - \kappa_k)

u_k est la courbure de trajectoire commandée [1/m], κ_k la courbure de la trajectoire à la position prédite, et v_k la vitesse prédite avec le même servo de vitesse que le véhicule. L'angle de braquage est δ=atan(L u), donc la limite de direction |δ|≤δ_max correspond exactement à la borne de courbure |u|≤tan(δ_max)/L. Le coût

J = \sum_{k} q_y e_{y,k}^2 + q_\psi e_{\psi,k}^2 + r\,(u_k-\kappa_k)^2 + r_\Delta\,(u_k-u_{k-1})^2

donne un programme quadratique où seules les bornes de courbure interviennent. u_{-1} est la courbure réellement appliquée au cycle précédent. r pondère l'écart par rapport à la courbure de trajectoire et r_Δ pondère les changements rapides de courbure. La prédiction est un modèle linéaire à petits angles, tandis que le véhicule est le modèle bicyclette partagé non linéaire. Cette différence fait aussi partie de ce que montre l'expérience.

Le solveur, et ce qui se passe lorsqu'il ne converge pas

Le programme quadratique est résolu par une méthode de Newton projetée (Bertsekas 1982). Les variables maintenues à une borne sont fixées, une direction de Newton est calculée pour le reste, puis une recherche linéaire suit la projection sur les bornes. La résolution est considérée comme convergée lorsque le résidu du gradient projeté est au plus de 1e-6 [1/m]. La solution du cycle précédent sert de point de départ, si bien que la convergence a normalement lieu en quelques itérations.

Si la limite d'itérations est atteinte sans convergence, vous pouvez choisir l'un de trois comportements. « Utiliser l'itéré réalisable » applique l'itéré, qui respecte les bornes, et enregistre le cycle comme non convergé. « Conserver la commande précédente » maintient le braquage précédent et enregistre le cycle comme maintenu. « Arrêter » termine l'exécution en échec (controller_failed) et affiche la raison. Comparez-les avec les trois préréglages qui utilisent une limite d'une itération. Comme les bornes sont les seules contraintes, ce problème n'est jamais irréalisable (une solution existe toujours). L'irréalisabilité issue de contraintes d'état strictes sort du cadre de ce Laboratoire.

Contraintes, pondérations et vitesse

« 8 m/s · pondérations par défaut » se termine sans incident, mais « 8 m/s · petite pondération de variation (diverge) » quitte la trajectoire. Le véhicule limite la vitesse de variation de direction à 0,8 rad/s, mais ce problème d'optimisation n'inclut pas cette limite comme contrainte. Avec une petite pondération de variation r_Δ, le plan suppose des changements de direction rapides que le véhicule ne peut pas suivre, et l'oscillation s'amplifie. C'est un exemple de contrainte absente du modèle qui casse la boucle fermée. « Pondération latérale élevée » montre elle aussi des corrections brusques qui se heurtent à la limite de variation de direction.

« Courbe serrée (infranchissable) » est une trajectoire de 5 m de rayon que le véhicule ne peut pas suivre. Dans les mêmes conditions, le Laboratoire Stanley quitte lui aussi la trajectoire. Changer la loi de commande ne peut pas dépasser les limites fixées par le véhicule et ses contraintes.

Véhicule partagé et métriques de comparaison

Le véhicule est le modèle bicyclette cinématique à essieu arrière, avant uniquement, partagé avec PP, APP, RPP et Stanley : pas de 0,05 s jusqu'à 30 s, limite de vitesse de 8 m/s, accélération de ±2 m/s², vitesse de variation de direction de 0,8 rad/s. La vitesse n'est pas optimisée par le MPC ; elle provient du même servo de vitesse a=2(vitesse cible−vitesse réelle) que les autres Laboratoires. Le MPC de ce Laboratoire ne traite que la direction.

L'écart latéral, l'erreur de cap, le RMS et le test de point terminal utilisent les définitions partagées avec les autres Laboratoires, sur l'essieu arrière. Franchir le point terminal ne signifie pas s'arrêter ou se garer. Ne classez pas des exécutions aux durées écoulées ou aux états d'achèvement différents par le seul RMS.

À propos du temps de calcul

Le temps du solveur est le temps réel de Python (Pyodide) dans ce navigateur. Il varie selon l'appareil, le navigateur et ce qui tourne en même temps, et ne dit rien du temps de calcul sur un ordinateur embarqué ni du respect d'une échéance de contrôle. L'évaluation de performance exige de mesurer le temps de résolution dans le pire des cas sur le matériel et l'implémentation cibles (par exemple un solveur dédié comme OSQP).

Ordre suggéré

  1. Relire l'exécution nominale et comparer la trajectoire prédite à la trajectoire réelle.
  2. Modifier le nombre de pas de l'horizon et la taille du pas, et comparer l'établissement de la direction et l'écart latéral.
  3. Utiliser les deux préréglages à 8 m/s pour voir le lien entre la pondération de variation et la limite de variation de direction.
  4. Utiliser les trois préréglages à une itération pour comparer la gestion des cycles non convergés.

Tout s'exécute dans votre navigateur, avec lecture, avance image par image, comparaison A/B, réinitialisation, partage et téléchargement JSON.

Références et Laboratoires liés

Related reading

Explore another aspect of this fieldLaboratoire Pure Pursuit — comparer le suivi de trajectoire à distance d'anticipation fixe