rossubscriber

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

Описание

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

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

Можно создать 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 = 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 для входящих сообщений. Можно использовать любую комбинацию предыдущих входных параметров с этим синтаксисом.

Свойства

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

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

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

Пример: "/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};

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

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

Примеры

свернуть все

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

rosinit
Launching ROS Core...
................................Done in 1.1674 seconds.
Initializing ROS master on http://192.168.0.10:53810.
Initializing global node /matlab_global_node_30783 with NodeURI http://bat1072001glnxa64:36363/
exampleHelperROSCreateSampleNetwork

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

sub = rossubscriber('/scan');
pause(1);

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

msg2 = receive(sub,10)
msg2 = 
  ROS LaserScan message with properties:

       MessageType: 'sensor_msgs/LaserScan'
            Header: [1x1 Header]
          AngleMin: -0.5216
          AngleMax: 0.5243
    AngleIncrement: 0.0016
     TimeIncrement: 0
          ScanTime: 0.0330
          RangeMin: 0.4500
          RangeMax: 10
            Ranges: [640x1 single]
       Intensities: [0x1 single]

  Use showdetails to show the contents of the message

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

exampleHelperROSShutDownSampleNetwork

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

rosshutdown
Shutting down global node /matlab_global_node_30783 with NodeURI http://bat1072001glnxa64:36363/
Shutting down ROS master on http://192.168.0.10:53810.
..........

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

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

rosinit
Launching ROS Core...
..................................Done in 1.1948 seconds.
Initializing ROS master on http://192.168.0.10:59263.
Initializing global node /matlab_global_node_62135 with NodeURI http://bat1072001glnxa64:42003/

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

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

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

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

Отправьте сообщение через издателя. Подписчик должен выполнить коллбэк, чтобы отобразить новое сообщение. Ожидайте сообщения, которое будет получено.

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

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

rosshutdown
Shutting down global node /matlab_global_node_62135 with NodeURI http://bat1072001glnxa64:42003/
Shutting down ROS master on http://192.168.0.10:59263.
..........

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

Запустите ведущее устройство ROS и узел.

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

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

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

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

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

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

pause(1)
sub.LatestMessage
ans = 
  ROS String message with properties:

    MessageType: 'std_msgs/String'
           Data: 'hello world'

  Use showdetails to show the contents of the message

Очистите издателя, подписчика и узел ROS. Закройте ведущее устройство ROS.

clear('pub','sub','node')
clear('master')
.......
Введенный в R2019b