Skip to content

Симуляція Gazebo

WARNING

Gazebo раніше була відома як "Gazebo Ignition" (тоді як Gazebo Classic раніше відома як Gazebo). Дивіться запис в офіційному блозі для додаткової інформації.

Gazebo - це робототехнічний симулятор з відкритим кодом. Він замінює старий симулятор Gazebo Classic та є єдиною версією Gazebo, що підтримується для Ubuntu 22.04 і далі.

Supported Vehicles: Quadrotor, Plane, VTOL, Rover

:::note Дивіться Симуляція для загальної інформації про симуляцію, середовище симуляції та налаштування симуляції (наприклад засоби, що підтримуються). :::

Встановлення (Ubuntu Linux)

Gazebo Harmonic is installed by default on Ubuntu 22.04 as part of the normal development environment setup.

INFO

The PX4 installation scripts are based on the instructions: Binary Installation on Ubuntu (gazebosim.org).

WARNING

Gazebo Harmonic cannot be installed on Ubuntu 20.04 and earlier.

On Ubuntu 20.04 we recommend use Gazebo Classic. If you really must use Gazebo then you should update to Ubuntu 22.04.

Until November 2024 it is possible to install Gazebo Garden on Ubuntu 20.04. After that date Garden will reach end-of-life and should not be used.

Запуск симуляції

Симуляцію Gazebo SITL можна легко запустити за допомогою команди make як показано нижче:

sh
cd /path/to/PX4-Autopilot
make px4_sitl gz_x500

Це запускає як екземпляр PX4 SITL, так і клієнт Gazebo.

Рухомі засоби, що підтримуються, а також команди make перелічені нижче. Зверніть увагу, що усі цілі збірки make для gazebo мають префікс gz_.

Рухомий засібКомандаPX4_SYS_AUTOSTART
Квадрокоптер (x500)make px4_sitl gz_x5004001
X500 Quadrotor with Depth Camera (Front-facing)make px4_sitl gz_x500_depth4002
Квадрокоптер (x500) з візуальною одометрієюmake px4_sitl gz_x500_vision4005
Quadrotor(x500) with 1D LIDAR (Down-facing)make px4_sitl gz_x500_lidar_down4016
Quadrotor(x500) with 2D LIDARmake px4_sitl gz_x500_lidar_2d4013
Quadrotor(x500) with 1D LIDAR (Front-facing)make px4_sitl gz_x500_lidar_front4017
ВЗІПmake px4_sitl gz_standard_vtol4004
Літакmake px4_sitl gz_rc_cessna4003
Покращений літакmake px4_sitl gz_advanced_plane4008
Differential Rovermake px4_sitl gz_r1_rover4009
Ackermann Rovermake px4_sitl gz_rover_ackermann4012

Усі моделі засобів (та світів) включені як підмодуль з репозиторію Моделі Gazebo.

WARNING

Плагін "Удосконалена піднімна сила", що необхідний для запуску Покращеного літака поки що не є частиною дистрибутиву Gazebo, тому Покращений літак поки що не полетить: PX4-Autopilot#22337.

Щоб увімкнути Покращений літак, в якості обхідного шляху ви можете зібрати бібліотеку gz-sim з вихідного коду Gazebo, перейти до каталогу build/lib, скопіювати файл плагіну удосконаленої піднімної сили .so (в залежності від певної версії Gazebo він називається чимось на зразок libgz-sim7-advanced-lift-drag-system.so), та вставити у директорію ~/.gz/sim/plugins.

Вищенаведені команди запускають єдиний засіб з повним користувацьким інтерфейсом. QGroundControl повинна автоматично підключатися до симульованого транспортного засобу.

Автономний режим

Інший спосіб як Gazebo SITL може бути під'єднано - в автономному режимі. У цьому режимі PX4 SITL і Gazebo запускаються окремо у своїх власних терміналах. За замовчуванням ці термінали знаходяться на одному й тому ж комп'ютері, але ви можете також під'єднати екземпляри SITL та Gazebo, які працюють на будь-яких двох пристроях в мережі (або навіть різних мережах, якщо ви використовуєте VPN для їх з'єднання).

Запустити PX4 в автономному режимі можна додавши перед командою make PX4_GZ_STANDALONE=1:

sh
cd /path/to/PX4-Autopilot
PX4_GZ_STANDALONE=1 make px4_sitl gz_x500

PX4 SITL тоді буде очікувати поки не виявить екземпляру gz-server та не під'єднається до нього.

:::note Якщо ви досі не запустили gz-server коли виконали команду make, ви побачите наступне попередження допоки gazebo не запуститься та екземпляр gz-server не буде виявлено PX4:

sh
WARN [gz bridge] Service call timed out as Gazebo has not been detected

:::

Найпростіший спосіб запустити симуляцію - використати Python скрипт simulation-gazebo, що можна знайти у репозиторії Моделі Gazebo. Його можна використати, щоб запустити екземпляр gz-server з будь-яким світом і рухомим засобом, що підтримується.

Скрипт можна використати без встановлення додаткових залежностей, він отримає моделі та світи PX4 що підтримуються при першому використанні (за замовчуванням) та збереже їх у ~/.simulation-gazebo. При повторному запуску цей скрипт використає цю директорію для отримання моделей та світів. Тому якщо ви бажаєте використати власну модель та запустити її в автономному режимі, вам потрібно покласти її вихідний код у ~/.simulation-gazebo.

Ви можете отримати цей скрипт локально використовуючи будь-який спосіб який вам до вподоби, наприклад wget:

sh
wget https://raw.githubusercontent.com/PX4/PX4-gazebo-models/main/simulation-gazebo

Скрипт може бути запущено так:

sh
cd /path/to/script/
python3 simulation-gazebo

Для додаткової інформації та аргументів, дивіться Моделі Gazebo.

:::note Якщо make px4_sitl gz_x500 дає помилку ninja: error: unknown target 'gz_x500' тоді запустіть make distclean, щоб почати з чистого аркуша, та спробуйте запустити make px4_sitl gz_x500 ще раз. :::

Режим без інтерфейсу

Можливо ви забажаєте запустити Gazebo у "режимі без інтерфейсу" (без графічного інтерфейсу Gazebo) оскільки він використовує менше ресурсів та не покладається на те, що ваша система має відеокарту яка належним чином підтримує рендеринг OpenGL. Це пришвидшує завантаження та запуск, та для багатьох простих випадків це може бути все що вам потрібно.

Симуляція може бути запущено у режимі без інтерфейсу додаванням перед командою змінної середовища HEADLESS=1:

sh
HEADLESS=1 make px4_sitl gz_x500

Вказання світу

Симуляція може бути запущена в певному світі додаванням бажаного світу до імені бажаного рухомого засобу. Наприклад, щоб запустити вітряний світ із засобом x500 ви можете вказати:

sh
make px4_sitl gz_x500_windy

Ви також можете вказати світ використовуючи змінну середовища PX4_GZ_WORLD:

sh
PX4_GZ_WORLD=windy make px4_sitl gz_x500

The supported worlds are listed below.

СвітКомандаОпис
defaultmake px4_sitl *Порожній світ (сіра площина)
arucomake px4_sitl *_arucoEmpty world with aruco marker for testing precision landing
baylandsmake px4_sitl *_baylandsСвіт Baylands оточений водою
lawnmake px4_sitl *_lawnLawn world for testing rovers
rovermake px4_sitl *_roverRover world (optimised/preferred)
wallsmake px4_sitl *_wallsWall world for testing collision prevention
windymake px4_sitl *_windyПорожній світ з увімкненим вітром

WARNING

Зверніть увагу, якщо ніякого світу не вказано, PX4 використає світ default. Однак ви не повинні явно вказувати _default у назві моделі тоді як це перешкодить запуску PX4. Іншими словами, використовуйте make px4_sitl gz_x500 замість make px4_sitl gz_x500_default для світу за замовчуванням.

INFO

Baylands world throws a warning in Gazebo Harmonic because there are so many meshes. This can be ignored:

sh
[Wrn] [SDFFeatures.cc:843] The geometry element of collision [collision] couldn't be created

Використання та варіанти налаштування

Конвеєр запуску дозволяє дуже гнучке налаштування. Зокрема можливо:

  • Почати нову симуляцію з довільним світом або під'єднатись до вже запущеної симуляції.
  • Додати новий засіб до симуляції або поєднати новий екземпляр PX4 з вже наявним.

Ці сценарії керуються встановленням відповідних змінних середовища.

Синтаксис

Синтаксис запуску набирає форми:

sh
ARGS ./build/px4_sitl_default/bin/px4

де ARGS - це список змінних середовища, включаючи:

  • PX4_SYS_AUTOSTART (обов'язковий): встановлює ідентифікатор автостарту планеру PX4 для запуску.

  • PX4_GZ_MODEL_NAME: встановлює ім'я наявної моделі в симуляції gazebo. Якщо вказано, скрипт запуску намагається прив'язати новий екземпляр PX4 до ресурсу Gazebo, що відповідає точно такому імені.

    • Налаштування є взаємозаперечним з PX4_SIM_MODEL.
  • PX4_SIM_MODEL: встановлює ім'я нової моделі Gazebo для відтворення в симуляторі. Якщо вказано, скрипт запуску шукає модель у шляху ресурсів Gazebo, що відповідає даній змінній, відтворює її й пов'язує новий екземпляр PX4 з нею.

    • Налаштування є взаємозаперечним з PX4_GZ_MODEL_NAME.

:::note Змінна середовища PX4_GZ_MODEL застаріла та її функціональність об'єднана з PX4_SIM_MODEL. :::

  • PX4_GZ_MODEL_POSE: встановлює позицію відтворення та орієнтацію моделі коли вжито PX4_SIM_MODEL. Якщо вказано, скрипт запуску відтворює модель у положенні, що дотримується синтаксису "x,y,z,roll,pitch,yaw", де позиції надаються в метрах, а кути - в радіанах.

    • Якщо опущено, використовується нульове положення [0,0,0,0,0,0].
    • Якщо надано менше ніж 6 значень, то відсутні фіксуються на нулі.
    • Можна використовувати лише зі змінною PX4_SIM_MODEL (не PX4_GZ_MODEL_NAME).
  • PX4_GZ_WORLD: встановлює файл світу Gazebo для нової симуляції. If it is not given, then default is used.

    • Ця змінна ігнорується, якщо наявна модель вже запущена.
    • Це значення повинно бути вказано для обраного планера, але може бути перевизначено використовуючи цей аргумент.
  • PX4_SIMULATOR=GZ: встановлює симулятор, для Gazebo це повинно бути gz.

  • PX4_GZ_STANDALONE: Дозволяє PX4 зрозуміти що він не повинен запускати екземпляр Gazebo. Gazebo потрібно буде запустити окремо, як описано в Автономному режимі.

  • PX4_GZ_SIM_RENDER_ENGINE: Встановлює рушій рендерингу, який буде використовуватися в Gazebo.

    Рушій рендерингу за замовчуванням (OGRE 2) погано підтримується на деяких платформах/середовищах. Вкажіть PX4_GZ_SIM_RENDER_ENGINE=ogre, щоб встановити рушій рендерингу на OGRE 1, якщо у вас виникають проблеми з рендерингом при запуску PX4 на віртуальній машині.

Світи PX4 Gazebo та бази даних моделей можна знайти на Github тут.

:::note gz_env.sh.in скомпільовано і зроблено доступним у $PX4_DIR/build/px4_sitl_default/rootfs/gz_env.sh :::

Приклади

Ось кілька прикладів різних сценаріїв, описаних вище.

  1. Запуск симулятора + світ за замовчуванням + відтворення засобу у позиції за замовчуванням

    sh
    PX4_SYS_AUTOSTART=4001 PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4
  2. Запуск симулятора + світ за замовчуванням + відтворення засобу у довільній позиції (y=2 м)

    sh
    PX4_SYS_AUTOSTART=4001 PX4_GZ_MODEL_POSE="0,2" PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4
  3. Запуск симулятора + світ за замовчуванням + зв'язування з наявним засобом

    sh
    PX4_SYS_AUTOSTART=4001 PX4_GZ_MODEL_NAME=x500 ./build/px4_sitl_default/bin/px4
  4. Запуск симулятора в автономному режимі + під'єднання до екземпляра Gazebo що виконує світ за замовчуванням

    sh
    PX4_GZ_STANDALONE=1 PX4_SYS_AUTOSTART=4001 PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4

    В окремому терміналі запустіть:

    sh
    python /path/to/simulation-gazebo

Додавання нових світів та моделей

SDF файли, файли сіток, текстури та будь-що інше, що пов'язано з функціоналом та зовнішнім виглядом Gazebo для світів та моделей може бути розміщено у відповідних директоріях /worlds та /models у PX4-gazebo-models.

В межах PX4 дотримуйтесь наступних кроків, щоб додати моделі та світи.

Додавання моделі

Щоб додати нову модель:

  1. Визначте конфігураційний файл планера.

  2. Визначте параметри за замовчуванням для Gazebo у файлі конфігурації планера (цей приклад взято з квадрокоптера x500):

    ini
    PX4_SIMULATOR=${PX4_SIMULATOR:=gz}
    PX4_GZ_WORLD=${PX4_GZ_WORLD:=default}
    PX4_SIM_MODEL=${PX4_SIM_MODEL:=<your model name>}
    • PX4_SIMULATOR=${PX4_SIMULATOR:=gz} встановлює симулятор за замовчуванням (Gz) для цього конкретного планера.

    • PX4_GZ_WORLD=${PX4_GZ_WORLD:=default} sets the default world for that specific airframe.

    • Встановлення значення за замовчуванням для PX4_SIM_MODEL дозволить запустити симуляцію лише з:

      sh
      PX4_SYS_AUTOSTART=<your new airframe id> ./build/px4_sitl_default/bin/px4
  3. Додайте ціль CMake для планера.

    • Якщо плануєте використовувати "звичайний" режим, додайте файл SDF вашої моделі у Tools/simulation/gz/models/.
    • Якщо плануєте використовувати автономний режим, додайте SDF файл вашої моделі у~/.simulation-gazebo/models/

    Ви звичайно також можете використовувати обидва варіанти.

Додавання світу

Щоб додати новий світ:

  1. Додайте ваш світ до переліку світів знайдений у CMakeLists.txt тут. Це необхідно, щоб CMake зміг згенерувати правильні цілі збірки.

    • Якщо плануєте використовувати "звичайний" режим, додайте файл SDF вашого світу у Tools/simulation/gz/worlds/.
    • Якщо плануєте використовувати автономний режим, додайте файл SDF вашого світу у ~/.simulation-gazebo/worlds/

:::note Допоки файл світу та моделі у шляху пошуку Gazebo (GZ_SIM_RESOURCE_PATH) немає потреби додавати їх у директорії world та model PX4. Однак make px4_sitl gz_<model>_<world> не працюватиме з ними. :::

Синхронізація часу PX4-Gazebo

На відміну від симуляторів Gazebo Classic та jMAVSim, PX4 та Gazebo не реалізують механізм синхронізації.

Під час симуляцій Gazebo PX4 підписується на рубрику Gazebo \clock та використовує її як джерело синхронізації. Це гарантує, що PX4 завжди чекатиме Gazebo перед тим як рухатися вперед у часі, навіть якщо Gazebo працює з фактором реального часу відмінним від 1.

Зауважте, однак, оскільки синхронізація відсутня, Gazebo ніколи не чекатиме завершення обчислень PX4. У найгіршому випадку, PX4 може повністю відключитися, а Gazebo продовжить виконання з очевидними аваріями дронів, що симулюються.

Симуляція кількох рухомих засобів

Симуляція кількох засобів підтримується на комп'ютерах з Linux.

Для додаткової інформації дивіться: Симуляція кількох засобів з Gazebo

Додаткова інформація