В этом примере показано, как настроить модель Simulink для отправки и получения информации из отдельного симулятора на основе ROS, такого как Gazebo ® через ROS 2.
Simulink можно использовать для подключения к физическому роботу с поддержкой ROS или к имитатору робота с поддержкой ROS, такому как «Беседка». В этом примере показано, как:
Настройка Simulink для подключения к отдельному имитатору робота с помощью ROS 2
Отправка команд скорости моделируемому роботу
Получение информации о положении от имитированного робота
Вот модель, которую вы создадите в этом примере.
open_system('robotROS2ConnectToRobotExample');Предпосылки: начало работы с ROS 2, обмен данными с издателями и подписчиками ROS 2, начало работы с ROS 2 в Simulink ®
В этой задаче запускается симулятор на основе ROS для робота с дифференциальным приводом вместе с мостом ROS, который воспроизводит сообщения ROS по сети ROS 2.
Запустите рабочий стол виртуальной машины Ubuntu ® с виртуальной машины с помощью ROS 2 Melodic и Gazebo.
На рабочем столе Ubuntu щелкните значок «Gazebo Empty», чтобы начать мир Gazebo.
Щелкните по пиктограмме «ROS Bridge» для ретрансляции сообщений между сетью ROS и ROS 2.
Симулятор принимает и отправляет сообщения по следующим темам:
Получает geometry_msgs/Twist сообщения команд velocity по теме/ cmd_vel.
Посылает nav_msgs/Odometry сообщения в /odom тема.
На вкладке Моделирование (Simulation) Подготовительная галерея (Prepare gallery) щелкните Сеть ROS (ROS Network) в разделе ПАНЕЛЬ ИНСТРУМЕНТОВ ROS (ROS too
В диалоговом окне Configure ROS Network Addresses в разделе Domain ID (ROS 2) установите идентификатор в значение 25. Это значение идентификатора соответствует идентификатору домена сети ROS 2 на виртуальной машине Ubuntu, где принимаются сообщения от Gazebo в сети ROS.
Создайте издатель, который отправляет в симулятор управляющие команды (линейные и угловые скорости). Сделайте эти скорости регулируемыми с помощью блоков усиления ползуна.
ROS использует правую систему координат, поэтому ось X находится вперед, ось Y - слева, а ось Z - вверх. Команды управления отправляются с помощью geometry_msgs/Twist сообщение, где linear.x указывает линейную прямую скорость (в метрах/с), и angular.z угловая скорость вокруг оси Z (в радианах/с).
Откройте новую модель Simulink.
На вкладке Приложения в разделе СИСТЕМЫ УПРАВЛЕНИЯ щелкните Операционная система робота.
В диалоговом окне ROBOT OPERATING SYSTEM (ROS) нажмите кнопку Select a ROS Network и выберите Robot Operating System 2 (ROS 2).
На вкладке «ROS Toolbox» > «ROS 2» в браузере библиотеки перетащите в модель блок «Публикация». Дважды щелкните блок.
Задайте для параметра Источник темы значение Указать собственное. Войти /cmd_vel в поле Тема. Нажмите Выбрать рядом с типом сообщения, выберите geometry_msgs/Twist из раскрывающегося списка и нажмите кнопку ОК.
На вкладке «ROS Toolbox» > «ROS 2» в браузере библиотеки перетащите в модель блок «Пустое сообщение». Дважды щелкните блок.
Нажмите Выбрать рядом с типом сообщения и выберите geometry_msgs/Twist.
Установить время выборки на 0.01 и нажмите кнопку ОК.
На вкладке «Simulink > Signal Routing» в браузере библиотеки перетащите в модель блок назначения шины.
Подключите выходной сигнал блока пустых сообщений к Bus вход блока назначения шины и Bus вывод на вход блока публикации.
На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться в правильном распространении информации о шине. Игнорируйте ошибку «Выбранный сигнал 'signal1' в блоке назначения шины 'без названия/назначения шины' не может быть найден во входном сигнале шины», если он появляется. На следующем шаге эта ошибка будет устранена.
Дважды щелкните на блоке «Назначение шины». Выбрать ??? signal1 в правом списке и нажмите кнопку Удалить. В левом списке разверните оба linear и angular свойства. Выберите линейный > x и угловой > z и нажмите кнопку «Выбрать». Нажмите кнопку «ОК», чтобы закрыть маску блока.

Добавьте блок «Константа», блок «Усиление» и два блока «Усиление ползунка». Соедините их вместе, как показано на рисунке ниже, и установите для параметра Gain значение -1.

Установите пределы и текущие параметры регулятора линейной скорости в значение 0.0 кому 2.0, и 1.0 соответственно. Установите соответствующие параметры ползуна усиления рулевого управления в значение -1.0 кому 1.0, и 0.1.
Создание абонента для приема сообщений, отправленных /odom тема. Вы также извлекете местоположение робота и постройте его траекторию в плоскости XY.
На вкладке «ROS Toolbox» > «ROS 2» в браузере библиотеки перетащите в модель блок «Subscribe». Дважды щелкните блок.
Задайте для параметра Источник темы значение Выбрать из сети ROS (Select From ROS network) и нажмите кнопку Выбрать (Select) рядом с полем Тема (Topic). Выберите «/odom »для темы и нажмите кнопку OK. Обратите внимание, что тип сообщения nav_msgs/Odometry устанавливается автоматически.
На вкладке «Simulink > Signal Routing» в браузере библиотеки перетащите в модель блок выбора шины.
Подключите Msg выходной порт блока Subscribe к входному порту блока выбора шины. На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться в правильном распространении информации о шине.
Дважды щелкните на блоке выбора шины. Выбрать ??? signal1 и ??? signal2 в правом списке и нажмите кнопку Удалить. В левом списке разверните pose > pose > pose и выберите x и y. Нажмите кнопку Выбрать и нажмите кнопку ОК.

На вкладке «Симуляция» > «Раковины» в браузере библиотеки перетащите в модель блок графика XY. Подключите X и Y выходные порты блока выбора шины к входным портам блока графика XY.
На следующем рисунке показана завершенная модель. Предварительно настроенная модель включена для вашего удобства.

На вкладке Моделирование (Modeling) щелкните Параметры модели (Model Settings). На панели решателя задайте для параметра Тип (Type) значение Фиксированный шаг (Fixed-step) и Фиксированный размер шага (Fixed-step size) значение 0.01.
Установить время остановки моделирования в inf.
Нажмите кнопку Выполнить (Run), чтобы начать моделирование.
И на симуляторе, и на XY-графике следует видеть перемещающегося по кругу робота.
Во время моделирования измените значения блоков усиления ползунка для управления роботом. Дважды щелкните блок XY Graph и измените X и Y при необходимости ограничения оси (это можно сделать во время выполнения моделирования).
Чтобы остановить моделирование, нажмите кнопку Остановить (Stop).