Skip to content

jMAVSim з SITL

WARNING

This simulator is community supported and maintained. It may or may not work with current versions of PX4 and may be removed in future releases.

Дивіться Встановлення інструментарію для інформації про середовища та інструменти, що підтримуються основною командою розробників.

jMAVSim is a simple multirotor/Quad simulator that allows you to fly copter type vehicles running PX4 around a simulated world. Його легко налаштувати і можна використовувати для перевірки того, що ваш апарат може злітати, летіти, приземлятися і належним чином реагувати на різні несправності (наприклад, несправність GPS).

Supported Vehicles:

  • Quad

Ця тема показує, як налаштувати jMAVSim для підключення до SITL версії PX4.

TIP

jMAVSim can also be used for HITL Simulation (as shown here).

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

jMAVSim setup is included in our standard build instructions for Ubuntu Linux and Windows. Follow the instructions below to install jMAVSim on macOS.

macOS

To setup the environment for jMAVSim simulation:

  1. Install a recent version of Java (e.g. Java 15). You can download Java 15 (or later) from Oracle or use Eclipse Temurin:

    sh
    brew install --cask temurin
  2. Install jMAVSim:

    sh
    brew install px4-sim-jmavsim

    WARNING

    PX4 v1.11 and beyond require at least JDK 15 for jMAVSim simulation.

    For earlier versions, macOS users might see the error Exception in thread "main" java.lang.UnsupportedClassVersionError:. You can find the fix in the jMAVSim with SITL > Troubleshooting).

:::

Середовище симуляції

Симуляція програмного забезпечення в петлі виконує повну систему на комп'ютері та моделює автопілот. Він підключається через локальну мережу до симулятора. Вигляд налаштування виглядає наступним чином:

Mermaid graph: SITL Simulator

Запуск SITL

After ensuring that the simulation prerequisites are installed on the system, just launch: The convenience make target will compile the POSIX host build and run the simulation.

sh
make px4_sitl_default jmavsim

Це запустить консоль PX4 як показано нижче:

sh
[init] shell id: 140735313310464
[init] task name: px4

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

Ready to fly.


pxh>

It will also bring up a window showing a 3D view of the jMAVSim simulator:

jMAVSim 3d View

Підйом у небо

Система почне друкувати інформацію про статус. You will be able to start flying once you have a position lock (shortly after the console displays the message: EKF commencing GPS fusion).

Щоб злітіти, введіть наступне у консоль:

sh
pxh> commander takeoff

You can use QGroundControl to fly a mission or to connect to a joystick.

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

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.

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

The default takeoff location in can be overridden using the environment variables: 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_default jmavsim

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

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 jmavsim

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

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

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

Моделювання Wifi Дрона

Є спеціальна ціль для моделювання безпілотника, підключеного через Wifi до локальної мережі:

sh
make broadcast jmavsim

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

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

Ви можете запустити JMAVSim та PX4 окремо:

sh
./Tools/simulation/jmavsim/jmavsim_run.sh -l
make px4_sitl none

Це дозволяє швидший цикл тестування (перезапуск jMAVSim займає значно більше часу).

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

To start jMAVSim without the GUI, set the env variable HEADLESS=1 as shown:

sh
HEADLESS=1 make px4_sitl jmavsim

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

JMAVSim can be used for multi-vehicle simulation: Multi-Vehicle Sim with JMAVSim.

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

To extend or customize the simulation interface, edit the files in the Tools/jMAVSim folder. The code can be accessed through thejMAVSim repository on Github.

INFO

The build system enforces the correct submodule to be checked out for all dependencies, including the simulator. Це не перезапише зміни в файлах у каталозі, проте, коли ці зміни будуть зафіксовані, підмодуль повинен бути зареєстрований у репозиторії Firmware з новим хешем коміту. To do so, git add Tools/jMAVSim and commit the change. Це оновить хеш GIT симулятора.

Взаємодія з ROS

The simulation can be interfaced to ROS the same way as onboard a real vehicle.

Важливі файли

  • The startup scripts are discussed in System Startup.
  • The simulated root file system ("/" directory) is created inside the build directory here: build/px4_sitl_default/rootfs.

Усунення проблем

java.long.NoClassDefFoundError

sh
Exception in thread "main" java.lang.NoClassDefFoundError: javax/vecmath/Tuple3d
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
Caused by: java.lang.ClassNotFoundException: javax.vecmath.Tuple3d
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 3 more
Exception in thread "main" java.lang.NoClassDefFoundError: javax/vecmath/Tuple3d
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
Caused by: java.lang.ClassNotFoundException: javax.vecmath.Tuple3d
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)

This error should no longer occur once the jMAVSim submodule is updated to newer jar libs and Java 11 or Java 14 should work fine.

Відбулася незаконна відображувальна операція доступу

Це попередження можна ігнорувати (ймовірно, воно буде відображено, але симуляція все одно буде працювати правильно).

sh
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by javax.media.j3d.JoglPipeline (rsrc:j3dcore.jar) to method sun.awt.AppContext.getAppContext()
WARNING: Please consider reporting this to the maintainers of javax.media.j3d.JoglPipeline
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Inconsistency detected by ld.so: dl-lookup.c: 112: check_match: Assertion version->filename == NULL || ! _dl_name_match_p (version->filename, map)' failed!

java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper

sh
Виключення в потоці "main" java.lang.reflect.InvocationTargetException
в sun.reflect.NativeMethodAccessorImpl.invoke0 (Нативний метод)
в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498)
в org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main (JarRsrcLoader.java:58)
Викликано: java.awt.AWTError: Не знайдено технологію сприяння: org.GNOME.Accessibility.AtkWrapper
в java.awt.Toolkit.loadAssistiveTechnologies (Toolkit.java:807)
в java.awt.Toolkit.getDefaultToolkit (Toolkit.java:886)
в java.awt.Window.getToolkit (Window.java:1358)
в java.awt.Window.init (Window.java:506)
в java.awt.Window. (Window.java:537)
в java.awt.Frame. (Frame.java:420)
в java.awt.Frame. (Frame.java:385)
в javax.swing.JFrame. (JFrame.java:189)
в me.drton.jmavsim.Visualizer3D. (Visualizer3D.java:104)
в me.drton.jmavsim.Simulator. (Simulator.java:157)
в me.drton.jmavsim.Simulator.main (Simulator.java:678)

Якщо ви бачите цю помилку, спробуйте цей обхідний шлях:

Edit the accessibility.properties file:

sh
sudo gedit /etc/java-8-openjdk/accessibility.properties

та закоментуйте рядок, вказаний нижче:

sh
#assistive_technologies=org.GNOME.Acessibility.AtkWrapper

For more info, check this GitHub issue. A contributor found the fix in askubuntu.com.

Виняток у потоці "main" java.lang.UnsupportedClassVersionError

При компіляції jMAVsim ви можливо зіткнетеся з наступною помилкою:

sh
Exception in thread "main" java.lang.UnsupportedClassVersionError: me/drton/jmavsim/Simulator has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 58.0

Ця помилка говорить вам, вам потрібна більш свіжа версія Java у вашому середовищі. Версія файлу класу 58 відповідає jdk14, версія 59 - jdk15, версія 60 - jdk 16 тощо.

Щоб виправити це під macOS, ми рекомендуємо встановити OpenJDK через homebrew

sh
brew install --cask adoptopenjdk16