rossubscriber

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

Описание

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

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

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

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

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

Создание

Синтаксис

sub = rossubscriber(topicname)
sub = rossubscriber(topicname,msgtype)
sub = rossubscriber(topicname,callback)
sub = rossubscriber(topicname, msgtype,callback)
sub = rossubscriber(___,Name,Value)
sub = robotics.ros.Subscriber(node,topicname)
sub = robotics.ros.Subscriber(node,topicname,msgtype)
sub = robotics.ros.Subscriber(node,topicname,callback)
sub = robotics.ros.Subscriber(node,topicname,type,callback)
sub = robotics.ros.Subscriber(___,"BufferSize",value)

Описание

пример

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 = robotics.ros.Subscriber(node,topicname) подписывается на тему с именем, TopicName. node является указателем на объект robotics.ros.Node, к которому присоединяет этот издатель.

пример

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

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

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

sub = robotics.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
Initializing ROS master on http://bat6230glnxa64:38653/.
Initializing global node /matlab_global_node_39993 with NodeURI http://bat6230glnxa64:32967/
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

Сеть Shutdown ROS.

rosshutdown
Shutting down global node /matlab_global_node_39993 with NodeURI http://bat6230glnxa64:32967/
Shutting down ROS master on http://bat6230glnxa64:38653/.

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

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

rosinit
Initializing ROS master on http://bat6230glnxa64:43265/.
Initializing global node /matlab_global_node_50079 with NodeURI http://bat6230glnxa64:38475/

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

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

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

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

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

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

Сеть Shutdown ROS.

rosshutdown
Shutting down global node /matlab_global_node_50079 with NodeURI http://bat6230glnxa64:38475/
Shutting down ROS master on http://bat6230glnxa64:43265/.

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

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

master = robotics.ros.Core;
node = robotics.ros.Node('/test');

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

pub = robotics.ros.Publisher(node,'/chatter','std_msgs/String');
pause(1)
sub = robotics.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')

Представленный в R2015a