Simulink и взаимодействие ROS

При использовании Simulink®, чтобы связаться с сетью ROS или работать с функциональностью ROS, существует несколько моментов, которых необходимо отметить, относительно ее взаимодействия с MATLAB® и сетью ROS.

Информация о ROS MATLAB

Simulink использует функциональность, встроенную в MATLAB, чтобы связаться с сетью ROS во время симуляции. При попытке отладить проблемы в Simulink, можно использовать MATLAB, чтобы просмотреть темы или сообщения, доступные на ведущем устройстве ROS. Для получения дополнительной информации о темах ROS и сообщениях, смотрите rosnode, rostopic или rosmsg.

По умолчанию Simulink использует MATLAB возможности ROS разрешить сетевую информацию, такую как адрес ведущего устройства ROS. Эта сетевая информация может также быть указана в Simulink с помощью Сконфигурировать диалогового окна Адресов Сети ROS.

Simulink узел ROS

Каждая модель сопоставлена с уникальным узлом ROS. В начале каждой симуляции Simulink создает узел и удаляет его, когда симуляция отключена. Если многоуровневые модели будут открыты и быть моделируемым, каждая модель получит свой собственный специализированный узел, но все узлы соединятся с тем же ведущим устройством ROS. Это вызвано тем, что все модели используют те же настройки адреса сети ROS.

В симуляции именем узла ROS Simulink является <modelName>_<random#>. Это берет имя модели и добавляет случайное число в конец, чтобы избежать конфликтов имени узла.

В сгенерированном коде именем узла является <modelName> (случающийся сохраненный). Имя модели также используется в архиве, используемом для сгенерированного кода. Не переименовывайте tgz файл от генерации кода (например, ModelName.tgz). Имя файла используется, чтобы получить имя пакета ROS и инициировать сборку.

Различия между симуляцией и сгенерированным кодом

В симуляции образцовое выполнение не совпадает с действительным прошедшим временем. Блоки в модели оценены в цикле, который только моделирует прогрессию времени, и чья скорость зависит от сложности компьютерной скорости и модели. Это не предназначается, чтобы отследить фактическое время часов.

В сгенерированном коде образцовое выполнение пытается совпадать с фактическим прошедшим временем (размер Фиксированного шага задает фактический временной шаг в секундах, который используется для образцового цикла обновления). Однако это не гарантирует производительность в реальном времени, когда это зависит от других процессов, работающих на системе Linux и сложности модели. Если развернутая модель также не спешит встречать частоте выполнения, задачи пропущены. Это отбрасывание называется "переполнением", и модель ожидает следующей запланированной задачи. Для получения дополнительной информации смотрите раздел Tasking Mode в Том, чтобы генерировать Автономный Узел ROS от примера Simulink®.

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

Издатели и подписчики в Simulink

Все издатели и подписчики создали использование, Публикуют и Подписываются, блоки соединятся с узлом ROS для той модели. Они создаются во время образцовой инициализации, и названия темы разрешены одновременно. Издатели и подписчики удалены, когда симуляция отключена.

ПРИМЕЧАНИЕ: Если пользовательское название темы задано для блока Subscribe, тема не требуется, чтобы существовать, когда модель инициализируется. Блок Subscribe выведет пустые сообщения, пока он не получит сообщение на названии темы, которое вы задаете. Это позволяет вам устанавливать и тестовые модели, прежде чем остальная часть сети была настройкой.

Модель - ссылка ROS

Simulink поддерживает модель - ссылку при использовании блоков ROS с одним ограничением. Несколько ссылок на ту же модель приводят к ошибке, должной копировать шины с тем же именем, создаваемым для сообщений ROS, используемых блоками ROS. Можно только сослаться на модель однажды в родительской модели.