exponenta event banner

rospublisher

Опубликуйте сообщение по теме

Описание

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

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

Примечание

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

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

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

Можно создать Publisher объект с помощью rospublisher функция, или путем вызова 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) задает, фиксируется ли издатель с Boolean, value. Если издатель фиксируется, это сохраняет последнее отправленное сообщение и отправляет его любым новым подписчикам. По умолчанию, IsLatching включен.

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

Свойства

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

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

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

Пример: "/chatter"

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

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

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

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

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

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

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

Типы данных: логический

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

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

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

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

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

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

Примеры

свернуть все

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

rosinit
Launching ROS Core...
Done in 0.63747 seconds.
Initializing ROS master on http://192.168.0.10:55882.
Initializing global node /matlab_global_node_44662 with NodeURI http://bat6312glnxa64:35509/

Создайте издателя для /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_44662 with NodeURI http://bat6312glnxa64:35509/
Shutting down ROS master on http://192.168.0.10:55882.

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

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

rosinit
Launching ROS Core...
Done in 0.65747 seconds.
Initializing ROS master on http://192.168.0.10:57791.
Initializing global node /matlab_global_node_88475 with NodeURI http://bat6312glnxa64:42581/

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

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_88475 with NodeURI http://bat6312glnxa64:42581/
Shutting down ROS master on http://192.168.0.10:57791.

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

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

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