Совместное моделирование между Simulink и Gazebo

В этом примере показано, как настроить синхронизированную симуляцию между Simulink™ и Gazebo для отправки команд и получения данных от Gazebo.

Setup среды симуляции Gazebo

В данном примере используйте собственное окружение Linux с Gazebo или загрузите предоставленную Виртуальную машину с ROS и Gazebo. В виртуальной машине (VM) необходимый плагин Gazebo расположен в /home/user/src/GazeboPlugin.

Требования к программному обеспечению (входит в состав ВМ):

Операционная система: Ubuntu Xenial Xerus или Ubuntu Bionic Beaver

Зависимости от программного обеспечения: CMake 2.8, Gazebo 9 и libgazebo9-dev

При использовании собственного окружения Linux выполните действия, описанные в разделе Установка плагина Gazebo вручную. В противном случае перейдите в среду симуляции Gazebo.

Установка плагина 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

Запуск среды симуляции Gazebo

Откройте терминал в VM или собственной операционной системе Linux, запустите следующие команды, чтобы запустить симулятор Gazebo. Если симулятор 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

  • Два датчика БИНС: imu0 и imu1

  • Модуль коробки: unit_box

The multiSensorPluginTest.world расположен в /home/user/src/GazeboPlugin/world папка. Этот файл привязки включает плагин Gazebo для совместной симуляции с Simulink с помощью следующих линий в нем xml. тело:

<plugin name="GazeboPlugin" filename="lib/libGazeboCoSimPlugin.so"><portNumber>14581</portNumber></plugin>

Поле filename должно указывать на расположение скомпилированного плагина Gazebo. Этот путь может быть относительно расположения запускается сама Gazebo, а можно добавить его в путь поиска файлов плагина Gazebo, запустив:

export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:/home/user/src/GazeboPlugin/export

Сконфигурируйте совместное моделирование Gazebo

Откройте performCoSimulationWithGazebo модель, которая демонстрирует, как получить данные о датчике от этих моделируемых датчиков и как привести в действие модель единичной коробки от Simulink.

open_system("performCoSimulationWithGazebo")

Перед симуляцией модели сконфигурируйте Gazebo Co-Simulation с помощью блока Gazebo Pacer:

hilite_system('performCoSimulationWithGazebo/Gazebo Pacer')

Откройте блок и щелкните ссылку Configure Gazebo network and simulation settings.

open_system('performCoSimulationWithGazebo/Gazebo Pacer')

В выпадающем списке Сетевой адрес выберите Custom. Введите IP-адрес компьютера Linux. Порт по умолчанию для Gazebo 14581. Установите тайм-аут отклика на 10 секунд.

Нажмите кнопку «Тестирование», чтобы протестировать подключение к работающему симулятору Gazebo.

Получение данных о датчике

Используйте блок Gazebo Read, чтобы получить данные по конкретным темам с трех датчиков:

  • БИНС, /gazebo/default/imu0/link/imu/imu

  • Скан лидара, /gazebo/default/hokuyo0/link/laser/scan

  • Камера RGB, /gazebo/default/camera0/link/camera/image

Отображение показаний БИНС и визуализация скана лидара и Изображения RGB с помощью функциональных блоков MATLAB ®.

Приведение в действие модели Gazebo

Используйте блок Gazebo Apply Команды, чтобы применить постоянную силу в z-направлении к модулю полю, что приводит к ускорению 1 m/s2. Создайте пустую ApplyLinkWrench сообщение с использованием Gazebo Blank Message. Задайте элементы сообщения, чтобы применить силу к unit_box/link сущность с использованием блока «Назначение шины». Для вывода основной истины положения поля используйте Gazebo Read. Перемещение коробки в течение 1 секунды должно быть близко к 0,5 метрам.

Выполните совместное моделирование

Чтобы начать совместное моделирование, нажмите кнопку Выполнить. Можно также шагнуть симуляцию с помощью Шага Вперед. Шаг Назад не поддерживается во время ко-симуляции.

Пока симуляция выполняется, заметьте, что симулятор Gazebo и время Simulink синхронизируются.

Эта модель визуализирует данные о датчике Gazebo с помощью блока MATLAB function и функциональных возможностей графического изображения MATLAB. Вот снимок данных об изображении, полученных с камеры Gazebo:

Вот снимок изображения скана лидара:

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

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

Временная синхронизация

Во время ко-симуляции можно в любой момент приостановить работу Simulink и Gazebo Simulator с помощью пауза

Примечание: Gazebo останавливается на один временной шаг перед симуляцией.

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

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

Следующие шаги