Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

rateControl

Exécuter une boucle à fréquence fixe

Description

L'objet rateControl permet d'exécuter une boucle à une fréquence fixe. Il collecte également des statistiques sur le timing des itérations de la boucle. Utilisez waitfor dans la boucle pour suspendre l'exécution du code jusqu'au prochain pas de temps. La boucle fonctionne toutes les DesiredPeriod secondes, à moins que le code ci-joint prenne plus de temps à fonctionner. L'objet utilise la propriété OverrunAction pour déterminer comment il gère les temps de fonctionnement des boucles plus longs. Le paramètre par défaut, 'slip', exécute immédiatement la boucle si LastPeriod est supérieur à DesiredPeriod. L'utilisation de 'drop' oblige la méthode waitfor à attendre que le prochain multiple de DesiredPeriod soit atteint pour exécuter la boucle suivante.

Conseil

La résolution de planification de votre système d'exploitation et le niveau des autres activités du système peuvent affecter la précision de l'exécution du débit. En conséquence, la synchronisation précise du débit est limitée à 100 Hz pour l'exécution du code MATLAB® . Pour améliorer les performances et les vitesses d'exécution, utilisez la génération de code.

Création

Description

exemple

rateObj = rateControl(desiredRate) crée un objet qui exploite des boucles à un taux fixe en fonction de l'heure de votre système et définit directement la propriété DesireRate .

Propriétés

développer tout

Taux d'exécution souhaité de la boucle, spécifié sous forme de scalaire en Hz. Lorsque vous utilisez waitfor, la boucle fonctionne toutes les DesiredRate secondes, à moins que la boucle ne prenne plus de temps. Il commence ensuite la boucle suivante en fonction du OverrunAction spécifié.

Période souhaitée entre les exécutions, spécifiée sous forme de scalaire en secondes. Cette propriété est égale à l'inverse de DesiredRate.

Temps écoulé depuis la construction ou la réinitialisation, spécifié sous forme de scalaire en secondes.

Temps écoulé entre les deux derniers appels à waitfor, spécifié sous forme de scalaire. Par défaut, LastPeriod est défini sur NaN jusqu'à ce que waitfor soit appelé pour la première fois. Après le premier appel, LastPeriod est égal à TotalElapsedTime.

Méthode de gestion des dépassements, spécifiée comme l'un de ces vecteurs de caractères :

  • 'drop' — attend le prochain intervalle de temps égal à un multiple de DesiredPeriod

  • 'slip' — exécute à nouveau immédiatement la boucle

Chaque section de code appelle waitfor en fin d'exécution.

Fonctions d'objet

waitforSuspendre l'exécution du code pour atteindre le taux d'exécution souhaité
statisticsStatistiques des périodes d'exécution passées
resetRéinitialiser l'objet Rate

Exemples

réduire tout

Créez un objet de taux qui fonctionne à 1 Hz.

r = rateControl(1);

Démarrez une boucle en utilisant l'objet rateControl à l'intérieur pour contrôler l'exécution de la boucle. Réinitialisez l’objet avant l’exécution de la boucle pour réinitialiser la minuterie. Imprimez l'itération et le temps écoulé.

reset(r)
for i = 1:10
	time = r.TotalElapsedTime;
	fprintf('Iteration: %d - Time Elapsed: %f\n',i,time)
	waitfor(r);
end
Iteration: 1 - Time Elapsed: 0.002596
Iteration: 2 - Time Elapsed: 1.000760
Iteration: 3 - Time Elapsed: 2.001075
Iteration: 4 - Time Elapsed: 3.001497
Iteration: 5 - Time Elapsed: 4.001552
Iteration: 6 - Time Elapsed: 5.001646
Iteration: 7 - Time Elapsed: 6.000828
Iteration: 8 - Time Elapsed: 7.000463
Iteration: 9 - Time Elapsed: 8.001023
Iteration: 10 - Time Elapsed: 9.001176

Chaque itération s'exécute à un intervalle d'une seconde.

Créez un objet rateControl pour fonctionner à 20 Hz.

r = rateControl(20);

Démarrez une opération de boucle et de contrôle à l'aide de l'objet rateControl .

for i = 1:30
    % Your code goes here
    waitfor(r);
end

Obtenez les statistiques de l'objet Rate après l'opération en boucle.

stats = statistics(r)
stats = struct with fields:
              Periods: [0.0553 0.0471 0.0494 0.0500 0.0564 0.0421 0.0499 0.0500 0.0515 0.0487 0.0497 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0500 0.0501 0.0499]
           NumPeriods: 30
        AveragePeriod: 0.0500
    StandardDeviation: 0.0022
          NumOverruns: 0

Créez un objet rateControl pour fonctionner à 20 Hz.

r = rateControl(2);

Démarrez une opération de boucle et de contrôle à l'aide de l'objet Rate .

for i = 1:30
    % Your code goes here
    waitfor(r);
end

Affichez les propriétés de l'objet rateControl après l'opération en boucle.

disp(r)
  rateControl with properties:

         DesiredRate: 2
       DesiredPeriod: 0.5000
       OverrunAction: 'slip'
    TotalElapsedTime: 15.0106
          LastPeriod: 0.4996

Réinitialisez l'objet pour redémarrer les statistiques de temps.

reset(r);
disp(r)
  rateControl with properties:

         DesiredRate: 2
       DesiredPeriod: 0.5000
       OverrunAction: 'slip'
    TotalElapsedTime: 0.0063
          LastPeriod: NaN

Historique des versions

Introduit dans R2016a

développer tout

Voir aussi

(ROS Toolbox) | | |