exponenta event banner

rossubscriber

Подписаться на сообщения по теме

Описание

Использовать rossubscriber создание абонента АФК для приема сообщений в сети АФК. Для отправки сообщений используйте rospublisher. Для ожидания нового сообщения ROS используйте receive функция с созданным абонентом.

Subscriber объект, созданный rossubscriber функция представляет абонента в сети ROS. Subscriber объект подписывается на доступный раздел или на раздел, который он создает. Этот раздел имеет связанный тип сообщения. Издатели могут отправлять сообщения по сети, Subscriber объект получает.

Примечание

В следующем выпуске Панель инструментов ROS будет использовать структуры сообщений вместо объектов для сообщений ROS.

Чтобы использовать структуры сообщений сейчас, установите "DataFormat" аргумент «имя-значение» для "struct". Для получения дополнительной информации см. Структуры сообщений ROS.

Можно создать Subscriber с помощью rossubscriber функции или путем вызова ros.Subscriber:

  • rossubscriber работает только с глобальным узлом, используя rosinit. Для него не требуется дескриптор объекта узла в качестве аргумента.

  • ros.Subscriber работает с дополнительными узлами, созданными с помощью ros.Node. Для него требуется дескриптор объекта узла в качестве первого аргумента.

Создание

Описание

пример

sub = rossubscriber(topicname) подписывается на тему с данным TopicNameТема должна уже существовать в списке основных тем ROS с установленным типом сообщения. Когда узлы ROS публикуют сообщения по этой теме, MATLAB ® получает эти сообщения через этого абонента.

sub = rossubscriber(topicname,msgtype) подписывается на раздел с указанным именем, TopicNameи введите, MessageType. Если список тем в шаблоне ROS не включает тему с указанным именем и типом, он добавляется в список тем. Используйте этот синтаксис, чтобы избежать ошибок при подписке на раздел до того, как издатель добавит раздел в список разделов мастера ROS.

пример

sub = rossubscriber(topicname,callback) определяет функцию обратного вызова, callback, который выполняется, когда дескриптор объекта подписчика получает сообщение тематики. Используйте этот синтаксис, чтобы избежать блокировки функции получения. callback функция может быть одним дескриптором функции или массивом ячеек. Первый элемент массива ячеек должен быть дескриптором функции или строкой, содержащей имя функции. Остальные элементы массива ячеек могут быть произвольными пользовательскими данными, которые передаются функции обратного вызова.

sub = rossubscriber(topicname, msgtype,callback) определяет функцию обратного вызова и подписывается на раздел с указанным именем, TopicNameи введите, MessageType.

sub = rossubscriber(___,Name,Value) предоставляет дополнительные параметры, указанные одним или несколькими Name,Value пара аргументов с использованием любого из аргументов из предыдущих синтаксисов. Name - имя свойства и Value - соответствующее значение.

sub = rossubscriber(___,"DataFormat","struct") использует структуры сообщений вместо объектов. Для получения дополнительной информации см. Структуры сообщений ROS.

sub = ros.Subscriber(node,topicname) подписывается на тему с именем, TopicName. node является ros.Node дескриптор объекта, к которому присоединен издатель.

пример

sub = ros.Subscriber(node,topicname,msgtype) определяет тип сообщения, MessageType, темы. Если тема с тем же именем существует с другим типом сообщения, MATLAB создает новую тему с указанным типом сообщения.

sub = ros.Subscriber(node,topicname,callback) определяет функцию обратного вызова и необязательные данные для выполнения при получении объектом подписчика сообщения тематики. Посмотрите NewMessageFcn для получения дополнительной информации о функции обратного вызова.

sub = ros.Subscriber(node,topicname,type,callback) определяет имя темы, тип сообщения и функцию обратного вызова для абонента.

sub = ros.Subscriber(___,"BufferSize",value) задает размер очереди в BufferSize для входящих сообщений. С помощью этого синтаксиса можно использовать любую комбинацию предыдущих входных данных.

sub = ros.Subscriber(___,"DataFormat","struct") использует структуры сообщений вместо объектов. Для получения дополнительной информации см. Структуры сообщений ROS.

Свойства

развернуть все

Это свойство доступно только для чтения.

Имя подписанного раздела, указанного как строковый скалярный или символьный вектор. Если раздел не существует, объект создает раздел, используя связанный с ним тип сообщения.

Пример: "/chatter"

Типы данных: char | string

Это свойство доступно только для чтения.

Тип подписанных сообщений, указанный как строковый скалярный или символьный вектор. Этот тип сообщения остается связанным с темой.

Пример: "std_msgs/String"

Типы данных: char | string

Последнее сообщение, отправленное в раздел, указанное как Message объект. Message объект специфичен для данного MessageType. Если абонент не получил сообщение, то Message пуст объект.

Размер буфера очереди входящих сообщений, указанный как разделенная запятыми пара, состоящая из "BufferSize" и скаляр. Если сообщения поступают быстрее, чем может обработать обратный вызов, они удаляются после заполнения входящей очереди.

Свойство обратного вызова, указанное как дескриптор функции или массив ячеек. В первом элементе массива ячеек укажите дескриптор функции или строку, представляющую имя функции. В последующих элементах укажите данные пользователя.

Функция обратного вызова абонента требует не менее двух входных аргументов. Первый аргумент, src, является связанным объектом подписчика. Второй аргумент, msg, является полученным объектом сообщения. Заголовок функции обратного вызова:

function subCallback(src,msg)

Укажите NewMessageFcn свойство как:

sub.NewMessageFcn = @subCallback;

При установке обратного вызова дополнительные параметры передаются функции обратного вызова путем включения как функции обратного вызова, так и параметров в качестве элементов массива ячеек. Заголовок функции обратного вызова:

function subCallback(src,msg,userData)

Укажите NewMessageFcn свойство как:

sub.NewMessageFcn = {@subCallback,userData};

Формат сообщения, указанный как "object" или "struct". Это свойство необходимо задать при создании с помощью ввода «имя-значение». Для получения дополнительной информации см. Структуры сообщений ROS.

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

receiveОжидание нового сообщения ROS
rosmessageСоздание сообщений ROS

Примеры

свернуть все

Подключение к сети ROS. Настройте пример сети ROS. '/scan' тема публикуется в сети.

rosinit
Launching ROS Core...
Done in 0.95002 seconds.
Initializing ROS master on http://192.168.0.10:50060.
Initializing global node /matlab_global_node_87093 with NodeURI http://bat6315glnxa64:45715/
exampleHelperROSCreateSampleNetwork

Создание абонента для '/scan' с использованием структур сообщений. Дождитесь регистрации абонента на ведущем сервере.

sub = rossubscriber('/scan','DataFormat','struct');
pause(1);

Прием данных от абонента в виде структуры сообщений ROS. Укажите 10-секундный тайм-аут.

msg2 = receive(sub,10)
msg2 = struct with fields:
       MessageType: 'sensor_msgs/LaserScan'
            Header: [1x1 struct]
          AngleMin: -0.5216
          AngleMax: 0.5243
    AngleIncrement: 0.0016
     TimeIncrement: 0
          ScanTime: 0.0330
          RangeMin: 0.4500
          RangeMax: 10
            Ranges: [640x1 single]
       Intensities: []

Завершите работу таймеров, используемых выборочной сетью.

exampleHelperROSShutDownSampleNetwork

Завершение работы сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_87093 with NodeURI http://bat6315glnxa64:45715/
Shutting down ROS master on http://192.168.0.10:50060.

Функции обратного вызова можно запускать, когда абоненты получают сообщения. Укажите обратный вызов при его создании или использовании NewMessageFcn собственность.

Подключение к сети ROS.

rosinit
Launching ROS Core...
Done in 1.032 seconds.
Initializing ROS master on http://192.168.0.10:57575.
Initializing global node /matlab_global_node_96417 with NodeURI http://bat6315glnxa64:37225/

Установка издателя для публикации сообщения в '/chatter' тема. Этот раздел используется для инициирования обратного вызова абонента. Укажите Data свойство сообщения. Подождите 1 секунду, чтобы разрешить издателю зарегистрироваться в сети.

pub = rospublisher('/chatter','std_msgs/String','DataFormat','struct');
msg = rosmessage(pub);
msg.Data = 'hello world';
pause(1)

Настройка абонента с указанной функцией обратного вызова. exampleHelperROSChatterCallback функция отображает Data внутри принятого сообщения.

sub = rossubscriber('/chatter',@exampleHelperROSChatterCallback,'DataFormat','struct');
pause(1)

Отправьте сообщение через издателя. Абонент должен выполнить обратный вызов для отображения нового сообщения. Дождитесь получения сообщения.

send(pub,msg);
pause(1)
ans = 
'hello world'

Завершение работы сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_96417 with NodeURI http://bat6315glnxa64:37225/
Shutting down ROS master on http://192.168.0.10:57575.

Использование ROS Subscriber объект для приема сообщений по сети ROS.

Запустите ядро и узел ROS.

master = ros.Core;
Launching ROS Core...
Done in 0.67744 seconds.
node = ros.Node('/test');

Создайте издателя и подписчика для отправки и получения сообщения по сети ROS. Использовать сообщения ROS в качестве структур.

pub = ros.Publisher(node,'/chatter','std_msgs/String','DataFormat','struct');
sub = ros.Subscriber(node,'/chatter','std_msgs/String','DataFormat','struct');

Отправка сообщения по сети.

msg = rosmessage(pub);
msg.Data = 'hello world';
send(pub,msg)

Просмотр данных сообщения с помощью LatestMessage имущества Subscriber объект.

pause(1)
sub.LatestMessage
ans = struct with fields:
    MessageType: 'std_msgs/String'
           Data: 'hello world'

Удалите издателя, подписчика и узел ROS. Завершите работу хозяина ROS.

clear('pub','sub','node')
clear('master')

Вопросы совместимости

развернуть все

Изменение поведения в будущем выпуске

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

.
Представлен в R2019b