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

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

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

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

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

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

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

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