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