exponenta event banner

rosmessage

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

Описание

пример

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

Примечание

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

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

Создайте массив из двух сообщений. Укажите 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. Эти функции правильно создают массивы объектов или ячеек для классов дескрипторов.

Примечание.В будущей версии объекты сообщений 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.

Абонент АФК, указанный как Subscriber дескриптор объекта. Объект можно создать с помощью rossubscriber.

Клиент службы ROS, указанный как ServiceClient дескриптор объекта. Объект можно создать с помощью rossvcclient.

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

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

свернуть все

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

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

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

Изменение поведения в будущем выпуске

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

.
Представлен в R2019b