rosrate

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

Описание

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

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

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

Совет

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

Создание

Описание

пример

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

пример

rate = 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://bat6306glnxa64:45687/.
Initializing global node /matlab_global_node_56700 with NodeURI http://bat6306glnxa64:39743/

Создайте объект уровня, который достигает 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.005375
Iteration: 2 - Time Elapsed: 1.007812
Iteration: 3 - Time Elapsed: 2.005113
Iteration: 4 - Time Elapsed: 3.005315
Iteration: 5 - Time Elapsed: 4.005662
Iteration: 6 - Time Elapsed: 5.009251
Iteration: 7 - Time Elapsed: 6.002974
Iteration: 8 - Time Elapsed: 7.002676
Iteration: 9 - Time Elapsed: 8.002775
Iteration: 10 - Time Elapsed: 9.003637

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

rosshutdown
Shutting down global node /matlab_global_node_56700 with NodeURI http://bat6306glnxa64:39743/
Shutting down ROS master on http://bat6306glnxa64:45687/.

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

rosinit
Initializing ROS master on http://bat6306glnxa64:44777/.
Initializing global node /matlab_global_node_80665 with NodeURI http://bat6306glnxa64:44903/
node = robotics.ros.Node('/testTime');
Using Master URI http://localhost:44777 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_80665 with NodeURI http://bat6306glnxa64:44903/
Shutting down ROS master on http://bat6306glnxa64:44777/.

Введенный в R2019b