Qu'est-ce qu'un Régulateur Quadratique Linéaire (LQR) ?


Le Régulateur Quadratique Linéaire (LQR) est une méthode de contrôle optimal pour les systèmes dynamiques linéaires qui minimise une fonction de coût quadratique.

Le LQR est largement utilisé en robotique et automatique pour stabiliser des systèmes tout en minimisant l'énergie consommée. Il combine les états du système avec les entrées de commande pour trouver la loi de contrôle optimale.

Le savais-tu ?

Le LQR a été développé dans les années 1960 par Rudolf Kalman (le même que pour le filtre de Kalman) et est devenu un outil fondamental en contrôle optimal. Il est particulièrement efficace pour les systèmes où on doit trouver un compromis entre performance et consommation d'énergie.

Principe Général du LQR

Le LQR résout un problème d'optimisation où l'on cherche à minimiser une fonction de coût quadratique qui dépend à la fois de l'état du système et de la commande appliquée.

$$ J = \int_{0}^{\infty} (x^T Q x + u^T R u) dt $$

Où:

  • x est le vecteur d'état du système
  • u est le vecteur de commande
  • Q est une matrice définie positive pondérant l'importance des états
  • R est une matrice définie positive pondérant l'importance des commandes
La solution donne une loi de commande optimale de la forme u = -Kx, où K est la matrice de gain optimale.

Comment appliquer le LQR pour stabiliser le robot ?

Pour stabiliser un robot, le LQR peut être utilisé pour calculer les gains optimaux du contrôleur qui maintiennent le robot dans la position désirée tout en minimisant l'énergie dépensée.

Implémentation basique d'un LQR en Python
import numpy as np
from scipy.linalg import solve_continuous_are

def lqr(A, B, Q, R):
    """Résout le problème LQR pour un système continu
    Args:
        A, B: Matrices d'état du système dx/dt = A x + B u
        Q: Matrice de coût pour l'état
        R: Matrice de coût pour la commande
    Returns:
        K: Matrice de gain optimale
    """
    # Résolution de l'équation de Riccati
    P = solve_continuous_are(A, B, Q, R)
    
    # Calcul de la matrice de gain
    K = np.linalg.inv(R) @ B.T @ P
    
    return K

# Exemple pour un pendule inversé
A = np.array([[0, 1], [1, 0]])
B = np.array([[0], [1]])
Q = np.eye(2)  # Poids sur l'état
R = np.eye(1)  # Poids sur la commande

K = lqr(A, B, Q, R)
print("Matrice de gain LQR:", K)

Dans quelle partie du code peut intervenir le LQR ?

Module de stabilisation du robot bipède

Le contrôleur LQR (Linear Quadratic Regulator) peut être intégré au système de contrôle du robot bipède afin d'assurer son équilibre dynamique lors de la marche ou en position statique.

Exemple pratique :

Pour le robot bipède, la dynamique (position angulaire des articulations, vitesse angulaire, etc.) est modélisée par un système d’équations d’état. Le LQR calcule alors les gains optimaux pour corriger les écarts de posture en ajustant les servomoteurs des jambes, tout en minimisant l’effort moteur et la consommation énergétique.

Objectif : Maintenir l'équilibre du robot bipède en temps réel avec un minimum d'énergie

Références

  • Bryson, A. E., & Ho, Y. C. (1975). Applied Optimal Control. Hemisphere Publishing.
  • Anderson, B. D., & Moore, J. B. (1990). Optimal Control: Linear Quadratic Methods. Prentice-Hall.
  • Stanford University. Linear Quadratic Regulator (LQR) - Cours de robotique.
  • Matlab Documentation. lqr function reference.