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) задает, фиксируется ли издатель с булевской переменной, 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.80553 seconds.
Initializing ROS master on http://192.168.0.10:53160.
Initializing global node /matlab_global_node_61972 with NodeURI http://bat1071901glnxa64:34905/

Создайте издателя для /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_61972 with NodeURI http://bat1071901glnxa64:34905/
Shutting down ROS master on http://192.168.0.10:53160.

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

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

rosinit
Launching ROS Core...
Done in 0.79109 seconds.
Initializing ROS master on http://192.168.0.10:60803.
Initializing global node /matlab_global_node_80802 with NodeURI http://bat1071901glnxa64:40079/

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

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_80802 with NodeURI http://bat1071901glnxa64:40079/
Shutting down ROS master on http://192.168.0.10:60803.

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

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

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