rosrate

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

Описание

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 4.1747 seconds.
Initializing ROS master on http://192.168.88.1:58653.
Initializing global node /matlab_global_node_60184 with NodeURI http://ah-avijayar:59309/

Создайте объект уровня, который достигает 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.002974
Iteration: 2 - Time Elapsed: 1.000752
Iteration: 3 - Time Elapsed: 2.000610
Iteration: 4 - Time Elapsed: 3.000943
Iteration: 5 - Time Elapsed: 4.001317
Iteration: 6 - Time Elapsed: 5.000800
Iteration: 7 - Time Elapsed: 6.000602
Iteration: 8 - Time Elapsed: 7.000298
Iteration: 9 - Time Elapsed: 8.000352
Iteration: 10 - Time Elapsed: 9.000417

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

rosshutdown
Shutting down global node /matlab_global_node_60184 with NodeURI http://ah-avijayar:59309/
Shutting down ROS master on http://192.168.88.1:58653.

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

rosinit
Launching ROS Core...
....Done in 4.1733 seconds.
Initializing ROS master on http://192.168.88.1:51279.
Initializing global node /matlab_global_node_86106 with NodeURI http://ah-avijayar:50550/
node = ros.Node('/testTime');
Using Master URI http://localhost:51279 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_86106 with NodeURI http://ah-avijayar:50550/
Shutting down ROS master on http://192.168.88.1:51279.

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

Смотрите также

(Robotics System Toolbox) |

Введенный в R2019b