Skip to content

Симуляція Gazebo Classic

WARNING

Gazebo Classic is supported with PX4 up to Ubuntu Linux 20.04. In Ubuntu 22.04 and later you must use Gazebo (which was formerly known as "Gazebo Ignition").

Gazebo Classic - це потужне середовище 3D симуляції для автономних систем яке зокрема підходить для перевірки уникання об'єктів та комп'ютерного зору. Ця сторінка описує її використання з SITL та єдиним рухомим засобом. Gazebo Classic can also be used with HITL and for multi-vehicle simulation.

Supported Vehicles: Quad (Iris, Hex (Typhoon H480), Generic Standard VTOL (QuadPlane), Tailsitter, Plane, Rover, Submarine/UUV.

Mermaid Graph: Gazebo plugin

INFO

See Simulation for general information about simulators, the simulation environment, and simulation configuration (e.g. supported vehicles).

Встановлення

INFO

If you plan to use PX4 with ROS you should follow the ROS Instructions to install both ROS and Gazebo Classic (and thereby avoid installation conflicts).

Gazebo Classic setup is included in our standard build instructions for macOS, Ubuntu 18.04 and 20.04, and Windows on WSL2 for the same hosts.

For Ubuntu 22.04 LTS and later, the installation script (/Tools/setup/ubuntu.sh) installs the Gazebo simulator instead.

If you want to use Gazebo Classic on Ubuntu 22.04 you can use the following commands to remove Gazebo (Harmonic) and then reinstall Gazebo-Classic 11:

sh
sudo apt remove gz-harmonic
sudo apt install aptitude
sudo aptitude install gazebo libgazebo11 libgazebo-dev

Note that aptitude is needed because it can resolve dependency conflicts (by removing certain packages) that apt is unable to handle.

TIP

You could also modify the installation script to install Gazebo Classic on later versions before it is run for the first time.

Additional installation instructions can be found on gazebosim.org.

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

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

The easiest way to do this is to open a terminal in the root directory of the PX4 PX4-Autopilot repository and call make for the desired target. Наприклад для запуску симуляції квадрокоптера (за замовчуванням):

sh
cd /path/to/PX4-Autopilot
make px4_sitl gazebo-classic

The supported vehicles and make commands are listed below (click links to see vehicle images).

INFO

For the full list of build targets run make px4_sitl list_vmd_make_targets (and filter on those that start with gazebo-classic_).

Транспортний засібКоманда
Quadrotormake px4_sitl gazebo-classic
Quadrotor with Optical Flowmake px4_sitl gazebo-classic_iris_opt_flow
Quadrotor with Depth Camera (forward-facing)make px4_sitl gazebo-classic_iris_depth_camera
Quadrotor with Depth Camera (downward-facing)make px4_sitl gazebo-classic_iris_downward_depth_camera
3DR Solo (Quadrotor)make px4_sitl gazebo-classic_solo
Typhoon H480 (Hexrotor) (with video streaming)make px4_sitl gazebo-classic_typhoon_h480
Standard Planemake px4_sitl gazebo-classic_plane
Standard Plane (with catapult launch)make px4_sitl gazebo-classic_plane_catapult
Standard VTOLmake px4_sitl gazebo-classic_standard_vtol
Tailsitter VTOLmake px4_sitl gazebo-classic_tailsitter
Ackerman UGV (Rover)make px4_sitl gazebo-classic_rover
Differential UGV (Rover)make px4_sitl gazebo-classic_r1_rover
HippoCampus TUHH (UUV: Unmanned Underwater Vehicle)make px4_sitl gazebo-classic_uuv_hippocampus
Boat (USV: Unmanned Surface Vehicle)make px4_sitl gazebo-classic_boat
Cloudship (Airship)make px4_sitl gazebo-classic_cloudship

INFO

The Installing Files and Code guide is a useful reference if there are build errors.

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

  • Starting PX4 and Gazebo separately so that you can keep Gazebo Classic running and only re-launch PX4 when needed (quicker than restarting both).
  • Run the simulation in Headless Mode, which does not start the Gazebo Classic UI (this uses fewer resources and is much faster).

Підйом у небо

The make commands above first build PX4, and then run it along with the Gazebo Classic simulator.

Після запуску PX4 запуститься оболонка PX4, як показано нижче.

sh
______  __   __    ___
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] Calling startup script: /bin/sh etc/init.d-posix/rcS 0
INFO  [param] selected parameter default file eeprom/parameters_10016
[param] Loaded: eeprom/parameters_10016
INFO  [dataman] Unknown restart, data manager file './dataman' size is 11798680 bytes
INFO  [simulator] Waiting for simulator to connect on TCP port 4560
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
...
INFO  [ecl/EKF] 5188000: commencing GPS fusion

Консоль буде виводити статус поки PX4 завантажує файли ініціалізації та параметрів для певного планера, чекати та підключатися до симулятора. Once there is an INFO print that [ecl/EKF] is commencing GPS fusion the vehicle is ready to arm.

INFO

Right-clicking the quadrotor model allows to enable follow mode from the context menu, which is handy to keep it in view.

Gazebo Classic UI

Ви можете підняти його у повітря надрукувавши:

sh
pxh> commander takeoff

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

Options that apply to all simulators are covered in the top level Simulation topic (some of these may be duplicated below).

Імітація відмови датчика/обладнання

Simulate Failsafes explains how to trigger safety failsafes like GPS failure and battery drain.

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

Gazebo Classic can be run in a headless mode in which the Gazebo Classic UI is not launched. Цей режим запускається швидше та використовує менше системних ресурсів (тобто більш "легкий" спосіб запускати симуляцію).

Simply prefix the normal make command with HEADLESS=1 as shown:

sh
HEADLESS=1 make px4_sitl gazebo-classic_plane

Встановлення власного місця зльоту

Місце зльоту в Gazebo Classic можна встановити використовуючи змінні середовища. This will override both the default takeoff location, and any value set for the world.

The variables to set are: PX4_HOME_LAT, PX4_HOME_LON, and PX4_HOME_ALT.

Наприклад:

sh
export PX4_HOME_LAT=28.452386
export PX4_HOME_LON=-13.867138
export PX4_HOME_ALT=28.5
make px4_sitl gazebo-classic

Зміна швидкості симуляції

The simulation speed can be increased or decreased with respect to realtime using the environment variable PX4_SIM_SPEED_FACTOR.

sh
export PX4_SIM_SPEED_FACTOR=2
make px4_sitl_default gazebo-classic

For more information see: Simulation > Run Simulation Faster than Realtime.

Зміна швидкості вітру

To simulate wind speed, add this plugin to your world file and set windVelocityMean in m/s (replace SET_YOUR_WIND_SPEED with your desired speed). If needed, adapt the windVelocityMax parameter so that it is greater than windVelocityMean:

xml
  <plugin name='wind_plugin' filename='libgazebo_wind_plugin.so'>
      <frameId>base_link</frameId>
      <robotNamespace/>
      <windVelocityMean>SET_YOUR_WIND_SPEED</windVelocityMean>
      <windVelocityMax>20.0</windVelocityMax>
      <windVelocityVariance>0</windVelocityVariance>
      <windDirectionMean>0 1 0</windDirectionMean>
      <windDirectionVariance>0</windDirectionVariance>
      <windGustStart>0</windGustStart>
      <windGustDuration>0</windGustDuration>
      <windGustVelocityMean>0</windGustVelocityMean>
      <windGustVelocityMax>20.0</windGustVelocityMax>
      <windGustVelocityVariance>0</windGustVelocityVariance>
      <windGustDirectionMean>1 0 0</windGustDirectionMean>
      <windGustDirectionVariance>0</windGustDirectionVariance>
      <windPubTopic>world_wind</windPubTopic>
    </plugin>

Напрямок вітру передається як вектор напрямку (за стандартною конвенцією ENU), який буде нормалізовано в плагіні gazebo. Додатково ви можете вказати відхилення швидкості вітру у (м/с)² та відхилення у напрямку на основі нормального розподілу, щоб додати випадковий фактор в симуляцію. Gust is internally handled in the same way as wind, with the slight difference that you can state start time and duration with the following two parameters windGustStart and windGustDuration.

You can see how this is done in PX4/PX4-SITL_gazebo-classic/worlds/windy.world.

Використання джойстика

Joystick and thumb-joystick support are supported through QGroundControl (setup instructions here).

Підвищення ефективності сенсору відстані

The current default world is PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds/iris.world), which uses a heightmap as ground.

Це може викликати труднощі під час використання датчика відстані. If there are unexpected results we recommend you change the model in iris.model from uneven_ground to asphalt_plane.

Симуляція шуму GPS

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

GPS noise is enabled if the target vehicle's SDF file contains a value for the gpsNoise element (i.e. it has the line: <gpsNoise>true</gpsNoise>). It is enabled by default in many vehicle SDF files: solo.sdf, iris.sdf, standard_vtol.sdf, delta_wing.sdf, plane.sdf, typhoon_h480, tailsitter.sdf.

Щоб увімкнути/вимкнути шум GPS:

  1. Зберіть будь-яку ціль збірки gazebo, щоб згенерувати SDF файл (для всіх засобів). Наприклад:

    sh
    make px4_sitl gazebo-classic_iris

    TIP

    The SDF files are not overwritten on subsequent builds.

:::

  1. Open the SDF file for your target vehicle (e.g. ./Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris/iris.sdf).

  2. Search for the gpsNoise element:

    xml
    <plugin name='gps_plugin' filename='libgazebo_gps_plugin.so'>
      <robotNamespace/>
      <gpsNoise>true</gpsNoise>
    </plugin>
    • Якщо він присутній, GPS включений. You can disable it by deleting the line: <gpsNoise>true</gpsNoise>
    • Якщо він відсутній, GPS вимкнено. You can enable it by adding the gpsNoise element to the gps_plugin section (as shown above).

Наступного разу, коли ви зберете/перезапустите Gazebo Classic він буде використовувати нове налаштування шуму GPS.

Завантаження певного світу

PX4 supports a number of Worlds, which are stored in PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds. By default Gazebo Classic displays a flat featureless plane, as defined in empty.world.

Можна завантажити будь-який зі світів вказавши їх як завершальний параметр в налаштуваннях цілі збірки PX4.

For example, to load the warehouse world, you can append it as shown:

sh
make px4_sitl_default gazebo-classic_plane_cam__warehouse

INFO

There are two underscores after the model (plane_cam) indicating that the default debugger is used (none). See Building the Code > PX4 Make Build Targets.

You can also specify the full path to a world to load using the PX4_SITL_WORLD environment variable. Це підходить при тестуванні нового світу, який ще не включений до PX4.

TIP

If the loaded world does not align with the map, you may need to set the world location.

Встановлення розташування світу

Рухомий засіб відтворюється дуже близько до початкового положення моделі світу у певному симульованому GPS розташуванні.

INFO

The vehicle is not spawned exactly at the Gazebo origin (0,0,0), but using a slight offset, which can highlight a number of common coding issues.

При використанні світу, що відтворює реальне місце (наприклад певний аеропорт) це може призвести до доволі наявної невідповідності між тим що показується у світі, що симулюється та тим, що показується на мапі наземної станції. Для подолання цієї проблеми ви можете встановити місце розташування початкового положення світу до GPS координат, де воно буде в "реальному житті".

INFO

You can also set a Custom Takeoff Location that does the same thing. Однак додавання розташування на мапу простіше (і воно все ще може бути змінене шляхом встановлення користувацького розташування при необхідності).

The location of the world is defined in the .world file by specifying the location of the origin using the spherical_coordinates tag. Щоб це було коректним, обов'язково треба вказати широту, довготу та висоту над рівнем моря.

An example can be found in the sonoma_raceway.world:

xml
    <spherical_coordinates>
      <surface_model>EARTH_WGS84</surface_model>
      <latitude_deg>38.161479</latitude_deg>
      <longitude_deg>-122.454630</longitude_deg>
      <elevation>488.0</elevation>
    </spherical_coordinates>

You can test this by spawning a rover in the Sonoma Raceway World using the following make command (note that spawning takes longer the first time as the model needs to be downloaded from the model database):

sh
make px4_sitl gazebo-classic_rover__sonoma_raceway

У наведеному нижче відео видно, що розташування середовища збігається зі світом:

Запуск Gazebo та PX4 окремо

Для розширених сеансів розробки можливо більш зручно запускати Gazebo Classic та PX4 окремо або навіть з IDE.

In addition to the existing cmake targets that run sitl_run.sh with parameters for px4 to load the correct model it creates a launcher targets named px4_<mode> that is a thin wrapper around original sitl px4 app. Ця тонка обгортка просто містить аргументи застосунку типу поточної робочої директорії та шляху до файлу моделі.

Щоб запустити Gazebo Classic та PX4 окремо:

  • Run gazebo classic (or any other sim) server and client viewers via the terminal specifying an _ide variant:

    sh
    make px4_sitl gazebo-classic___ide

    або

    sh
    make px4_sitl gazebo-classic_iris_ide
  • In your IDE select px4_<mode> target you want to debug (e.g. px4_iris)

  • Запустіть сеанс налагодження безпосередньо з IDE

Цей підхід суттєво зменшує час циклу налагодження, оскільки симулятор завжди працює у фоновому режимі та ви перезавантажуєте тільки процес px4, який дуже легкий.

Симуляція камери спостереження

The Gazebo Classic survey camera simulates a MAVLink camera that captures geotagged JPEG images and sends camera capture information to a connected ground station. Камера також підтримує відеотрансляцію. Вона може бути використана для перевірки захоплення камери, зокрема в політних завданнях спостереження.

The camera emits the CAMERA_IMAGE_CAPTURED message every time an image is captured. The captured images are saved to: PX4-Autopilot/build/px4_sitl_default/tmp/frames/DSC_n.jpg (where n starts as 00000 and is iterated by one on each capture).

Для симуляції літака з цією камерою:

sh
make px4_sitl_default gazebo-classic_plane_cam

Симуляція камери глибини

The Gazebo Classic depth camera model simulates an Intel® RealSense™ D455 stereo depth camera using the Openni Kinect plugin.

This publishes depth images and camera information on the /camera/depth/image_raw and /camera/depth/camera_info ROS topics respectively.

Щоб використовувати ці зображення, потрібно встановити ROS або ROS 2. Зверніть увагу на попередження зверху цієї сторінки про те, як "уникнути конфліктів встановлення" під час встановлення ROS і Gazebo.

Можна симулювати квадрокоптер з камерою глибини що дивиться вперед:

sh
make px4_sitl gazebo-classic_iris_depth_camera

або квадрокоптер з камерою глибини, що дивиться вниз:

sh
make px4_sitl gazebo-classic_iris_downward_depth_camera

Симуляція парашутування при припиненні польоту

Gazebo Classic can be used to simulate deploying a parachute during Flight Termination (flight termination is triggered by the PWM command that is simulated in Gazebo Classic).

The if750a target has a parachute attached to the vehicle. Для симуляції засобу виконайте наступну команду:

sh
make px4_sitl gazebo-classic_if750a

To put the vehicle into flight termination state, you can force it to fail a safety check that has flight termination set as the failsafe action. For example, you could do this by forcing a Geofence violation.

Для додаткової інформації дивіться:

Трансляція відео

PX4 SITL для Gazebo Classic підтримує трансляцію відео по UDP з датчика камери, приєднаної до симуляції моделі рухомого засобу. When streaming is enabled, you can connect to this stream from QGroundControl (on UDP port 5600) and view video of the Gazebo Classic environment from the simulated vehicle - just as you would from a real camera. The video is streamed using a gstreamer pipeline and can be enabled/disabled using a button in the Gazebo Classic UI.

Симуляція датчику камери підтримується/увімкненно на наступних планерах:

Вимоги

Gstreamer 1.0 is required for video streaming. The required dependencies should already have been installed when you set up Gazebo Classic (they are included in the standard PX4 installation scripts/instructions for macOS and Ubuntu Linux).

INFO

FYI only, the dependencies include: gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, libgstreamer-plugins-base1.0-dev.

Запустити/Зупинити відеотрансляцію

Трансляція відео автоматично запускається, якщо підтримується цільовим засобом. Наприклад, щоб розпочати трансляцію відео на Typhoon H480:

sh
make px4_sitl gazebo-classic_typhoon_h480

Streaming can be paused/restarted using the Gazebo UI Video ON/OFF button..

Video ON/OFF button

Як переглянути відео Gazebo

The easiest way to view the SITL/Gazebo Classic camera video stream is in QGroundControl. Simply open Application Settings > General and set Video Source to UDP h.264 Video Stream and UDP Port to 5600:

QGC Video Streaming Settings for Gazebo

The video from Gazebo Classic should then display in QGroundControl just as it would from a real camera.

QGC Video Streaming Gazebo Example

INFO

The Typhoon world is not very interesting.

It is also possible to view the video using the Gstreamer Pipeline. Просто введіть наступну команду терміналу:

sh
gst-launch-1.0  -v udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false

Докладне ведення журналу

SITL нічого не виводить при помилці, коли щось не так з моделлю. You can enable more verbose logging using VERBOSE_SIM, as shown:

sh
export VERBOSE_SIM=1
make px4_sitl gazebo-classic

або

sh
VERBOSE_SIM=1 make px4_sitl gazebo-classic

Розширення та персоналізація

To extend or customize the simulation interface, edit the files in the Tools/simulation/gazebo/sitl_gazebo folder. The code is available on the sitl_gazebo repository on Github.

INFO

The build system enforces the correct GIT submodules, including the simulator. Вона перезапише зміни в файлах та директоріях.

Подальша інформація