В этом примере показано, как настроить синхронизированную симуляцию между Simulink™ и Gazebo для отправки команд и получения данных от 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.
Получите исходный код плагина в виде 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
Откройте терминал в 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
Откройте 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 Apply Команды, чтобы применить постоянную силу в z-направлении к модулю полю, что приводит к ускорению 1 . Создайте пустую 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 просто остается на предыдущем шаге, пока вы не возобновите модель.