I. Architecture du système de contrôle
Le système de contrôle est conçu en cascade pour gérer différentes sources d'erreur et de perturbation. La structure comprend trois composantes principales qui fonctionnent de manière synergique.
- Couche PID : responsable de la réduction des écarts de suivi, tels que les déviations de position et de cap.
- Couche intégrale par backstepping : compense les incertitudes du modèle dynamique et les perturbations à haute fréquence.
- Module de préaction : annule les effets prévisibles des forces environnementales, comme le vent, les vagues et les courants.
II. Implémentation de l'algorithme PID
1. Structure de base du PID
L'implémentation utilise une version incrémentale du PID pour améliorer la stabilité numérique. Le code suivant illustre la logique de calcul.
% Contrôleur PID en forme incrémentale
function sortie = pid_increm(kp, ki, kd, err_prev, err_act, ref)
term_P = kp * (err_act - err_prev);
term_I = ki * integrale;
term_D = kd * (err_act - 2*err_prev + err_ant);
sortie = term_P + term_I + term_D;
end
2. Méthodes de réglage des paramètres
Plusieurs techniques existent pour déterminer les gains du PID, chacune adoptée à des contextes spécifiques.
| Méthode | Procédure | Domaine d'application |
|---|---|---|
| Ziegler-Nichols | 1. Isoler les termes intégral et dérivé. 2. Trouver le gain critique Ku et la période Tu. 3. Calculer les paramètres. | Réglage industriel classique |
| Algorithme génétique | 1. Définir une fonction d'optimisation. 2. Encoder l'espace des paramètres. 3. Itérer vers la solution optimale. | Systèmes complexes nécessitant une haute précision |
| Méthode de courbe d'amortissement | 1. Observer le taux d'amortissement de la réponse indicielle. 2. Ajuster les paramètres selon des ratios spécifiques (ex. 4:1 ou 10:1). | Procédés industriels continus |
3. Exemple de paramétrage pour un navire
Les gains ci-dessous ont été affinés par des essais en conditions réelles de mer.
% Gains du PID pour le contrôle de position et de cap
kp_pos = 1.25; % Gain proportionnel de la boucle de position
ki_pos = 0.045; % Gain intégral de la boucle de position
kd_pos = 0.85; % Gain dérivé de la boucle de position
kp_cap = 0.75; % Gain proportionnel de la boucle de cap
ki_cap = 0.025; % Gain intégral de la boucle de cap
kd_cap = 0.55; % Gain dérivé de la boucle de cap
III. Design du contrôleur intégral par backstepping
1. Établissement de la loi de contrôle
Le contrôleur est conçu à l'aide de la méthode de Lyapunov pour garantir la stabilité. L'algorithme calcule le signal de commande en intégrant une variable d'état auxiliaire.
% Commande par backstepping avec intégration
function cmd = backstepping_cmd(ref_etat, etat_actuel, etat_int)
erreur_pos = ref_etat(1) - etat_actuel(1); % Erreur sur la position
% Calcul de la commande
cmd = (masse * (erreur_pos + gain_k1 * etat_int(1)) - amortissement * cmd_prec) / inertie;
% Mise à jour de l'intégrateur
etat_int(2) = etat_int(2) + (erreur_pos + gain_k1 * etat_int(1)) * pas_temps;
end
2. Paramètres clés
Le choix des paramètres influence fortement les performances et la robustesse du contrôleur.
| Paramètre | Principe de conception | Plage de valeurs typique |
|---|---|---|
| K1 | Lié à l'inertie du système, ajusté pour la réponse transitoire. | 0.5 à 2.0 |
| K2 | Doit satisfaire les conditions de stabilité de Hurwitz. | 0.1 à 0.5 |
| λ | Coefficient d'amortissement pour atténuer les oscillations hautes fréquences. | 0.707 à 1.0 |
IV. Stratégie de contrôle combinée
1. Module de compensation par préaction
Ce module calcule une correction basée sur des modèles empiriques des forces environnementales.
% Calcul de la compensation pour le vent et les vagues
function cmd_ff = compens_env(force_vent, force_courant)
gain_ff = 0.75; % Gain de la préaction
cmd_ff = gain_ff * (force_vent + force_courant);
end
2. Boucle de contrôle principale
La routine suivante orchestre l'ensemble des composantes pour une exécution en temps réel.
% Boucle principale de contrôle
for iter = 1:nb_iterations
% Acquisition de l'état actuel
etat_actuel = lire_etat_navire();
% Compensation des perturbations
cmd_env = compens_env(force_vague, force_courant);
% Action PID
err_prec = err_act;
err_act = ref_etat - etat_actuel;
delta_pid = pid_increm(kp, ki, kd, err_prec, err_act);
% Action par backstepping
etat_int = maj_integrateur(etat_int, err_act);
delta_bs = backstepping_cmd(ref_etat, etat_actuel, etat_int);
% Synthèse de la commande totale
cmd_totale = cmd_env + delta_pid + delta_bs;
% Application de la commande
appliquer_commande(cmd_totale);
end
V. Points clés pour l'implémentation pratique
1. Configuration matérielle recommandée
| Module | Spécifications suggérées | Exigences de précision |
|---|---|---|
| Unité de traitement | DSP 32 bits en virgule flottante (ex. TI C6678) | Cycle de calcul ≤ 1 ms |
| Capteurs | Compas à fibre optique (précision 0.01°) | Bruit < 0.05°/√Hz |
| Actionneurs | Servo de direction (temps de réponse < 50 ms) | Précision de positionnement ±0.1° |
| Interface de communication | EtherCAT (cycle 1 ms) | Jitter de latence < 1 μs |
2. Mesures anti-perturbation
- Filtrage matériel : Ajouter un filtre actif d'ordre deux à l'entrée du CAN (fréquence de coupure 10 Hz).
- Filtrage logiciel : Combiner une moyenne mobile avec un filtre de Kalman.
- Diagnostic de pannes : Détection des défaillances de capteurs par analyse des résidus.
3. Gestion du temps réel
% Planification des tâches en temps réel
Tâche1 : Calcul PID (Priorité=10, Période=1 ms)
Tâche2 : Backstepping (Priorité=9, Période=1 ms)
Tâche3 : Journalisation (Priorité=5, Période=10 ms)
VI. Extensions et applications
Cette architecture de contrôle peut être étendue à des scénarios plus avancés, tels que le contrôle coordonné de plusieurs navires via des algorithmes de cohérence, l'optimisation de la consommation d'énergie par prédiction du modèle, ou la tolérance aux pannes grâce à des observateurs à modes glissants pour la reconstruction des défauts d'actionneurs.