exponenta event banner

rospublisher

Публикация сообщения по теме

Описание

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

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

Примечание

В следующем выпуске Панель инструментов ROS будет использовать структуры сообщений вместо объектов для сообщений 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 аргумент. Значение не может быть изменено после создания.

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

Число подписчиков на опубликованный раздел, указанное как целое число.

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

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

Формат сообщения, указанный как "object" или "struct". Это свойство необходимо задать при создании с помощью ввода «имя-значение». Для получения дополнительной информации см. Структуры сообщений 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 с помощью конструктора класса.

Запустите ядро АФК.

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