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