Использование 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)