Skip to content

Запуск системи

Запуск 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 картці:

Ці файли описані нижче.

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 із цим вмістом:

    sh
    custom_app start
  • Команду можна зробити необов'язковою шляхом оздоблення команди директивами set +e та set -e:

    sh
    set +e
    optional_app start      # Не призведе до помилки при завантаженні якщо optional_app не знайдено або відмовить
    set -e
    
    mandatory_app start     # Перерве завантаження якщо mandatory_app не знайдено або відмовить