В этом примере показано, как установить синхронизируемую симуляцию между Simulink и Gazebo, как получить данные из Gazebo и отправить команды в Gazebo.
В данном примере используйте свою собственную среду Linux с Gazebo или загрузите Виртуальную машину Мелодичным ROS 2 и 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 только остается на предыдущем разе шага, пока вы не возобновляете модель.