rosrate

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

Описание

The rosrate объект использует rateControl (Robotics System Toolbox) суперкласс, чтобы наследовать большинство его свойств и методов. Главное различие в том, что 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 (Robotics System Toolbox) в конце выполнения.

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

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

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

Примеры

свернуть все

Инициализируйте хозяин и узел ROS.

rosinit
Launching ROS Core...
Done in 0.80415 seconds.
Initializing ROS master on http://192.168.0.10:55938.
Initializing global node /matlab_global_node_98612 with NodeURI http://bat6315glnxa64:45965/

Создайте объект скорости, который работает с частотой 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.003540
Iteration: 2 - Time Elapsed: 1.001568
Iteration: 3 - Time Elapsed: 2.001573
Iteration: 4 - Time Elapsed: 3.001307
Iteration: 5 - Time Elapsed: 4.002858
Iteration: 6 - Time Elapsed: 5.000875
Iteration: 7 - Time Elapsed: 6.000488
Iteration: 8 - Time Elapsed: 7.000767
Iteration: 9 - Time Elapsed: 8.000352
Iteration: 10 - Time Elapsed: 9.001003

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

rosshutdown
Shutting down global node /matlab_global_node_98612 with NodeURI http://bat6315glnxa64:45965/
Shutting down ROS master on http://192.168.0.10:55938.

Инициализируйте хозяин и узел ROS.

rosinit
Launching ROS Core...
Done in 0.68301 seconds.
Initializing ROS master on http://192.168.0.10:50562.
Initializing global node /matlab_global_node_81550 with NodeURI http://bat6315glnxa64:42889/
node = ros.Node('/testTime');
Using Master URI http://localhost:50562 from the global node to connect to the ROS master.

Создайте ros.Rate объект работает со скоростью 20 Гц.

r = 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_81550 with NodeURI http://bat6315glnxa64:42889/
Shutting down ROS master on http://192.168.0.10:50562.

Расширенные возможности

.
Введенный в R2019b