Журналювання
Системний журналізатор може реєструвати будь-яку тему ORB з усіма включеними полями. Все необхідне генерується з файлу .msg
, тому потрібно вказати лише назву теми. Необов'язковий параметр інтервалу визначає максимальну швидкість ведення журналу певної теми. Усі існуючі екземпляри теми реєструються.
Формат виведення журналу - ULog.
Використання
За замовчуванням, реєстрація автоматично починається при взбиранні на охорону, і зупиняється при знятті з охорони. Для кожної сесії готовності на SD-картці створюється новий файл журналу. Для відображення поточного стану використовуйте logger status
на консолі. Якщо ви хочете почати реєструвати негайно, використовуйте logger on
. Це скасовує стан готовності, якщо система була увімкнена. вимкнути логування
скасовує це.
Якщо реєстрація припиниться через помилку запису або досягнення максимального розміру файлу, PX4 автоматично перезапустить реєстрацію в новому файлі.
Для отримання списку всіх підтримуваних команд та параметрів реєстратора використовуйте:
logger help
Налаштування
За замовчуванням систему логування налаштовано на збір значущих записів для звітування про польоти з Flight Review.
Логування може бути подальшо налаштоване за допомогою параметрів SD Logging. Параметри, які ви найімовірніше зміните, перераховані нижче.
Параметр | Опис |
---|---|
РЕЖИМ SDLOG | Журналювання. Визначає, коли починається та закінчується ведення журналу. - -1 : Ведення журналу вимкнено.- 0 : Записувати від увімкнення до вимкнення (типово).- 1 : Записувати з моменту завантаження до вимкнення.- 2 : Записувати з моменту завантаження до вимкнення живлення.- 3 : Записувати на основі каналу дистанційного керування AUX1.- 4 : Записувати з першого увімкнення до вимкнення живлення. |
SDLOG_PROFILE | Профіль ведення журналу. Використовуйте це для увімкнення менш поширеного ведення журналу/аналізу (наприклад, для відтворення EKF2, ведення журналу високої швидкості для налаштування PID та фільтрів, калібрування температури термічної калібрування). |
SDLOG_MISSION | Створіть дуже малий додатковий "Журнал місії". Цей журнал не може бути використаний з Flight Review, але корисний, коли вам потрібен невеликий журнал для геотегування або дотримання регулятивних вимог. |
Корисні налаштування для конкретних випадків:
- Сирові дані датчика для порівняння: SDLOG_MODE=1 та SDLOG_PROFILE=64.
- Вимкнення ведення журналу повністю: SDLOG_MODE=
-1
Модуль реєстрації
Розробники можуть додатково налаштувати, яка інформація реєструється за допомогою модуля реєстратора. Це дозволяє, наприклад, реєструвати ваші власні теми uORB.
Конфігурація SD-карти
Окремо, список зареєстрованих тем також може бути налаштований за допомогою файлу на картці SD. Створіть файл etc/logging/logger_topics.txt
на картці зі списком тем (для SITL це build/px4_sitl_default/rootfs/fs/microsd/etc/logging/logger_topics.txt
):
plain
<interval>
є необов'язковим, і якщо вказано, визначає мінімальний інтервал у мс між двома зареєстрованими повідомленнями цієї теми. Якщо не вказано, тема реєструється з повною швидкістю.
<instance>
є необов'язковим, і якщо вказано, визначає екземпляр для журналювання. Якщо не вказано, всі екземпляри теми реєструються. Для вказівки <instance>
, необхідно вказати <interval>
. Може бути встановлено на 0 для реєстрації з повною швидкістю
Теми в цьому файлі замінюють всі теми за замовчуванням, які були зареєстровані.
Приклади :
plain
sensor_accel 0 0
sensor_accel 100 1
sensor_gyro 200
sensor_mag 200 1
Ця конфігурація буде реєструвати sensor_accel 0 з повною швидкістю, sensor_accel 1 з частотою 10 Гц, всі екземпляри sensor_gyro з частотою 5 Гц та sensor_mag 1 з частотою 5 Гц.
Скрипти
Є кілька сценаріїв для аналізу та конвертації файлів журналювання в репозиторії pyulog.
Обмеження розміру файлу
Максимальний розмір файлу залежить від файлової системи та ОС. Розмір обмеження на NuttX наразі становить близько 2 ГБ.
Відключення
Втрати логування небажані, і є кілька факторів, що впливають на кількість втрат:
- Більшість SD-карт, які ми тестували, проявляють кілька пауз кожну хвилину. Це проявляється як кілька 100 мс затримка під час команди запису. Це призводить до відключення, якщо буфер запису заповнюється протягом цього часу. Цей ефект залежить від SD-карти (див. нижче).
- Форматування SD-карти може допомогти у запобіганні викидань.
- Збільшення буфера журналу допомагає.
- Зменшіть частоту реєстрації обраних тем або видаліть непотрібні теми з реєстрації (
info.py <file>
корисний для цього).
SD-карти
Максимальний підтримуваний розмір SD-карти для NuttX - 32 ГБ (Специфікація карт пам’яті SD, версія 2.0). SanDisk Extreme U3 32GB та Samsung EVO Plus 32 відомі як надійні карти (не проявляють піков запису часу, тому практично відсутні відмови).
Таблиця нижче показує середню послідовну швидкість запису [KB/s] / максимальний час запису на блок (середній) [мс] для контролерів польоту на основі F4- (Pixracer), F7- та H7-.
SD-карта | F4 | F7 | H7 |
---|---|---|---|
SanDisk Extreme U3 32GB | 1500 / 15 | 1800/10 | 2900/8 |
Samsung EVO Plus 32GB | 1700/10-60 | 1800/10-60 | 1900/9-60 |
Sandisk Ultra Class 10 8GB | 348 / 40 | ?/? | ?/? |
Sandisk Class 4 8GB | 212 / 60 | ?/? | ?/? |
SanDisk Class 10 32 GB (High Endurance Video Monitoring Card) | 331 / 220 | ?/? | ?/? |
Lexar U1 (Class 10), 16GB High-Performance | 209 / 150 | ?/? | ?/? |
Sandisk Ultra PLUS Class 10 16GB | 196 /500 | ?/? | ?/? |
Sandisk Pixtor Class 10 16GB | 334 / 250 | ?/? | ?/? |
Sandisk Extreme PLUS Class 10 32GB | 332 / 150 | ?/? | ?/? |
Запис пропускної здатності зі стандартними темами становить близько 50 КБ/с, що задовольняє майже всі SD-карти у термінах їх середньої послідовної швидкості запису.
Важливішим, ніж середня швидкість запису, є піки (або взагалі високі значення) максимального часу запису на блок (4 КБ) або часи fsync
, оскільки довгий час запису означає, що потрібен більший буфер журналу, щоб уникнути втрат даних.
PX4 використовує більші буфери на F7/H7 та кешування читання, що достатньо компенсує піки на багатьох поганих картках. З цим сказано, якщо ваша картка має fsync
або тривалість запису декілька 100 мс, вона не повинна бути вибрана для використання з PX4. Ви можете перевірити значення, запустивши sd_bench слід запустити з більшою кількістю ітерацій (близько 100 має вистачити).
sh
sd_bench -r 100
Це визначає мінімальний розмір буфера: чим більше це максимальне значення, тим більше потрібно мати розмір буфера журналу, щоб уникнути втрат даних. PX4 використовує більші буфери на F7/H7 та кешування читання, щоб компенсувати деякі з цих проблем.
INFO
Якщо у вас є питання щодо певної картки, ви можете запустити вищезазначений тест та повідомити результати за посиланням https://github.com/PX4/PX4-Autopilot/issues/4634.
Потокове ведення журналу
Традиційний і все ще повністю підтримуваний спосіб ведення журналу - використання SD-карти на FMU. Однак є альтернатива, потокове ведення журналу, яке надсилає ті ж дані журналювання через MAVLink. Цей метод може бути використаний, наприклад, у випадках, коли FMU не має слоту для SD-карти (наприклад, Intel® Aero Ready to Fly Drone) або просто для уникнення проблем з SD-картами. Обидва методи можуть бути використані незалежно один від одного і одночасно.
Вимога полягає в тому, що посилання забезпечує принаймні ~50KB/s, наприклад, WiFi-посилання. І тільки один клієнт може запитати потік журналування одночасно. Підключення не потребує надійності, протокол розроблений для обробки втрат.
Існують різні клієнти, які підтримують потокову передачу ulog:
mavlink_ulog_streaming.py
скрипт PX4-Autopilot/Tools.- QGroundControl:
- MAVGCL
Діагностика
Якщо потік журналування не починається, переконайтеся, що
logger
працює (див. вище), та перевірте вивід консолі під час запуску.Якщо це все ще не працює, переконайтеся, що використовується MAVLink 2. Застосуйте це, встановивши
MAV_PROTO_VER
на 2.Потік реєстрації використовує максимум 70% налаштованої швидкості MAVLink (
-r
параметр). Якщо потрібно більше, повідомлення видаляються. Поточний використаний відсоток можна перевірити за допомогоюmavlink status
(у цьому прикладі використано 1,8%):shinstance #0: GCS heartbeat: 160955 us ago mavlink chan: #0 type: GENERIC LINK OR RADIO flow control: OFF rates: tx: 95.781 kB/s txerr: 0.000 kB/s rx: 0.021 kB/s rate mult: 1.000 ULog rate: 1.8% of max 70.0% accepting commands: YES MAVLink version: 2 transport protocol: UDP (14556)
Також переконайтеся, що
txerr
залишається на 0. Якщо це піде вгору, або буфер відправлення NuttX занадто малий, або фізичний зв'язок насичений, або апаратне забезпечення занадто повільне для обробки даних.