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 1.1733 seconds.
Initializing ROS master on http://192.168.0.10:56092.
Initializing global node /matlab_global_node_97167 with NodeURI http://bat1072001glnxa64:35257/

Создайте объект уровня, который достигает 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.003399
Iteration: 2 - Time Elapsed: 1.001634
Iteration: 3 - Time Elapsed: 2.001038
Iteration: 4 - Time Elapsed: 3.001550
Iteration: 5 - Time Elapsed: 4.002516
Iteration: 6 - Time Elapsed: 5.000742
Iteration: 7 - Time Elapsed: 6.000357
Iteration: 8 - Time Elapsed: 7.000842
Iteration: 9 - Time Elapsed: 8.000706
Iteration: 10 - Time Elapsed: 9.001024

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

rosshutdown
Shutting down global node /matlab_global_node_97167 with NodeURI http://bat1072001glnxa64:35257/
Shutting down ROS master on http://192.168.0.10:56092.
........

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

rosinit
Launching ROS Core...
............................Done in 1.1648 seconds.
Initializing ROS master on http://192.168.0.10:57715.
Initializing global node /matlab_global_node_49018 with NodeURI http://bat1072001glnxa64:36715/
node = ros.Node('/testTime');
Using Master URI http://localhost:57715 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_49018 with NodeURI http://bat1072001glnxa64:36715/
Shutting down ROS master on http://192.168.0.10:57715.
.........

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

| (Robotics System Toolbox)

Введенный в R2019b