rosrate

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

Описание

Объект robotics.ros.Rate использует суперкласс robotics.Rate, чтобы наследовать большинство его свойств и методов. Основное различие - то, что robotics.ros.Rate использует узел ROS в качестве источника для получения информации времени. Поэтому это может использовать симуляцию ROS, или стена показывают время (см. свойство IsSimulationTime).

Если rosinit создает ведущее устройство ROS в MATLAB®, глобальная стена использования узла показывают время.

Производительность объекта ros.Rate и способности поддержать значение DesiredRate зависит от публикации информации о часах в ROS.

Совет

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

Создание

Синтаксис

rate = rosrate(desiredRate)
rate = robotics.ros.Rate(node,desiredRate)

Описание

пример

rate = rosrate(desiredRate) создает объект robotics.ros.Rate, который позволяет вам выполнить цикл в фиксированной частоте, DesiredRate. Источник времени соединяется с источником времени глобального узла ROS, который требует, чтобы вы соединили MATLAB с сетью ROS с помощью rosinit.

пример

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

Свойства

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

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

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

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

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

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

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

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

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

Индикатор, если симуляция или стена показывают время, используется, возвращается как true или false. Если true, объект Rate использует время симуляции ROS, чтобы отрегулировать уровень выполнения цикла.

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

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

Примеры

свернуть все

Инициализируйте ведущее устройство ROS и узел.

rosinit
Initializing ROS master on http://bat6230glnxa64:44889/.
Initializing global node /matlab_global_node_53579 with NodeURI http://bat6230glnxa64:44387/

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

r = rosrate(1);

Запустите цикл, который распечатывает итерацию, и время протекло. Используйте waitfor, чтобы приостановить цикл до следующего временного интервала. Сбросьте r до выполнения цикла. Заметьте, что каждая итерация выполняется в 1 втором интервале.

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.009818
Iteration: 2 - Time Elapsed: 1.019652
Iteration: 3 - Time Elapsed: 2.009219
Iteration: 4 - Time Elapsed: 3.005431
Iteration: 5 - Time Elapsed: 4.023793
Iteration: 6 - Time Elapsed: 5.012080
Iteration: 7 - Time Elapsed: 6.003107
Iteration: 8 - Time Elapsed: 7.002992
Iteration: 9 - Time Elapsed: 8.003942
Iteration: 10 - Time Elapsed: 9.003087

Закройте сеть ROS.

rosshutdown
Shutting down global node /matlab_global_node_53579 with NodeURI http://bat6230glnxa64:44387/
Shutting down ROS master on http://bat6230glnxa64:44889/.

Инициализируйте ведущее устройство ROS и узел.

rosinit
Initializing ROS master on http://bat6230glnxa64:38567/.
Initializing global node /matlab_global_node_06291 with NodeURI http://bat6230glnxa64:40979/
node = robotics.ros.Node('/testTime');
Using Master URI http://localhost:38567 from the global node to connect to the ROS master.

Создайте объект ros.Rate, достигающий 20 Гц.

r = robotics.ros.Rate(node,20);

Сбросьте объект перезапустить таймер и запустить цикл для 30 итераций. Введите код, который вы хотите запустить в цикле прежде, чем вызвать waitfor.

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

Завершите работу узла ROS.

rosshutdown
Shutting down global node /matlab_global_node_06291 with NodeURI http://bat6230glnxa64:40979/
Shutting down ROS master on http://bat6230glnxa64:38567/.

Введенный в R2016a