exponenta event banner

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 объект использует время моделирования АФК для регулирования скорости выполнения цикла.

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

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