rospublisher

Опубликовать сообщение по теме

Описание

Использование rospublisher для создания издателя ROS для отправки сообщений через сеть ROS. Чтобы создать сообщения ROS, используйте rosmessage. Отправляйте эти сообщения через издатель ROS с send функция.

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

Примечание

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

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

Издатель получает тип сообщения темы из списка тем в мастере ROS. Когда MATLAB® глобальный узел публикует сообщения по этой теме, узлы ROS, которые подписаны на эту тему, получают эти сообщения. Если тема отсутствует в списке основных тем ROS, эта функция выводит сообщение об ошибке. Если основной список тем ROS уже содержит соответствующий раздел, мастер ROS добавляет глобальный узел MATLAB в список издателей для этого раздела. Чтобы увидеть список доступных имен тем, в командной строке MATLAB введите rostopic list.

Можно создать Publisher объект с использованием rospublisher function, или вызовом ros.Publisher:

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

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

Создание

Описание

pub = rospublisher(topicname) создает издателя для определенного имени темы и устанавливает TopicName свойство. Тема должна уже существовать в главном списке тем ROS с установленным MessageType.

пример

pub = rospublisher(topicname,msgtype) создает издателя для темы и добавляет эту тему в список основных тем ROS. Входы устанавливаются в TopicName и MessageType свойства издателя. Если тема уже существует и msgtype отличается от типа темы в списке основных тем ROS, функция отображает сообщение об ошибке.

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

[pub,msg] = rospublisher(___) возвращает сообщение, msg, который можно отправить с издателем, pub. Сообщение инициализируется значениями по умолчанию. Вы также можете получить сообщение ROS с помощью rosmessage функция.

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

pub = ros.Publisher(node,topicname) создает издателя для темы с именем, topicname. node является ros.Node указатель на объект, к которому присоединен этот издатель. Если node задается как []издатель пытается прикрепить к глобальному узлу.

пример

pub = ros.Publisher(node,topicname,type) создает издателя с заданным типом сообщения, type. Если тема уже существует, MATLAB проверяет тип сообщения и отображает ошибку, если тип входа отличается. Если основной список тем ROS уже содержит соответствующий раздел, мастер ROS добавляет глобальный узел MATLAB в список издателей для этого раздела.

pub = ros.Publisher(___,"IsLatching",value) определяет, фиксирует ли издатель логический элемент, value. Если издатель фиксирует, он сохраняет последнее отправленное сообщение и отправляет его всем новым подписчикам. По умолчанию IsLatching включен.

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

Свойства

расширить все

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

Это свойство задано для создания TopicName аргумент. Значение не может быть изменено после создания.

Пример: "/chatter"

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

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

Это свойство задано при создании MessageType аргумент. Значение не может быть изменено после создания.

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

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

Индикатор фиксации издателя, заданный как true или false. Издатель, который фиксирует, сохраняет последнее отправленное сообщение и отправляет его всем новым подписчикам.

Это свойство задано для создания IsLatching аргумент. Значение не может быть изменено после создания.

Типы данных: logical

Количество подписчиков опубликованной темы в виде целого числа.

Это свойство задано для создания NumSubscribers аргумент. Значение не может быть изменено после создания.

Типы данных: double

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

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

sendОпубликовать сообщение ROS в разделе
rosmessageСоздание сообщений ROS

Примеры

свернуть все

Запустите мастер ROS.

rosinit
Launching ROS Core...
Done in 0.74013 seconds.
Initializing ROS master on http://192.168.0.10:51863.
Initializing global node /matlab_global_node_12392 with NodeURI http://bat6315glnxa64:44745/

Создайте издателя для /chatter тема с std_msgs/String тип сообщения. Установите "DataFormat" аргумент имя-значение для структуры сообщений ROS.

chatpub = rospublisher("/chatter","std_msgs/String","DataFormat","struct");

Создайте сообщение для отправки. Задайте Data свойство с вектором символов.

msg = rosmessage(chatpub);
msg.Data = 'test phrase';

Отправьте сообщение через издателя.

send(chatpub,msg);

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

rosshutdown
Shutting down global node /matlab_global_node_12392 with NodeURI http://bat6315glnxa64:44745/
Shutting down ROS master on http://192.168.0.10:51863.

Создайте издателя ROS и просмотрите связанные свойства для rospublisher объект. Добавьте абонента и просмотрите обновленные свойства.

Запустите мастер ROS.

rosinit
Launching ROS Core...
Done in 0.68493 seconds.
Initializing ROS master on http://192.168.0.10:55118.
Initializing global node /matlab_global_node_00753 with NodeURI http://bat6315glnxa64:41313/

Создайте издателя и просмотрите его свойства.

pub = rospublisher('/chatter','std_msgs/String','DataFormat','struct');

topic = pub.TopicName
topic = 
'/chatter'
subCount = pub.NumSubscribers
subCount = 0

Подпишитесь на тему издателя и просмотрите изменения в NumSubscribers свойство.

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

subCount = pub.NumSubscribers
subCount = 1

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

rosshutdown
Shutting down global node /matlab_global_node_00753 with NodeURI http://bat6315glnxa64:41313/
Shutting down ROS master on http://192.168.0.10:55118.

Создайте Publisher объект, использующий конструктор классов.

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

core = ros.Core;
Launching ROS Core...
Done in 0.77029 seconds.

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

node = ros.Node('/test1');

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

pub = ros.Publisher(node,'/robotname','std_msgs/String','DataFormat','struct');
msg = rosmessage(pub);
msg.Data = 'robot1';
send(pub,msg);

Очистить издатель и узел ROS. Завершите работу ведущего устройства ROS.

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

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

расширить все

Изменение поведения в будущем релизе

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

.
Введенный в R2019b