Main Content

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. El bucle funciona cada DesiredPeriod segundos, a menos que el código adjunto 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 de velocidad precisa se limita 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

ejemplo

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

Propiedades

expandir todo

Velocidad de ejecución deseada del bucle, especificada como escalar en Hz. Cuando se utiliza waitfor, el bucle opera cada DesiredRate segundos, a menos que el bucle demore más. Luego comienza el siguiente ciclo 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 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 inmediatamente el bucle nuevamente

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 Rate objeto

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.003395
Iteration: 2 - Time Elapsed: 1.000586
Iteration: 3 - Time Elapsed: 2.000907
Iteration: 4 - Time Elapsed: 3.000640
Iteration: 5 - Time Elapsed: 4.001582
Iteration: 6 - Time Elapsed: 5.000900
Iteration: 7 - Time Elapsed: 6.001095
Iteration: 8 - Time Elapsed: 7.001002
Iteration: 9 - Time Elapsed: 8.000219
Iteration: 10 - Time Elapsed: 9.000825

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

Cree un objeto rateControl para ejecutar a 20 Hz.

r = rateControl(20);

Inicie una operación de bucle y control utilizando el objeto rateControl .

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

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

stats = statistics(r)
stats = struct with fields:
              Periods: [0.0531 0.0482 0.0502 0.0521 0.0509 0.0458 0.0500 0.0500 0.0509 0.0491 0.0499 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.0011
          NumOverruns: 0

Cree un objeto rateControl para ejecutar a 20 Hz.

r = rateControl(2);

Inicie una operación de bucle y control utilizando el objeto Rate .

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

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

disp(r)
  rateControl with properties:

         DesiredRate: 2
       DesiredPeriod: 0.5000
       OverrunAction: 'slip'
    TotalElapsedTime: 15.0049
          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.0146
          LastPeriod: NaN

Historial de versiones

Introducido en R2016a

expandir todo

Consulte también

(ROS Toolbox) | | |