Запуск системи
Запуск PX4 контрольований скриптами оболонки. На NuttX вони знаходяться у директорії ROMFS/px4fmu_common/init.d, деякі з них також використовуються на Posix системах (Linux/MacOS). Скрипти які використовуються тільки на Posix системах знаходяться у ROMFS/px4fmu_common/init.d-posix.
Усі файли, які починаються з числа і підкреслення (наприклад, 10000_airaipl
) є попередньо визначеними конфігураціями планерів. Вони експортуються під час збірки в файл airframes.xml
який потім аналізується QGroundControl для користувацького інтерфейсу вибору планера. Як додати нову конфігурацію описано тут.
Файли що залишилися є частиною загальної логіки запуску. Перший файл що виконується є скрипт init.d/rcS (або init.d-posix/rcS на Posix), який викликає інші скрипти.
Наступні секції розділені відповідно до операційної системи, на яких виконується PX4.
Posix (Linux/MacOS)
На Posix системна оболонка використовується як інтерпретатор скриптів (наприклад, /bin/sh що є символьним посиланням на dash в Ubuntu). Щоб це працювало потрібно кілька речей:
- Модулі PX4 повинні виглядати для системи як окремі виконувані файли. Це робиться за допомогою символьних посилань. Для кожного модуля створюється символьне посилання
px4-<module> -> px4
в каталозі збіркиbin
. При виконанні двійкового файлу перевіряється його шлях (argv[0]
) і якщо це модуль (починається зpx4-
) він відправляє команду на основний екземпляр px4 (див. нижче).
TIP
Префікс px4-
використовується для уникнення конфліктів з системними командами (наприклад shutdown
), також це дозволяє просте автодоповнення за допомогою клавіші Tab
при вводі <0>px4-<TAB></0>.
- Оболонка повинна знати, де шукати символьні посилання. Для цього директорія
bin
із символьними посиланнями додається до змінноїPATH
одразу перед виконанням скриптів запуску. - Оболонка запускає кожен модуль як новий (клієнтський) процес. Кожен клієнтський процес повинен спілкуватися з головним екземпляром px4 (сервером), де справжні модулі працюють як потоки. Це зроблено через сокет UNIX. Сервер прослуховує сокет, до якого клієнти можуть під'єднатися та надіслати команду. Сервер відправляє вихідні дані та код повернення назад до клієнта.
- Стартові скрипти викликають модулі безпосередньо, наприклад
commander start
, замість використання префіксаpx4-
. Це працює через псевдоніми: для кожного модуля створюється псевдонім у форміalias <module>=px4-<module>
файломbin/px4-alias.sh
. - Скрипт
rcS
виконується з основного екземпляра px4. Він не запускає жодних модулів, але спочатку оновлює зміннуPATH
, а потім просто запускає оболонку з файломrcS
як аргумент. - Крім того, декілька екземплярів серверу можуть бути запущені для симуляції кількох засобів. Клієнт обирає екземпляр через параметр
--instance
. В скрипті екземпляр доступний за допомогою змінної$px4_instance
.
Модулі можна виконувати з будь-якого терміналу, коли PX4 вже запущено в системі. Наприклад:
sh
cd <PX4-Autopilot>/build/px4_sitl_default/bin
./px4-commander takeoff
./px4-listener sensor_accel
Динамічні модулі
Зазвичай всі модулі компілюються в єдиний виконуваний файл PX4. Однак, на Posix системах, є можливість компіляції модуля в окремий файл, який можна завантажити в PX4 використовуючи команду dyn
.
sh
dyn ./test.px4mod
NuttX
NuttX має інтегрований інтерпретатор оболонки (NuttShell (NSH)), тому скрипти можуть бути виконані безпосередньо.
Налагодження завантаження системи
Відмова драйверу програмного компонента не призведе до перерваного завантаження. Це контролюється директивою set +e
в скрипті запуску.
Послідовність завантаження можна налагодити під'єднавши системну консоль та перезавантажити плату за живленням. Отриманий журнал завантаження містить детальну інформацію про послідовність завантажування і має містити підказки, чому завантаження переривалось.
Основні причини невдалого завантаження
- Для користувацьких додатків: у системі закінчилася оперативна пам'ять. Виконайте команду
free
, щоб побачити кількість вільної оперативної пам'яті. - Відмова програмного забезпечення або припущення яке призвело до трасування стеку.
Заміна запуску системи
Весь процес завантаження може бути замінений шляхом створення файлу з новою конфігурацією /etc/rc.txt
на картці microSD (ніщо в старій конфігурації не буде автоматично запущено, і якщо файл порожній, зовсім нічого не буде запущено).
Налаштування стандартного завантаження майже завжди є кращим підходом. Це описано нижче.
Налаштування запуску системи
Найкращий спосіб змінити запуск системи - це ввести нову конфігурацію планера. Файл конфігурації планеру може бути включений у прошивку або на SD карту.
Якщо вам потрібно "підлаштувати" конфігурацію що існує, наприклад запустити один або більше застосунків або встановити значення кількох параметрів, можна вказати це створивши два файли у директорії /etc/
на SD картці:
- /etc/config.txt: для зміни значення параметрів
- /etc/extras.txt: для запуску застосунків
Ці файли описані нижче.
WARNING
Системні файли завантаження - це UNIX файли, які потребують закінчення рядків UNIX. Якщо редагуєте їх на Windows - використовуйте відповідний редактор.
:::note Ці файли згадуються в коді PX4 як /fs/microsd/etc/config.txt
та /fs/microsd/etc/extras.txt
, де коренева директорія microSD карти визначається шляхом /fs/microsd
. :::
Налаштування конфігурації (config.txt)
Файл config.txt
можна використовувати для зміни параметрів. Він завантажується після того, як головна система була налаштована та перед тим як завантажена.
Наприклад, ви можете створити файл на SD картці, etc/config.txt
з такими значеннями параметрів як показано:
sh
param set-default PWM_MAIN_DIS3 1000
param set-default PWM_MAIN_MIN3 1120
Запуск додаткових застосунків (extras.txt)
extras.txt
можна використовувати для запуску додаткових застосунків після завантаження основної системи. Зазвичай це будуть контролери корисного навантаження або подібні необов'язкові користувацькі компоненти.
WARNING
Виклик невідомої команди в файлах завантаження системи може призвести до збою завантаження. Зазвичай система не транслює повідомлення mavlink після збою при завантаженні, в такій ситуації перевірте повідомлення про помилки, які виведено в системній консолі.
Наступний приклад показує, як запускати користувацькі застосунки:
Створіть файл на SD картці
etc/extras.txt
із цим вмістом:shcustom_app start
Команду можна зробити необов'язковою шляхом оздоблення команди директивами
set +e
таset -e
:shset +e optional_app start # Не призведе до помилки при завантаженні якщо optional_app не знайдено або відмовить set -e mandatory_app start # Перерве завантаження якщо mandatory_app не знайдено або відмовить