Выполните Co-симуляцию между Simulink и Gazebo

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

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

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

Требования к программному обеспечению (включенный в VM):

Операционная система: Ubuntu гостеприимный Xerus или Ubuntu бионический бобр

Зависимость от программного обеспечения: cmake 2.8, gazebo9, и libgazebo9-dev

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

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

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

Откройте терминал в 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

Сконфигурируйте Co-симуляцию Gazebo

Откройте 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

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

Выполните Co-симуляцию

Чтобы запустить 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 только остается на предыдущем разе шага, пока вы не возобновляете модель.

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