ros2genmsg

Сгенерируйте пользовательские сообщения от ROS 2 определения

Синтаксис

Описание

пример

ros2genmsg(folderpath) генерирует интерфейсы MATLAB® к ROS 2 пользовательские сообщения. Задайте путь к родительской папке, которая содержит определения пользовательских сообщений как .msg файлы.

У вас должно быть следующее, установленное в вашей системе:

  • Python 3.7 +

  • CMake 3.10 +

  • Компилятор C++, чтобы совпадать со средой сборки

    • Visual Studio 2017

    • XCode 10.x

    • GCC 6.3.x

Примеры

свернуть все

Пользовательские сообщения являются пользовательскими сообщениями, что можно использовать, чтобы расширить набор типов сообщений, в настоящее время поддержанных в ROS 2. Если вы отправляете и получаете поддерживаемые типы сообщений, вы не должны использовать пользовательские сообщения. Чтобы видеть список поддерживаемых типов сообщений, вызовите ros2 msg list в Командном окне MATLAB®. Для получения дополнительной информации о поддерживаемых сообщениях ROS 2, смотрите работу с Основными сообщениями ROS 2.

Чтобы использовать ROS 2 пользовательские сообщения, у вас должно быть следующее, установленное на вашем компьютере:

Пользовательское Содержимое сообщений

Пользовательские сообщения ROS 2 заданы в папках ROS 2 пакета, которые содержат msg директория. msg папка содержит все ваши пользовательские определения типа сообщения. Например, пакет example_b_msgs, в custom папка, имеет ниже структуры папок и файловой структуры.

Пакет содержит один пользовательский тип сообщения, Standalone.msg. MATLAB использует эти файлы, чтобы сгенерировать необходимые файлы для использования пользовательских сообщений, содержавшихся в пакете. Для получения дополнительной информации о соглашениях о присвоении имен сообщения см. Определение Интерфейса ROS 2.

В этом примере вы проходите процедуру для создания ROS 2 пользовательские сообщения в MATLAB®. У вас должен быть пакет ROS 2, который содержит необходимый msg файл.

После обеспечения, что ваш пользовательский пакет сообщения правилен, отметьте местоположение пути к папке, и затем, вызовите ros2genmsg с заданным путем. Следующий пример предоставил трем сообщениям example_package_a, example_package_b, и example_package_c это имеет зависимости. Этот пример также иллюстрирует, что можно использовать папку, содержащую несколько сообщений, и сгенерировать их всех одновременно.

Чтобы настроить пользовательские сообщения в MATLAB, откройте MATLAB на новом сеансе. Поместите свою пользовательскую папку сообщения в местоположение и отметьте путь к папке. В этом примере пользовательская папка интерфейса сообщения присутствует в текущем каталоге. Если вы создаете пользовательские пакеты сообщения в отдельном месте, обеспечьте соответствующий путь к папке, которая содержит пользовательские пакеты сообщения.

folderPath = fullfile(pwd,"custom");
copyfile("example_*_msgs",folderPath);

Задайте путь к папке для пользовательских файлов сообщений и вызовите ros2genmsg создать пользовательские сообщения для MATLAB.

ros2genmsg(folderPath)
Identifying message files in folder 'H:/Documents/MATLAB/Examples/ros-ex44405863/custom'.Done.
Validating message files in folder 'H:/Documents/MATLAB/Examples/ros-ex44405863/custom'.Done.
Generating MATLAB interfaces.Done.
Running colcon build in folder 'H:/Documents/MATLAB/Examples/ros-ex44405863/custom/matlab_msg_gen/win64'.Done.
build log

Вызовите ros2 msg list проверять создание новых пользовательских сообщений.

Можно теперь использовать вышеупомянутое созданное пользовательское сообщение, когда стандарт обменивается сообщениями. Для получения дополнительной информации об отправке и получении сообщений, смотрите, обмениваются Данными с ROS 2 Издателя и Подписчики.

Создайте издателя, чтобы использовать example_package_b/Standalone сообщение.

node = ros2node("/node_1");
pub = ros2publisher(node,"/example_topic","example_b_msgs/Standalone");

Создайте подписчика по той же теме.

sub = ros2subscriber(node,"/example_topic");

Создайте сообщение и отправьте сообщение.

custom_msg = ros2message("example_b_msgs/Standalone");
custom_msg.int_property = uint32(12);
custom_msg.string_property='This is ROS 2 custom message example';
send(pub,custom_msg);
pause(3)    % Allow a few seconds for the message to arrive

Используйте LatestMessage поле, чтобы знать недавнее сообщение, полученное подписчиком.

sub.LatestMessage
ans = struct with fields:
       int_property: 12
    string_property: 'This is ROS 2 custom message example'

Удалите созданные объекты ROS.

clear node pub sub

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

свернуть все

Путь к родительской папке ROS передает пакеты в виде строкового скаляра или вектора символов. Родительская папка должна содержать package.xml файл и папки пакета. Эти папки содержат /msg папка с .msg файлы для определений сообщения. Для получения дополнительной информации займитесь Интерфейсами ROS 2.

Пример: "/opt/ros2/kinetic/share"

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

Ограничения

Перезапустите узлы

  • После генерации пользовательских сообщений перезапустите любой существующий ROS 2 узла.

Генерация кода с пользовательскими сообщениями:

  • Пользовательское сообщение и сервисные типы могут использоваться с функциональностью ROS 2 в генерации Кода С++ для автономного узла ROS 2. Сгенерированный код (.tgz архив) будет включать определения для пользовательских сообщений, но это не будет включать ROS 2 пользовательские пакеты сообщения. Когда сгенерированный код будет создан в месте назначения, он ожидает, что пользовательские пакеты сообщения будут доступны в colcon рабочей области, которая должна быть вашей текущей рабочей директорией. Гарантируйте, что вы или устанавливаете или копируете пользовательский пакет сообщения в свою систему прежде, чем создать сгенерированный код.

MATLAB Compiler

  • ROS 2 пользовательские сообщения и ros2genmsg функция не поддерживается с MATLAB Compiler™.

Введенный в R2019b