rossubscriber

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

Описание

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

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

Примечание

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

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

Можно создать Subscriber объект при помощи rossubscriber function, или вызовом 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, который запускается, когда указатель на объект абонента получает сообщение тематики. Используйте этот синтаксис, чтобы избежать блокировки функции приема. The 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. The 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 объект. The Message объект специфичен для заданного MessageType. Если абонент не получил сообщение, то Message объект пуст.

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

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

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

function subCallback(src,msg)

Задайте NewMessageFcn свойство как:

sub.NewMessageFcn = @subCallback;

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

function subCallback(src,msg,userData)

Задайте NewMessageFcn свойство как:

sub.NewMessageFcn = {@subCallback,userData};

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

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

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

Примеры

свернуть все

Подключение к сети ROS. Настройте образец сети ROS. The '/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' тема с использованием структур сообщений. Подождите, пока абонент зарегистрируется в master.

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/

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

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

Настройка абонента с заданной функцией обратного вызова. The 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
Для просмотра документации необходимо авторизоваться на сайте