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