робототехника. Уровень

Выполните цикл в фиксированной частоте

Описание

Объект Rate позволяет вам запустить цикл в фиксированной частоте. Это также собирает статистические данные о синхронизации итераций цикла. Используйте waitfor в цикле, чтобы приостановить выполнение кода до следующего временного шага. Цикл управляет каждым DesiredPeriod секунды, если прилагаемый код не занимает больше времени, чтобы действовать. Объект использует свойство OverrunAction определить, как это обрабатывает более длительные времена операции цикла. Настройка по умолчанию, 'slip', сразу выполняет цикл, если LastPeriod больше, чем DesiredPeriod. Используя причины 'drop' метод waitfor, чтобы ожидать до следующего кратного DesiredPeriod достигнут, чтобы выполнить следующий цикл.

Совет

Разрешение планирования вашей операционной системы и уровень другого системного действия могут влиять на точность выполнения уровня. В результате точная синхронизация уровня ограничивается 100 Гц для подписания кода MATLAB®. Чтобы улучшать производительность и скорости выполнения, используйте генерацию кода.

Создание

Синтаксис

rateObj = robotics.Rate(desiredRate)

Описание

пример

rateObj = robotics.Rate(desiredRate) создает объект Rate, который управляет циклами в с фиксированной процентной ставкой на основе вашего системного времени и непосредственно устанавливает свойство DesireRate.

Свойства

развернуть все

Желаемый уровень выполнения цикла, заданного как скаляр в Гц. При использовании waitfor цикл управляет каждым DesiredRate секунды, если цикл не занимает больше времени. Это затем начинает следующий цикл на основе заданного OverrunAction.

Желаемый период времени между выполнением, заданным как скаляр в секундах. Это свойство равно инверсии DesiredRate.

Прошедшее время начиная с конструкции или сброса, заданного как скаляр в секундах.

Прошедшее время между последними двумя вызовами waitfor, заданного как скаляр. По умолчанию LastPeriod установлен в NaN, пока waitfor не называется впервые. После первого вызова LastPeriod равняется TotalElapsedTime.

Метод для обработки переполнений, заданных как один из этих векторов символов:

  • 'drop' — ожидает до следующего временного интервала, равного кратному DesiredPeriod

  • 'slip' — сразу выполняет цикл снова

Каждая секция кода вызывает waitfor в конце выполнения.

Функции объекта

waitforПриостановите выполнение кода, чтобы достигнуть желаемого уровня выполнения
statisticsСтатистика прошлых периодов выполнения
resetОбъект Reset Rate

Примеры

свернуть все

Создайте объект уровня, который достигает 1 Гц.

r = robotics.Rate(1);

Запустите цикл с помощью объекта Rate внутри, чтобы управлять выполнением цикла. Сбросьте объект до выполнения цикла, чтобы сбросить таймер. Распечатайте итерацию, и время протекло.

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.022631
Iteration: 2 - Time Elapsed: 1.100586
Iteration: 3 - Time Elapsed: 2.015561
Iteration: 4 - Time Elapsed: 3.008170
Iteration: 5 - Time Elapsed: 4.007830
Iteration: 6 - Time Elapsed: 5.021887
Iteration: 7 - Time Elapsed: 6.003454
Iteration: 8 - Time Elapsed: 7.003082
Iteration: 9 - Time Elapsed: 8.003072
Iteration: 10 - Time Elapsed: 9.003225

Каждая итерация выполняется в 1 втором интервале.

Создайте объект Rate для того, чтобы достигнуть 20 Гц.

r = robotics.Rate(2);

Запустите цикл и управляйте операцией с помощью объекта Rate.

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

Получите статистику объекта Rate после операции цикла.

stats = statistics(r)
stats = struct with fields:
              Periods: [1x30 double]
           NumPeriods: 30
        AveragePeriod: 0.5000
    StandardDeviation: 8.2606e-04
          NumOverruns: 0

Создайте объект Rate для того, чтобы достигнуть 20 Гц.

r = robotics.Rate(2);

Запустите цикл и управляйте операцией с помощью объекта Rate.

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

Отобразите свойства объектов Rate после операции цикла.

disp(r)
  Rate with properties:

         DesiredRate: 2
       DesiredPeriod: 0.5000
       OverrunAction: 'slip'
    TotalElapsedTime: 15.0142
          LastPeriod: 0.4999

Сбросьте объект перезапустить статистику времени.

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

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

Введенный в R2016a