Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

rateControl

Ejecutar bucle a frecuencia fija.

Descripción

El objeto rateControl le permite ejecutar un bucle a una frecuencia fija. También recopila estadísticas sobre el tiempo de las iteraciones del bucle. Utilice waitfor en el bucle para pausar la ejecución del código hasta el siguiente paso de tiempo. El bucle funciona cada DesiredPeriod segundos, a menos que el código incluido tarde más en funcionar. El objeto utiliza la propiedad OverrunAction para determinar cómo maneja tiempos de operación de bucle más largos. La configuración predeterminada, 'slip', ejecuta inmediatamente el bucle si LastPeriod es mayor que DesiredPeriod. El uso de 'drop' hace que el método waitfor espere hasta que se alcance el siguiente múltiplo de DesiredPeriod para ejecutar el siguiente bucle.

Sugerencia

La resolución de programación de su sistema operativo y el nivel de otras actividades del sistema pueden afectar la precisión de la ejecución de la velocidad. Como resultado, la sincronización precisa de la velocidad está limitada a 100 Hz para la ejecución del código MATLAB®. Para mejorar el rendimiento y las velocidades de ejecución, utilice la generación de código.

Creación

Descripción

rateObj = rateControl(desiredRate) crea un objeto que opera bucles a una velocidad fija en función de la hora del sistema y establece directamente la propiedad DesireRate.

ejemplo

Propiedades

expandir todo

Velocidad de ejecución deseada del bucle, especificada como escalar en Hz. Al utilizar waitfor, el bucle funciona cada DesiredRate segundos, a menos que el bucle tarde más. Luego comienza el siguiente bucle basado en el OverrunAction especificado.

Período de tiempo deseado entre ejecuciones, especificado como escalar en segundos. Esta propiedad es igual a la inversa de DesiredRate.

Tiempo transcurrido desde la construcción o el reinicio, especificado como escalar en segundos.

Tiempo transcurrido entre las dos últimas llamadas a waitfor, especificado como un escalar. De forma predeterminada, LastPeriod se establece en NaN hasta que se llama a waitfor por primera vez. Después de la primera llamada, LastPeriod es igual a TotalElapsedTime.

Método para manejar desbordamientos, especificado como uno de estos vectores de caracteres:

  • 'drop' — espera hasta el siguiente intervalo de tiempo igual a un múltiplo de DesiredPeriod

  • 'slip' — ejecuta el bucle inmediatamente de nuevo

Cada sección de código llama a waitfor al final de la ejecución.

Funciones del objeto

waitforPausar la ejecución del código para lograr la tasa de ejecución deseada
statisticsEstadísticas de periodos de ejecución pasados
resetRestablecer objeto Rate

Ejemplos

contraer todo

Cree un objeto de velocidad que se ejecute a 1 Hz.

r = rateControl(1);

Inicie un bucle utilizando el objeto rateControl dentro para controlar la ejecución del bucle. Restablezca el objeto antes de la ejecución del bucle para restablecer el temporizador. Imprime la iteración y el tiempo transcurrido.

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.001865
Iteration: 2 - Time Elapsed: 1.000779
Iteration: 3 - Time Elapsed: 2.001266
Iteration: 4 - Time Elapsed: 3.001085
Iteration: 5 - Time Elapsed: 4.000798
Iteration: 6 - Time Elapsed: 5.001535
Iteration: 7 - Time Elapsed: 6.000616
Iteration: 8 - Time Elapsed: 7.001048
Iteration: 9 - Time Elapsed: 8.000344
Iteration: 10 - Time Elapsed: 9.000979

Cada iteración se ejecuta en un intervalo de 1 segundo.

Crea un objeto rateControl para ejecutar a 20 Hz.

r = rateControl(20);

Inicie un bucle y controle la operación utilizando el objeto rateControl.

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

Obtener las estadísticas del objeto Rate después de la operación de bucle.

stats = statistics(r)
stats = struct with fields:
              Periods: [0.0571 0.0446 0.0493 0.0505 0.0530 0.0459 0.0496 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.0500 0.0500 0.0500 0.0500 0.0500 0.0500]
           NumPeriods: 30
        AveragePeriod: 0.0500
    StandardDeviation: 0.0019
          NumOverruns: 0

Crea un objeto rateControl para ejecutar a 20 Hz.

r = rateControl(2);

Inicie un bucle y controle la operación utilizando el objeto Rate.

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

Mostrar las propiedades del objeto rateControl después de la operación de bucle.

disp(r)
  rateControl with properties:

         DesiredRate: 2
       DesiredPeriod: 0.5000
       OverrunAction: 'slip'
    TotalElapsedTime: 15.0081
          LastPeriod: 0.5000

Restablezca el objeto para reiniciar las estadísticas de tiempo.

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

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

Historial de versiones

Introducido en R2016a

expandir todo

Consulte también

(ROS Toolbox) | | |