Пользовательские сообщения являются пользовательскими сообщениями, что можно использовать, чтобы расширить набор типов сообщений, в настоящее время поддержанных в Robotics System Toolbox™. Если вы отправляете и получаете поддерживаемые типы сообщений, вы не должны использовать пользовательские сообщения. Чтобы видеть список поддерживаемых типов сообщений, вызовите rosmsg list
в Командном окне MATLAB®.
Чтобы установить пользовательскую поддержку сообщения, вызовите roboticsAddons
и следуйте инструкциям для установки. Пользовательское создание сообщения требует пакетов ROS, которые детализированы в Wiki ROS в Пакетах. После обеспечения, что у вас есть допустимые пакеты ROS для пользовательских сообщений, вызовите rosgenmsg
, чтобы сгенерировать необходимый код MATLAB, чтобы использовать пользовательские сообщения. Для примера о том, как сгенерировать ROS пользовательское сообщение в MATLAB, seeCreate Пользовательские сообщения от Пакета ROS.
Пользовательские сообщения ROS заданы в папках пакета ROS, которые содержат файл package.xml
и дополнительные директории msg
и srv
. Папка msg
содержит все ваши пользовательские определения типа сообщения. Необходимо также добавить все определения типа службы поддержки папке srv
. Например, пакет custom_robot_msgs
имеет эту структуру папок и файловую структуру.
Пакет содержит один пользовательский тип сообщения в RobotTopic.msg
и один тип службы поддержки в RobotService.srv
. MATLAB использует эти файлы, чтобы сгенерировать необходимые файлы для использования пользовательских сообщений, содержавшихся в пакете. Для получения дополнительной информации о создании msg
и файлов srv
, смотрите Создание сообщения ROS и srv и Определения Пользовательских сообщений на Wiki ROS. Синтаксис этих файлов описан на страницах, характерных для msg
и srv
.
Во всех пакетах необходимо задать файл package.xml
, который имеет следующее содержимое:
Имя — custom_robot_msgs
Версия — 1.1.01
Зависимость — message_generation
Другие зависимости от (дополнительных) пакетов сообщения — geometry_msgs
, std_msgs
Вот демонстрационный файл package.xml
с ранее показанным содержимым.
<package> <name>custom_robot_msgs</name> <version>1.1.01</version> <build_depend>message_generation</build_depend> <build_depend>geometry_msgs</build_depend> <build_depend>std_msgs</build_depend> </package>
У вас должен быть доступ для записи к пользовательской папке сообщений.
В любое время на пути MATLAB должна только быть одна пользовательская папка сообщений. Эта папка может содержать несколько пакетов, но рекомендуется, чтобы вы сохранили их всех в одной уникальной папке.
Действия ROS в настоящее время не поддержаны и будут проигнорированы во время пользовательской генерации сообщения.
Пакеты ROS не будут обработаны, если оба из этих условий будут соблюдать:
Пакет с тем же именем уже существует
Номером версии которого существующий пакет является тем же самым
Когда определения сообщения ROS преобразованы в MATLAB, имена полей преобразованы в свойства для объекта сообщения. Свойства объектов всегда начинаются с прописной буквы и не содержат символы нижнего подчеркивания. Имена полей изменяются, чтобы соответствовать этому соглашению о присвоении имен. Первая буква и первая буква после символов нижнего подчеркивания использованы для своей выгоды с удаленными символами нижнего подчеркивания. Например, сообщение sensor_msgs/Image
имеет эти поля в ROS:
header height width encoding is_bigendian step data
Конвертированные свойства MATLAB:
Header Height Width Encoding IsBigendian Step Data
Это также отражается при использовании сообщений ROS в Simulink®. Шины сообщения ROS используют те же имена свойств в качестве MATLAB.
Если у вас есть своя пользовательская структура сообщения, настроенная, как описано в предыдущем разделе, можно создать код, должен был использовать эти пользовательские сообщения. Во-первых, вы вызываете rosgenmsg
со своим известным путем к пользовательским файлам сообщений, чтобы создать код MATLAB.
Затем два основных шага создания, которые обработаны функцией rosgenmsg
. Эта функция берет ваши пользовательские файлы сообщений (.msg
, .srv
и package.xml
) и преобразовывает каждый тип сообщения в рабочий код MATLAB. Функция rosgenmsg
будет искать файлы .msg
в папке msg
и для файлов .srv
в папке srv
. Этот код является группой классов, которые задают свойства сообщения, когда вы создаете новые пользовательские сообщения. Основная процедура берет пользовательские файлы сообщений и преобразовывает их в файлы .jar
и затем создает программу MATLAB для каждой темы и сервиса. Не изменяйте файлы .jar
, потому что MATLAB использует их внутренне.
После того, как функция rosgenmsg
создает эти файлы, необходимо добавить файлы в путь к классу Java и путь MATLAB, прежде чем можно будет использовать пользовательские сообщения. Эти шаги даны как подсказки в Окне Команды MATLAB:
Добавьте местоположение файлов к javaclasspath.txt
: Добавьте заданные пути как новые строки текста в файле javaclasspath.txt
. Если этот файл не существует, сообщение в командном окне предлагает вам создавать его. Этот текстовый файл задает статический путь к классу для классов Java. Для получения дополнительной информации о пути к классу Java смотрите Путь к классу Java (MATLAB).
Добавьте местоположение файлов класса к пути MATLAB: Используйте addpath
, чтобы добавить новые местоположения файлов с расширением.m к пути MATLAB и использовать savepath
, чтобы сохранить эти изменения.
Перезапустите MATLAB и проверьте, что сообщения доступны: После перезапуска MATLAB вызовите
или rosmsg list
rosmessage
, чтобы проверять, что можно использовать сообщения как ожидалось.
Для примера этой процедуры смотрите, Создают Пользовательские сообщения из Пакета ROS. Этот пример использует демонстрационные пользовательские файлы сообщений, чтобы создать пользовательские сообщения в MATLAB.
Необходимо завершить эту процедуру только однажды для определенного набора пользовательских сообщений. После этого можно использовать новые пользовательские сообщения как любое другое сообщение ROS в MATLAB и использовать в своих интересах полную функциональность ROS, которую обеспечивает Robotics System Toolbox. Повторите эту процедуру генерации, когда требуется обновить или создать новые типы сообщений.
Необходимо поддержать путь к классу Java и путь MATLAB, которые содержат директории файлов. Убедитесь, что путь MATLAB имеет только одну папку за один раз, которая содержит пользовательские артефакты сообщения. Кроме того, гарантируйте, что вы добавляете правильные пути к javaclasspath.txt
, когда подсказка направляет. Не изменяйте путь. Этот файл используется, чтобы загрузить файлы Java в начале каждого сеанса работы с MATLAB.
После создания ваших пользовательских файлов сообщений можно совместно использовать их с другими пользователями. Другие люди не должны вызывать rosgenmsg
, чтобы получить доступ к вашим сообщениям. Вместо этого чтобы совместно использовать ваши сообщения, получите доступ к папке _matlab_gen
и выполните те же три шага для определения путей, как описано ранее. Если у вас есть доступ к этим файлам, или по сетевому или общему диску, добавьте путь к папке matlab_gen/jar
к файлу javaclasspath.txt
и путь matlab_gen/msggen
к пути MATLAB. После перезапуска MATLAB другие пользователи могут использовать пользовательские сообщения как любое другое сообщение ROS.
Пользовательское сообщение и сервисные типы могут использоваться с блоками Simulink ROS для генерации Кода С++ для автономного узла ROS. Сгенерированный код (архив .tgz
) будет включать определения Simulink для пользовательских сообщений, но это не будет включать ROS пользовательские пакеты сообщения. Когда сгенерированный код будет создан в целевой Системе Linux, он ожидает, что пользовательские пакеты сообщения будут доступны в рабочей области сережки или на ROS_PACKAGE_PATH
. Гарантируйте, что вы или устанавливаете или копируете пользовательский пакет сообщения в свою систему Linux прежде, чем создать сгенерированный код.