Skip to content

jMAVSim з SITL

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

Підтримувані транспортні засоби:

  • Quad

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

TIP

jMAVSim також може бути використаний для симуляції HITL (як показано тут).

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

Налаштування jMAVSim включене в наші стандартні інструкції зі збірки (для macOS, Ubuntu Linux, Windows).

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

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

Mermaid graph: SITL Simulator

Запуск SITL

Після переконання, що вимоги для симуляції встановлені в системі, просто запустіть: Ціль make для зручності скомпілює збірку POSIX хоста та запустить симуляцію.

sh
make px4_sitl_default jmavsim

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

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

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

Ready to fly.


pxh>

Це також викличе вікно, яке показує тривимірний вигляд симулятора jMAVSim:

jMAVSim 3d View

Підйом у небо

Система почне друкувати інформацію про статус. Ви зможете почати літати, як тільки у вас буде фіксація позиції (незабаром після того, як консоль відобразить повідомлення: EKF починає об'єднання GPS).

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

sh
pxh> commander takeoff

Ви можете використовувати QGroundControl для виконання місії або для підключення до джойстика.

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

Параметри, які застосовуються до всіх симуляторів охоплені у темі Симуляція рівнем вище (деякі з них можуть бути продубльовані нижче).

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

Імітація збоїв пояснює, як викликати збої безпеки, такі як відмова GPS і розряд акумулятора.

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

Місце вильоту за замовчуванням в can be overridden використовуючи змінні середовища: PX4_HOME_LAT, PX4_HOME_LON та 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

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

Швидкість симуляції може бути збільшена або зменшена відносно реального часу за допомогою змінної середовища PX4_SIM_SPEED_FACTOR.

sh
export PX4_SIM_SPEED_FACTOR=2
make px4_sitl_default jmavsim

Для додаткової інформації дивіться: Симуляція > Запуск симуляції швидше реального часу.

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

Джойстики та підтримка пальцевого джойстику підтримуються через QGroundControl (інструкції з налаштування тут).

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

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

sh
make broadcast jmavsim

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

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

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

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

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

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

Щоб запустити jMAVSim без GUI, встановіть змінну середовища HEADLESS=1 як показано:

sh
HEADLESS=1 make px4_sitl jmavsim

Багатотранспортне моделювання

JMAVSim може бути використаний для симуляції багатьох транспортних засобів: Багато-транспортний Симулятор з JMAVSim.

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

Для розширення та налаштування інтерфейсу симуляції, відредагуйте файли у директорії Tools/jMAVSim. Код можна отримати через репозиторій jMAVSim на Github.

Система збірки забезпечує правильний підмодуль, який повинен бути перевірений для всіх залежностей, включаючи симулятор. Це не перезапише зміни в файлах у каталозі, проте, коли ці зміни будуть зафіксовані, підмодуль повинен бути зареєстрований у репозиторії Firmware з новим хешем коміту. Щоб це зробити, git add Tools/jMAVSim та здійсніть зміну. Це оновить хеш GIT симулятора.

Взаємодія з ROS

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

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

  • Сценарії запуску обговорюються в Запуск системи.
  • Симульована файлова система кореня (каталог "/") створюється всередині каталогу збірки тут: 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)

Ця помилка більше не повинна виникати, якщо підмодуль jMAVSim буде оновлено до новіших бібліотек jar, і Java 11 або Java 14 повинні працювати належним чином.

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

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

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
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper
at java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:807)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:886)
at java.awt.Window.getToolkit(Window.java:1358)
at java.awt.Window.init(Window.java:506)
at java.awt.Window.(Window.java:537)
at java.awt.Frame.(Frame.java:420)
at java.awt.Frame.(Frame.java:385)
at javax.swing.JFrame.(JFrame.java:189)
at me.drton.jmavsim.Visualizer3D.(Visualizer3D.java:104)
at me.drton.jmavsim.Simulator.(Simulator.java:157)
at me.drton.jmavsim.Simulator.main(Simulator.java:678)

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

Редагуйте файл accessibility.properties:

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

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

sh
#assistive_technologies=org.GNOME.Acessibility.AtkWrapper

Для отримання додаткової інформації перевірте це питання на GitHub. Учасник знайшов виправлення на 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