При использовании 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 и инициирования сборки.
При моделировании выполнение модели не соответствует действительному прошедшему времени. Блоки в модели оцениваются в цикле, который моделирует только прогрессирование времени и скорость которого зависит от сложности модели и скорости компьютера. Он не предназначен для отслеживания фактического тактового времени.
В сгенерированном коде выполнение модели пытается сопоставить фактическое прошедшее время (размер фиксированного шага определяет фактический шаг времени в секундах, который используется для цикла обновления модели). Однако это не гарантирует производительность в реальном времени, так как зависит от других процессов, работающих в системе Linux, и сложности модели. Если развернутая модель слишком медленная, чтобы соответствовать частоте выполнения, задачи удаляются. Это падение называется «переполнением», и модель ожидает следующей запланированной задачи. Дополнительные сведения см. в разделе Режим задания в примере Создание автономного узла ROS из Simulink ®.
Можно также изменить способ выполнения созданного кода для развернутого узла ROS с помощью rosdevice. rosdevice объект позволяет подключаться к устройству ROS, запускать развернутые узлы и изменять файлы на устройстве.
Все издатели и подписчики, созданные с помощью блоков публикации и подписки, соединятся с узлом ROS для этой модели. Они создаются во время инициализации модели, и имена тем решаются одновременно. Издатели и подписчики удаляются после завершения моделирования.
ПРИМЕЧАНИе.Если для блока Subscribe указано имя пользовательского раздела, то при инициализации модели этот раздел не обязательно должен существовать. Блок Subscribe будет выводить пустые сообщения, пока не получит сообщение с указанным именем темы. Это позволяет настраивать и тестировать модели до настройки остальной части сети.
Simulink поддерживает ссылку на модель при использовании блоков ROS с одним ограничением. Несколько ссылок на одну и ту же модель приводят к ошибке из-за создания дубликатов шин с одинаковым именем для сообщений ROS, используемых блоками ROS. Можно ссылаться на модель только один раз в родительской модели.