Использование rosrate объект позволяет вам контролировать скорость выполнения кода на основе времени ROS /clock тема или системное время на вашем компьютере. Выполняя код с постоянными интервалами, можно точно времени и планирования задач. Эти примеры показывают различные приложения для rosrate объект, включающий его использование с сообщениями изображений ROS и отправку команд для управления роботом.
Для других приложений, основанных на системном времени, рассмотрите rateControl (Navigation Toolbox) объект.
Этот пример показывает, чтобы отправлять регулярные команды роботу с фиксированной скоростью. Он использует Rate объект для выполнения цикла, который публикует std_msgs/Twist сообщения в сеть с регулярным интервалом.
Setup сети ROS. Укажите IP-адрес, если сеть ROS уже существует.
rosinit
Launching ROS Core... Done in 0.93859 seconds. Initializing ROS master on http://192.168.0.10:53501. Initializing global node /matlab_global_node_67541 with NodeURI http://bat6315glnxa64:45705/
Setup издателя и сообщение для отправки Twist команды.
[pub,msg] = rospublisher('/cmd_vel','geometry_msgs/Twist'); msg.Linear.X = 0.5; msg.Angular.Z = -0.5;
Создание Rate объект с заданными параметрами цикла.
desiredRate = 10;
rate = robotics.Rate(desiredRate);
rate.OverrunAction = 'drop'rate =
rateControl with properties:
DesiredRate: 10
DesiredPeriod: 0.1000
OverrunAction: 'drop'
TotalElapsedTime: 0.0596
LastPeriod: NaN
Запустите цикл и удерживайте каждую итерацию, используя waitfor(rate). Отправить Twist сообщение внутри цикла. Сбросьте Rate объект перед циклом для сброса синхронизации.
reset(rate) while rate.TotalElapsedTime < 10 send(pub,msg) waitfor(rate); end
Просмотр статистики выполнения с фиксированной частотой. Посмотрите на AveragePeriod для проверки требуемой скорости.
statistics(rate)
ans = struct with fields:
Periods: [1x100 double]
NumPeriods: 100
AveragePeriod: 0.1000
StandardDeviation: 2.7331e-04
NumOverruns: 0
Завершите работу сети ROS
rosshutdown
Shutting down global node /matlab_global_node_67541 with NodeURI http://bat6315glnxa64:45705/ Shutting down ROS master on http://192.168.0.10:53501.
В этом примере показано, как регулярно публиковать и получать изображения с помощью ROS и rosrate функция. The rosrate функция создает Rate объект для регулярного доступа к /camera/rgb/image_raw тема в сети ROS с использованием абонента. Изображение rgb преобразуется в полутоновое с помощью rgb2gray и переиздается через регулярный интервал. Параметры, такие как IP-адрес и имена тем, варьируются в зависимости от вашего робота и настройки.
Подключение к сети ROS. Setup подписчика, издателя и сообщения с данными.
ipaddress = '192.168.203.129'; % Replace with your network address rosinit(ipaddress)
Initializing global node /matlab_global_node_10650 with NodeURI http://192.168.203.1:50899/
sub = rossubscriber('/camera/rgb/image_raw'); pub = rospublisher('/camera/gray/image_gray','sensor_msgs/Image'); msgGray = rosmessage('sensor_msgs/Image'); msgGray.Encoding = 'mono8';
Получите первое изображение сообщения. Извлеките изображение и преобразуйте в полутоновое изображение. Отобразите изображение в полутоновом цвете и опубликуйте сообщение.
msgImg = receive(sub); img = readImage(msgImg); grayImg = rgb2gray(img); imshow(grayImg)

writeImage(msgGray,grayImg) send(pub,msgGray)
Создайте ROS- Rate объект для выполнения с частотой 10 Гц. Установите время цикла и OverrunAction для обработки
desiredRate = 10;
loopTime = 5;
overrunAction = 'slip';
rate = rosrate(desiredRate);
r.OverrunAction = overrunAction;Начните цикл, чтобы получать, обрабатывать и отправлять сообщения каждые 0,1 секунды (10 Гц). Сбросьте Rate объект перед началом.
reset(rate) for i = 1:desiredRate*loopTime msgImg = receive(sub); img = readImage(msgImg); grayImg = rgb2gray(img); writeImage(msgGray,grayImg) send(pub,msgGray) waitfor(rate); end
Просмотр статистики выполнения кода. AveragePeriod и StandardDeviation показать, насколько хорошо код поддерживал desiredRate. OverRuns происходит, когда обработка данных занимает больше необходимого периода.
statistics(rate)
ans = struct with fields:
Periods: [1×50 double]
NumPeriods: 50
AveragePeriod: 0.1000
StandardDeviation: 0.0083
NumOverruns: 0
Завершите работу узла ROS
rosshutdown
Shutting down global node /matlab_global_node_10650 with NodeURI http://192.168.203.1:50899/
rosrate | waitfor | rateControl (Navigation Toolbox)