rossubscriber

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

Описание

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

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

Примечание

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

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

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

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

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

Создание

Описание

пример

sub = rossubscriber(topicname) подписывается на тему с данным TopicNameТема.The должна уже существовать в ведущем списке тем 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 объект пуст.

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

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

Функция обратного вызова подписчика требует по крайней мере двух входных параметров. Первый аргумент, 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.82918 seconds.
Initializing ROS master on http://192.168.0.10:50686.
Initializing global node /matlab_global_node_20772 with NodeURI http://bat6312glnxa64:36949/
exampleHelperROSCreateSampleNetwork

Создайте подписчика для '/scan' тема с помощью структур сообщения. Ожидайте подписчика, чтобы указать с ведущим устройством.

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

Получите данные от подписчика как структура сообщения ROS. Задайте 10 вторых тайм-аутов.

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

status = logical
   1

statustext = 
'success'

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

exampleHelperROSShutDownSampleNetwork

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

rosshutdown
Shutting down global node /matlab_global_node_20772 with NodeURI http://bat6312glnxa64:36949/
Shutting down ROS master on http://192.168.0.10:50686.

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

Соединитесь с сетью ROS.

rosinit
Launching ROS Core...
Done in 0.62615 seconds.
Initializing ROS master on http://192.168.0.10:60904.
Initializing global node /matlab_global_node_08809 with NodeURI http://bat6312glnxa64:40519/

Setup издатель, чтобы опубликовать сообщение к '/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_08809 with NodeURI http://bat6312glnxa64:40519/
Shutting down ROS master on http://192.168.0.10:60904.

Используйте Subscriber ROS объект получить сообщения по сети ROS.

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

master = ros.Core;
Launching ROS Core...
Done in 0.62474 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