Запуск системи
Запуск 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 повинні виглядати для системи як окремі виконувані файли. Це робиться за допомогою символьних посилань. For each module a symbolic link
px4-<module> -> px4
is created in thebin
directory of the build folder. При виконанні двійкового файлу перевіряється його шлях (argv[0]
) і якщо це модуль (починається зpx4-
) він відправляє команду на основний екземпляр px4 (див. нижче).TIP
The
px4-
prefix is used to avoid conflicts with system commands (e.g.shutdown
), and it also allows for simple tab completion by typingpx4-<TAB>
.
:::
Оболонка повинна знати, де шукати символьні посилання. For that the
bin
directory with the symbolic links is added to thePATH
variable right before executing the startup scripts.Оболонка запускає кожен модуль як новий (клієнтський) процес. Кожен клієнтський процес повинен спілкуватися з головним екземпляром px4 (сервером), де справжні модулі працюють як потоки. Це зроблено через сокет UNIX. Сервер прослуховує сокет, до якого клієнти можуть під'єднатися та надіслати команду. Сервер відправляє вихідні дані та код повернення назад до клієнта.
The startup scripts call the module directly, e.g.
commander start
, rather than using thepx4-
prefix. This works via aliases: for each module an alias in the form ofalias <module>=px4-<module>
is created in the filebin/px4-alias.sh
.Скрипт
rcS
виконується з основного екземпляра Px4. Він не запускає жодних модулів, але спочатку оновлює зміннуPATH
, а потім просто запускає оболонку з файломrcS
як аргумент.Крім того, декілька екземплярів серверу можуть бути запущені для симуляції кількох засобів. A client selects the instance via
--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
в скрипті запуску.
Послідовність завантаження можна налагодити під'єднавши системну консоль та перезавантажити плату за живленням. Отриманий журнал завантаження містить детальну інформацію про послідовність завантажування і має містити підказки, чому завантаження переривалось.
Основні причини невдалого завантаження
- Для користувацьких додатків: у системі закінчилася оперативна пам'ять. Run the
free
command to see the amount of free RAM. - Відмова програмного забезпечення або припущення яке призвело до трасування стеку.
Заміна запуску системи
Весь процес завантаження може бути замінений шляхом створення файлу з новою конфігурацією /etc/rc.txt
на картці microSD (ніщо в старій конфігурації не буде автоматично запущено, і якщо файл порожній, зовсім нічого не буде запущено).
Налаштування стандартного завантаження майже завжди є кращим підходом. Це описано нижче.
Налаштування запуску системи
Найкращий спосіб змінити запуск системи - це ввести нову конфігурацію планера. Файл конфігурації планеру може бути включений у прошивку або на SD карту.
Якщо вам потрібно "підлаштувати" конфігурацію що існує, наприклад запустити один або більше застосунків або встановити значення кількох параметрів, можна вказати це створивши два файли у директорії /etc/
на SD картці:
- /etc/config.txt: modify parameter values
- /etc/extras.txt: start applications
Ці файли описані нижче.
WARNING
Системні файли завантаження - це UNIX файли, які потребують закінчення рядків UNIX. Якщо редагуєте їх на Windows - використовуйте відповідний редактор.
INFO
Ці файли згадуються в коді 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 # Will not result in boot failure if optional_app is unknown or fails set -e mandatory_app start # Will abort boot if mandatory_app is unknown or fails