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Сбросьте Rate объект

Примеры

свернуть все

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

rosinit
Initializing ROS master on http://bat6346glnxa64:40619/.
Initializing global node /matlab_global_node_48834 with NodeURI http://bat6346glnxa64:46821/

Создайте объект уровня, который достигает 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.007597
Iteration: 2 - Time Elapsed: 1.004868
Iteration: 3 - Time Elapsed: 2.004254
Iteration: 4 - Time Elapsed: 3.002509
Iteration: 5 - Time Elapsed: 4.003140
Iteration: 6 - Time Elapsed: 5.006956
Iteration: 7 - Time Elapsed: 6.000846
Iteration: 8 - Time Elapsed: 7.000799
Iteration: 9 - Time Elapsed: 8.000783
Iteration: 10 - Time Elapsed: 9.001307

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

rosshutdown
Shutting down global node /matlab_global_node_48834 with NodeURI http://bat6346glnxa64:46821/
Shutting down ROS master on http://bat6346glnxa64:40619/.

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

rosinit
Initializing ROS master on http://bat6346glnxa64:36305/.
Initializing global node /matlab_global_node_92632 with NodeURI http://bat6346glnxa64:42389/
node = robotics.ros.Node('/testTime');
Using Master URI http://localhost:36305 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_92632 with NodeURI http://bat6346glnxa64:42389/
Shutting down ROS master on http://bat6346glnxa64:36305/.

Введенный в R2019b