Пользовательские сообщения являются пользовательскими сообщениями, что можно использовать, чтобы расширить набор типов сообщений, в настоящее время поддержанных в ROS 2. Если вы отправляете и получаете поддерживаемые типы сообщений, вы не должны использовать пользовательские сообщения. Чтобы видеть список поддерживаемых типов сообщений, вызовите ros2 msg list
в Командном окне MATLAB®. Для получения дополнительной информации о поддерживаемых сообщениях ROS 2, смотрите работу с Основными сообщениями ROS 2.
Чтобы использовать ROS 2 пользовательские сообщения, у вас должно быть следующее, установленное на вашем компьютере:
Компилятор C++, чтобы совпадать со средой сборки (Visual Studio 2017, XCode 10.x, или GCC 6.3.x)
Смотрите отказ ROS 2 сборки модели в ROS поддержка Simulink и ограничения.
Пользовательские сообщения 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