При использовании Simulink® для связи с сетью ROS или работы с функциями ROS существуют несколько точек, которые необходимо отметить относительно ее взаимодействия с MATLAB® и сети ROS.
Simulink использует функциональность, встроенную в MATLAB, для связи с сетью ROS во время симуляции. При попытке решить проблемы в Simulink можно использовать MATLAB для просмотра тем или сообщений, доступных в мастере ROS. Для получения дополнительной информации о темах ROS и сообщениях смотрите rosnode
, rostopic
, или rosmsg
.
По умолчанию Simulink использует возможности MATLAB ROS для разрешения сетевой информации, такой как адрес ведущего ROS. Эта сетевая информация также может быть задана в Simulink с помощью диалогового окна Configure ROS Network Addresses.
Каждая модель связана с уникальным узлом ROS. В начале каждой симуляции Simulink создает узел и удаляет его, когда симуляция прекращена. Если несколько моделей открыты и моделируются, каждая модель получит свой собственный выделенный узел, но все узлы будут соединяться с одним и тем же мастером ROS. Это связано с тем, что во всех моделях используются одинаковые настройки сетевых адресов ROS.
В симуляции имя узла ROS Simulink <modelName>_<random#>
. Это принимает имя модели и добавляет случайное число в конец, чтобы избежать конфликтов по совпадению имен узлов.
В сгенерированном коде имя узла <modelName>
(обсадная колонна сохранена). Имя модели также используется в архиве, используемом для сгенерированного кода. Не переименовывайте файл tgz из генерации кода (например, ModelName.tgz). Имя файла используется для получения имени пакета ROS и инициирования сборки.
В симуляции выполнение модели не совпадает с реальным истекшим временем. Блоки в модели оцениваются в цикле, который только имитирует прогрессию времени и скорость которого зависит от сложности модели и скорости компьютера. Он не предназначен для отслеживания фактического времени синхроимпульса.
В сгенерированном коде выполнение модели пытается соответствовать фактическому истекшему времени (размер Fixed-step определяет фактический временной шаг, в секундах, который используется для цикла обновления модели). Однако это не гарантирует эффективности в реальном времени, так как зависит от других процессов, выполняемых в системе Linux, и сложности модели. Если развернутая модель слишком медлена, чтобы соответствовать частоте выполнения, задачи отбрасываются. Это падение называется «переполнением», и модель ожидает следующей запланированной задачи. Для получения дополнительной информации смотрите раздел «Режим выполнения задач» в примере «Сгенерируйте автономный узел ROS из Simulink ®».
Можно также изменить, как ваш сгенерированный код запускается для развернутого узла ROS с помощью rosdevice
. The rosdevice
Объект позволяет подключаться к устройству ROS, запуску узлы, которые развернуты, и изменять файлы на устройстве.
Все издатели и подписчики, созданные с помощью блоков Publish и Subscribe, будут соединяться с узлом ROS для этой модели. Они создаются во время инициализации модели, и имена тем разрешаются одновременно. Издатели и подписчики удаляются при завершении симуляции.
ПРИМЕЧАНИЕ. Если для блока Subscribe задано пользовательское имя темы, то эта тема не должна существовать при инициализации модели. Блок Subscribe будет выводить пустые сообщения до тех пор, пока не получит сообщение по указанному имени темы. Это позволяет вам установить и протестировать модели до того, как остальная сеть будет установлена.
Simulink поддерживает модель-ссылку при использовании блоков ROS с одним ограничением. Несколько ссылок на одну и ту же модель приводит к ошибке из-за дублирования шин с таким же именем, создаваемых для сообщений ROS, используемых блоками ROS. Ссылаться на модель можно только один раз в родительской модели.