rosmessage

Создайте сообщения ROS

Описание

пример

msg = rosmessage(messagetype) создает пустой объект сообщения ROS с типом сообщения. messagetype строковый скаляр является чувствительным к регистру, и никакие частичные соответствия не позволены. Это должно совпадать с сообщением в списке, данном путем вызова rosmsg("list").

Примечание

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

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

пример

msg = rosmessage(pub) создает пустое сообщение, определенное темой, опубликованной pub.

msg = rosmessage(sub) создает пустое сообщение, определенное подписанной темой sub.

msg = rosmessage(client) создает пустое сообщение, определенное сервисом, сопоставленным с client.

msg = rosmessage(server) создает пустое сообщение, определенное сервисным типом server.

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

Примеры

свернуть все

Создайте сообщение ROS как структуру с std_msgs/String тип сообщения.

strMsg = rosmessage("std_msgs/String","DataFormat","struct")
strMsg = struct with fields:
    MessageType: 'std_msgs/String'
           Data: ''

Запустите ведущее устройство 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.

Можно создать массив структур, чтобы хранить несколько сообщений. Массив является индексируемым, похожим на любой другой массив. Можно изменить свойства каждого объекта или доступа определенные свойства от каждого элемента с помощью записи через точку.

Создайте массив двух сообщений. Задайте DataFormat аргумент значения имени, чтобы использовать структуры для сообщений ROS.

blankMsg = rosmessage("std_msgs/String","DataFormat","struct")
blankMsg = struct with fields:
    MessageType: 'std_msgs/String'
           Data: ''

msgArray = [blankMsg blankMsg]
msgArray=1×2 struct array with fields:
    MessageType
    Data

Присвойте данные отдельным полям сообщения в массиве.

msgArray(1).Data = 'Some string'; 
msgArray(2).Data = 'Other string';

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

allData = {msgArray.Data}
allData = 1x2 cell
    {'Some string'}    {'Other string'}

Чтобы предварительно выделить массив с помощью сообщений ROS в качестве объектов, используйте arrayfun или cellfun функции вместо repmat. Эти функции правильно создают массивы объектов или массивы ячеек для классов Handle.

Примечание: В будущем релизе, объекты сообщения ROS будут удалены. Чтобы использовать сообщения ROS в качестве структур и использовать массивы структур, задайте DataFormat пара "имя-значение" при вызове rosmessage функция.

Предварительно выделите объектный массив сообщений ROS.

msgArray = arrayfun(@(~) rosmessage("std_msgs/String"),zeros(1,50));

Предварительно выделите массив ячеек сообщений ROS.

msgCell = cellfun(@(~) rosmessage("std_msgs/String"),cell(1,50),"UniformOutput",false);

Входные параметры

свернуть все

Тип сообщения в виде строкового скаляра или вектора символов. Строка является чувствительной к регистру, и никакие частичные соответствия не позволены. Это должно совпадать с сообщением в списке, данном путем вызова rosmsg("list").

Издатель ROS в виде Publisher указатель на объект. Можно создать объектное использование rospublisher.

Подписчик ROS в виде Subscriber указатель на объект. Можно создать объектное использование rossubscriber.

Сервисный клиент ROS в виде ServiceClient указатель на объект. Можно создать объектное использование rossvcclient.

Сервисный сервер ROS в виде ServiceServer указатель на объект. Можно создать объектное использование rossvcserver.

Выходные аргументы

свернуть все

Сообщение ROS, возвращенное как Message указатель на объект или структура.

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

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

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

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

Введенный в R2019b