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

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

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

Используйте блок Gazebo Apply Command, чтобы прикладывать постоянную силу в z-направлении к модульному полю, которое приводит к ускорению 1 . Создайте пустой ApplyLinkWrench сообщение с помощью сообщения Пробела Gazebo. Укажите элементы сообщения, чтобы прикладывать силу к unit_box/link сущность с помощью блока Bus Assignment. Используйте Чтение Gazebo, чтобы вывести положение основной истины поля. Смещение поля за 1 второй период должно быть близко к 0,5 метрам.

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

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

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

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

Во время co-симуляции можно приостановить Simulink, и Средство моделирования Gazebo в любое время с помощью Делают паузу
Примечание: Gazebo приостанавливает один временной шаг перед симуляцией.

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

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