В этом примере показано, как настроить синхронизированное моделирование между Simulink™ и Gazebo для отправки команд и получения данных из Gazebo.
В этом примере используйте собственную среду Linux с Gazebo или загрузите предоставленную виртуальную машину с ROS и Gazebo. В виртуальной машине (ВМ) требуемый плагин Gazebo расположен в /home/user/src/GazeboPlugin.
Требования к программному обеспечению (входящие в состав ВМ):
Операционная система: Ubuntu Xenial Xerus или Ubuntu Bionic Beaver
Зависимость от программного обеспечения: CMake 2.8, Gazebo 9 и libgazebo9-dev
При использовании собственной среды Linux выполните действия, описанные в разделе Установка подключаемого модуля Gazebo вручную. В противном случае перейдите в раздел Запуск среды моделирования беседки.
Получите исходный код плагина в виде zip-пакета. Эта функция создает папку с именем GazeboPlugin в текущей рабочей папке и сжимает ее как GazeboPlugin.zip.
packageGazeboPlugin
Копировать GazeboPlugin.zip на вашу машину Linux.
Распакуйте пакет на платформе Linux. В этом примере распакуйте файлы в /home/user/src/GazeboPlugin.
Выполните эти команды в терминале для компиляции подключаемого модуля.
cd /home/user/src/GazeboPlugin
Если build папка уже существует, удалите ее.
rm -r build
Установите подключаемый модуль.
mkdir build cd build cmake .. make
Расположение плагина: /home/user/src/GazeboPlugin/export/lib/libGazeboCoSimPlugin.so.
Удалите созданный подключаемый модуль с хост-компьютера с помощью MATLAB ®.
if exist('GazeboPlugin', 'dir') rmdir('GazeboPlugin', 's'); end if exist('GazeboPlugin.zip', 'file') delete('GazeboPlugin.zip'); end
Откройте терминал в виртуальной машине или собственной операционной системе Linux, выполните следующие команды для запуска симулятора Gazebo. Если симулятор Gazebo не открывается, может потребоваться переустановка плагина. См. раздел Установка подключаемого модуля беседки вручную.
cd /home/user/src/GazeboPlugin/export export SVGA_VGPU10=0 gazebo ../world/multiSensorPluginTest.world --verbose
Эти команды запускают симулятор Gazebo со следующими элементами:
Два лазерных дальномера: hokuyo0 и hokuyo1
Две камеры RGB: camera0 и camera1
Две камеры глубины: depth_camera0 и depth_camera1
Два датчика IMU: imu0 и imu1
Модель единичной коробки: unit_box

multiSensorPluginTest.world находится в /home/user/src/GazeboPlugin/world папка. Этот мировой файл включает плагин Gazebo для совместного моделирования с Simulink, используя следующие строки в его.xml тело:
<plugin name="GazeboPlugin" filename="lib/libGazeboCoSimPlugin.so"><portNumber>14581</portNumber></plugin>
Поле имени файла должно указывать на расположение компилируемого плагина Gazebo. Этот путь может быть относительно местоположения, где запущена сама беседка, или вы можете добавить его в путь поиска плагина беседки, запустив:
export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:/home/user/src/GazeboPlugin/export
Откройте окно performCoSimulationWithGazebo модель, которая демонстрирует, как получать данные от этих моделируемых датчиков и как активировать модель блока от Simulink.
open_system("performCoSimulationWithGazebo")
Перед моделированием модели настройте совместное моделирование беседки с помощью блока Gazebo Pacer:
hilite_system('performCoSimulationWithGazebo/Gazebo Pacer')
Откройте блок и щелкните ссылку «Настройка сети и параметров моделирования».
open_system('performCoSimulationWithGazebo/Gazebo Pacer') В раскрывающемся списке Network Address выберите Custom. Введите IP-адрес компьютера Linux. Порт по умолчанию для беседки: 14581. Установите время ожидания ответа равным 10 секундам.

Нажмите кнопку Test, чтобы проверить подключение к работающему тренажеру «Беседка».
Используйте блок «Чтение беседки» для получения данных по конкретным темам с трех датчиков:
IMU, /gazebo/default/imu0/link/imu/imu
Лидар Скан, /gazebo/default/hokuyo0/link/laser/scan
камера RGB, /gazebo/default/camera0/link/camera/image
Отображение показаний IMU и визуализация изображения Lidar Scan и RGB с помощью функциональных блоков MATLAB ®.

Для приложения постоянной силы в направлении Z к рамке единиц измерения, приводящей к ускорению на 1 , используется блок «Gazebo Apply Command». Создать пустое ApplyLinkWrench сообщение с использованием Gazebo Blank Message. Укажите элементы сообщения для применения силы к unit_box/link объект, использующий блок назначения шины. Используйте Беседку Чтение, чтобы вывести позу истинности поля. Смещение коробки за период в 1 секунду должно быть близко к 0,5 метра.

Чтобы начать совместное моделирование, щелкните Выполнить (Run). Можно также выполнить моделирование с помощью команды Шаг вперед (Step Forward). Шаг назад не поддерживается во время совместного моделирования.
Во время выполнения моделирования обратите внимание, что синхронизируются симулятор «Беседка» и время «Симулинк».
Эта модель визуализирует данные датчика Gazebo с помощью функциональных блоков MATLAB и функций печати MATLAB. Ниже приведен снимок данных изображения, полученных с камеры Gazebo:

Ниже приведен снимок изображения сканирования лидара:

График положения блока единичной коробки в направлении Z можно просмотреть с помощью инспектора данных. Блок отслеживает параболическую форму из-за постоянного ускорения во времени.

Положение блока в конце моделирования - 1,001, что приводит к перемещению 0,5001, что несколько отличается от ожидаемого значения 0,5. Это связано с ошибкой двигателя физики «Беседки». Сделайте максимальный размер шага в физическом двигателе Gazebo меньше, чтобы уменьшить эту ошибку.

Во время совместного моделирования можно приостановить работу Simulink и Gazebo Simulator в любое время с помощью Pause
Примечание: Беседка делает паузу на один шаг впереди симуляции.

Это связано со следующей временной последовательностью совместного моделирования:

Обмен данными датчика и командами включения осуществляется на правильном временном шаге. Исполнение выбирает сначала шаг Gazebo, затем Simulink. Выполнение моделирования по-прежнему выполняется на t + 1, Simulink просто остается на предыдущем шаге, пока вы не возобновите модель.