Prog Academy

MilTech · за підпискою

Протоколи і телеметрія: бінарні фрейми, CRC, MAVLink-подібні повідомлення

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

  • 14 модулів
  • 40+ практичних завдань
  • Автоматична перевірка
  • Українською

Отримати доступ до курсу

Курс за підпискою · Навчання у власному темпі

Про курс

Що це за курс?

Між автопілотом дрона і наземною станцією немає «повідомлень» — є потік байтів через радіомодем чи послідовний порт UART. Щоб з нього вийшли напруга батареї, координати й режим польоту, хтось має знайти початок кадру, перевірити контрольну суму, розібрати поля в правильному порядку байтів, пережити шум в ефірі й не впасти на першому ж дивному кадрі. Правила такого пакування називаються протоколом, а потік даних про стан апарата — телеметрією. Цей курс — про роботу з ними: від окремого байта до повноцінного декодера наземної станції.

Наскрізний сценарій — цивільний дрон для аерофотозйомки та його наземна станція. Ви працюватимете із записами («захопленнями») потоку в шістнадцятковому вигляді, із потоком, у якому є сміття й пошкоджені кадри, з пропусками послідовних номерів, з двома радіоканалами одночасно і з прошивками різних версій.

Аудиторія

Для кого цей курс?

  • Знаєте Python і C++

    Напишете парсер бінарних кадрів з CRC, COBS і ресинхронізацією, який не падає на пошкоджених даних.

  • Шлях «QA-інженер у MilTech»

    Навчитеся оцінювати втрати за послідовними номерами і перевіряти стійкість парсера до обірваних кадрів.

  • Шлях «MilTech Software Engineer»

    Зберете декодер наземної станції для навчального формату TLM-1, натхненного протоколом MAVLink.

Спершу потрібна підготовка

Курс спирається на знання, позначені нижче як обов’язкові.

Потрібно знати

  • Python на рівні безкоштовного курсу «Основи програмування на Python» — зокрема уроки про рядки (split, strip, startswith), списки, словники і sorted: вони трапляються з першого модуля

  • C++ на рівні безкоштовного курсу «Основи програмування на C++», включно з уроками про вектори, функції, структури, посилання, типи uint8_t/uint16_t, switch і enum class.

    Детальніше
    • Задачі на C++ — близько третини балів курсу, без них курс не завершити
  • C++ на рівні курсу «C++ Advanced».

    Детальніше
    • У своїх файлах ви писатимете: вказівник на байти const uint8_t* з довжиною (модуль 3), ітератори begin()/end() вектора (модуль 5), std::deque (модуль 8), а в модулях 9–14 — методи класу з приватними полями, std::optional, std::array, std::string і std::to_string, код, розбитий на .h і .cpp.
    • Ввід і друк (printf, scanf, std::getline, std::istringstream) у задачах уже написані — їх достатньо вміти прочитати

Варто знати

  • Математика

    Здебільшого арифметика; у модулі 12 знадобляться радіани і косинус (відстань між GPS-точками) — їх з нуля пояснює курс «Математика для MilTech з нуля»

Не потрібно знати заздалегідь

  • Пояснюємо в курсі

    Байти й шістнадцятковий запис, порядок байтів, побітові операції й зсуви, struct і bytes у Python, контрольні суми, усі формати кадрів, безпечний розбір байтів у C++

  • Радіообладнання чи досвід з дронами.

    Детальніше
    • Встановлювати нічого не треба — код пишеться і запускається в браузері

Якщо цих знань ще немає — пройдіть курси за порядком:

  1. З нуля
  2. Обов’язково Основи програмування на Python
  3. Обов’язково Основи програмування на C++
  4. Бажано Математика для MilTech з нуля
  5. Обов’язково C++ Advanced
  6. Цей курс Протоколи і телеметрія: бінарні фрейми, CRC, MAVLink-подібні повідомлення

Результат

Що ви навчитеся робити

розбирати й збирати бінарні поля: порядок байтів (little/big-endian), знакові й беззнакові числа, масштаби одиниць

ділити потік на кадри за стартовим байтом і довжиною, писати парсер як скінченний автомат

рахувати контрольні суми sum8, XOR, CRC-8 і CRC-16 (CRC — Cyclic Redundancy Check) і розуміти їхні параметри

кодувати й декодувати байт-стафінг COBS і SLIP — способи відділяти кадри спеціальним байтом

ресинхронізуватися після сміття так, щоб не губити справжні кадри

працювати з навчальним форматом TLM-1, натхненним відкритим протоколом дронів MAVLink: заголовок, послідовний номер, адреса апарата, тип повідомлення, crc_extra

оцінювати втрати за послідовними номерами і частоти повідомлень, рахувати бюджет каналу

проєктувати розширювані TLV-записи (тип–довжина–значення) і сумісність версій протоколу

писати той самий парсер на Python і на C++ так, щоб він не падав і не читав за межами буфера, — і зібрати фінальний декодер наземної станції

Формат

Як влаштоване навчання?

14 модулів у логіці «знизу вгору»: байти → кадри → контрольні суми → стійкість до шуму → повний формат повідомлень → аналіз втрат і частот → розширення й версії → фінальний декодер. У кожному модулі — теорія з робочим прикладом і 2–3 задачі з автоматичною перевіркою: написати з нуля, знайти помилку в робочому на вигляд коді або розширити наявний модуль. Плюс тести з поясненнями і дві практичні форми. Більшість задач (25 з 40) — на Python, 15 — на C++17 (так пишуть бортовий і станційний код), лише стандартна бібліотека. Кожне рішення перевіряється на прихованих захопленнях: з іншим шумом, переповненням лічильників, від'ємними значеннями, обірваними кадрами.

  • Теорія

    15 уроків з прикладами

  • Практика в браузері

    40+ завдань з автоматичною перевіркою

  • Тести

    5 тестів для самоперевірки

  • Власний темп

    Онлайн на my.prog.academy, без встановлення програм

AI-помічник

AI-помічник поруч під час навчання

На сторінках курсу, уроків і завдань є кнопка «Запитати AI». Помічник знає матеріали саме цього курсу й урок, на якому ви зараз, тому відповідає по темі й показує, у яких уроках про це йдеться.

  • Пояснить інакше

    Не зрозуміли урок з першого разу — попросіть пояснити простіше або дати ще один приклад.

  • Допоможе із завданням

    Застрягли — підкаже, з чого почати, і допоможе знайти помилку у вашому рішенні. Готового рішення не дає.

  • Знайде потрібну тему

    Запитайте, де пояснювали поняття, — і отримаєте посилання на потрібні уроки курсу.

  • Продовжить розмову

    Уточнюйте без повторів: помічник пам’ятає розмову, а нещодавні розмови курсу зберігаються.

Входить у кожен тариф оплаченої підписки — Basic і Premium. У Premium ліміти використання AI-помічника вищі — ним можна користуватися активніше. Це помічник у навчанні, а не генератор готових відповідей: він пояснює й підказує, а завдання ви розв’язуєте самі.

Програма

Програма курсу

14 модулів, 40+ практичних завдань з автоматичною перевіркою і 5 тестів. Відкрийте модуль, щоб побачити всі теми.

Модуль 1 — Байти, порядок байтів і struct 2 уроки · 3 практики

Як число стає байтами і назад: ширина поля, little- і big-endian, знакові числа, масштаби одиниць

  • Теорія Вступ: шлях телеметрії від дрона до екрана оператора
  • Теорія Число — це кілька байтів у певному порядку
  • Практика Запис батареї з лабораторного блока живлення
  • Практика Знайдіть помилку — висотомір зі старої партії
  • Практика C++ — кодуємо BATTERY для бортового модуля
Модуль 2 — Фреймінг: стартовий байт і довжина 1 урок · 3 практики

UART передає байти без меж між повідомленнями. Як знайти кадр: стартовий байт, поле довжини, скінченний автомат

  • Теорія З потоку байтів — у кадри
  • Практика Ділимо захоплення на кадри
  • Практика Знайдіть помилку — парсер «глухне» після keep-alive
  • Практика C++ — хибний старт і завеликий LEN
Модуль 3 — Контрольні суми: sum8, XOR, CRC-8, CRC-16 1 урок · 3 практики · 1 тест

Як приймач дізнається, що кадр пошкоджено: прості суми, CRC та їхні параметри, контрольне значення 123456789

  • Теорія Від суми байтів до CRC
  • Практика Три контрольні суми
  • Практика Знайдіть помилки — CRC-16 у бібліотеці станції (C++)
  • Практика Перевіряємо CRC у кадрах BENCH-1
  • Тест Байти, фрейми і контрольні суми
Модуль 4 — Байт-стафінг: COBS і SLIP 1 урок · 3 практики

Коли межі кадру задає роздільник, він не має траплятися всередині даних: SLIP-екранування і COBS

  • Теорія Роздільник, якого немає в даних
  • Практика Кодувальник COBS
  • Практика Знайдіть помилку — довгі звіти камери
  • Практика C++ — декодер SLIP
Модуль 5 — Ресинхронізація після сміття 1 урок · 3 практики

Хибні стартові байти, пошкоджені кадри, обірвані записи: як не втратити жодного справжнього кадру

  • Теорія Правило одного байта
  • Практика Парсер, що не губить кадри
  • Практика C++ — потоковий парсер з повтором буфера
  • Практика Звіт про втрати синхронізації
Модуль 6 — Навчальний формат TLM-1: заголовок, seq, crc_extra 1 урок · 3 практики · 1 тест

Повна специфікація MAVLink-подібного навчального формату: поля заголовка, таблиця повідомлень, CRC з crc_extra

  • Теорія Специфікація TLM-1
  • Практика Заголовки і crc_extra
  • Практика Розбираємо поля повідомлень
  • Практика C++ — кодувальник кадрів TLM-1
  • Тест COBS, ресинхронізація і TLM-1
Модуль 7 — Пропуски seq і оцінка втрат 1 урок · 3 практики

Лічильник seq переповнюється, апаратів і компонентів кілька, копії приходять двома радіо: рахуємо втрати чесно

  • Теорія Що каже номер кадру
  • Практика Втрати по кожному лінку
  • Практика Знайдіть помилку — два апарати, один лічильник
  • Практика Два радіо — пізні копії і дублікати
Модуль 8 — Статистика частоти повідомлень 1 урок · 4 практики

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

  • Теорія Частота, вікно і бюджет каналу
  • Практика Частоти повідомлень
  • Практика C++ — живий монітор heartbeat
  • Практика Частоти проти конфігурації
  • Практика Бюджет телеметричного каналу
Модуль 9 — TLV: розширювані записи 1 урок · 3 практики · 1 тест

Тип–довжина–значення: як додавати поля, не ламаючи старі приймачі, і як не вийти за межі буфера

  • Теорія Тип, довжина, значення
  • Практика Відповідь «хто ти?» від бортового модуля
  • Практика C++ — TLV без падіння
  • Практика C++ — довга форма довжини
  • Тест Частоти, втрати і TLV
Модуль 10 — Версіонування і сумісність 1 урок · 3 практики

TLM-2: усічення нулів, розширені поля, прапорці сумісності і несумісності — і як приймати кілька версій одночасно

  • Теорія Протокол, що живе роками
  • Практика TLM-1 і TLM-2 в одному потоці
  • Практика Знайдіть помилку — батарея зникла після оновлення
  • Практика Прапорці несумісності і підписані кадри
Модуль 11 — Безпечний парсер на C++ 1 урок · 3 практики

Невизначена поведінка за межами буфера, перевірка довжини до читання, читач байтів, std::optional, цілочисельне просування і файли.h/.cpp

  • Теорія Декодер на C++, який не падає
  • Практика C++ — читач байтів для заголовків і перших полів
  • Практика C++ — знайдіть помилку в перенесеному CRC
  • Практика C++ — модуль розбору GPS
Модуль 12 — Стійкість до пошкоджених даних 1 урок · 3 практики · 1 тест

Валідний CRC ще не означає осмислений кадр: довжини, переліки, текст, правдоподібність координат і часу

  • Теорія CRC зійшовся — це ще не все
  • Практика Знайдіть помилки — станція впала вночі
  • Практика C++ — фільтр правдоподібності GPS
  • Практика Діагностика декодера
  • Тест Версії, безпечний C++ і стійкість
Модуль 13 — Декодер телеметрії → CSV 1 урок · 3 практики

З кадрів — у таблицю для аналітиків: стовпці, одиниці, пропуски, «останнє відоме значення» і форматування без float

  • Теорія Таблиця, якій можна вірити
  • Практика Трек GPS для карти
  • Практика Додаємо напругу і курс до треку
  • Практика C++ — орієнтація в CSV
Модуль 14 — Фінал: декодер наземної станції 1 урок · 2 практики · 1 тест

Збираємо все: ресинхронізація, CRC з crc_extra, втрати за seq, розбір повідомлень і звіт після польоту — на Python і C++

  • Теорія Архітектура декодера станції
  • Практика Аналізатор сесії наземної станції
  • Практика C++ — підсумок лінків для бекенда станції
  • Тест Підсумковий тест: протоколи і телеметрія

Стек

Які технології використовуються?

  • Python
  • C++

Код пишете й запускаєте в браузері на платформі — встановлювати нічого не потрібно.

Застосування

Де застосовуються ці знання?

  1. Декодери телеметрії наземних станцій
  2. Обмін даними через UART і радіомодеми
  3. Тестування і стійкість парсерів протоколів

Доступ

Як отримати доступ?

  1. Залиште заявку

    Заповніть коротку форму на цій сторінці.

  2. Завершіть реєстрацію в боті

    Після заявки оберіть Telegram або Viber — бот надішле подальші інструкції щодо доступу.

  3. Навчайтеся на платформі

    Уроки, практика й тести — на my.prog.academy, у зручному для вас темпі.

Контакт

Почніть навчання на платформі

Залиште контакти — надішлемо деталі доступу до курсу «Протоколи і телеметрія: бінарні фрейми, CRC, MAVLink-подібні повідомлення».

Наступні й суміжні курси

C++

C++ для embedded і MilTech

Прошивка мікроконтролерів на C++17: регістри, драйвери, переривання, CRC, ШІМ і watchdog на віртуальних платах.

20 модулів · 45+ практичних завдань

C++ · Python

Системи реального часу

Планування задач, яке можна довести: утилізація, час відгуку, RM і EDF, інверсія пріоритетів і контроль дедлайнів.

12 модулів · 25+ практичних завдань

Python · NumPy

Математика для MilTech з нуля

Кути, вектори, матриці, похідна, інтеграл і шум вимірювань — саме та математика, на яку спираються курси MilTech.

16 модулів · 55+ практичних завдань

Часті питання про курс

Що це за курс?

«Протоколи і телеметрія: бінарні фрейми, CRC, MAVLink-подібні повідомлення» — онлайн-курс за підпискою на навчальній платформі Prog Academy. Навчіться читати байти, які летять між апаратом і наземною станцією. Між автопілотом дрона і наземною станцією немає «повідомлень» — є потік байтів через радіомодем чи послідовний порт UART. Щоб з нього вийшли напруга батареї, координати й режим польоту, хтось має знайти початок кадру, перевірити контрольну суму, розібрати поля в правильному порядку байтів, пережити шум в ефірі й не впасти на першому ж дивному кадрі. Правила такого пакування називаються протоколом, а потік даних про стан апарата — телеметрією. Цей курс — про роботу з ними: від окремого байта до повноцінного декодера наземної станції.

Для кого цей курс?

Розробникам і тестувальникам, які працюють або хочуть працювати з телеметрією та зв'язком апарата з наземною станцією.

Які знання потрібні перед стартом?

Обов'язково: Python на рівні безкоштовного курсу «Основи програмування на Python» — зокрема уроки про рядки (split, strip, startswith), списки, словники і sorted: вони трапляються з першого модуля Обов'язково: C++ на рівні безкоштовного курсу «Основи програмування на C++», включно з уроками про вектори, функції, структури, посилання, типи uint8_t/uint16_t, switch і enum class. Задачі на C++ — близько третини балів курсу, без них курс не завершити Обов'язково: C++ на рівні курсу «C++ Advanced». У своїх файлах ви писатимете: вказівник на байти const uint8_t* з довжиною (модуль 3), ітератори begin()/end() вектора (модуль 5), std::deque (модуль 8), а в модулях 9–14 — методи класу з приватними полями, std::optional, std::array, std::string і std::to_string, код, розбитий на .h і .cpp. Ввід і друк (printf, scanf, std::getline, std::istringstream) у задачах уже написані — їх достатньо вміти прочитати Математика: здебільшого арифметика; у модулі 12 знадобляться радіани і косинус (відстань між GPS-точками) — їх з нуля пояснює курс «Математика для MilTech з нуля» Пояснюємо в курсі: байти й шістнадцятковий запис, порядок байтів, побітові операції й зсуви, struct і bytes у Python, контрольні суми, усі формати кадрів, безпечний розбір байтів у C++ Не потрібно: радіообладнання чи досвід з дронами. Встановлювати нічого не треба — код пишеться і запускається в браузері

Які практичні завдання будуть?

14 модулів у логіці «знизу вгору»: байти → кадри → контрольні суми → стійкість до шуму → повний формат повідомлень → аналіз втрат і частот → розширення й версії → фінальний декодер. У кожному модулі — теорія з робочим прикладом і 2–3 задачі з автоматичною перевіркою: написати з нуля, знайти помилку в робочому на вигляд коді або розширити наявний модуль. Плюс тести з поясненнями і дві практичні форми. Більшість задач (25 з 40) — на Python, 15 — на C++17 (так пишуть бортовий і станційний код), лише стандартна бібліотека. Кожне рішення перевіряється на прихованих захопленнях: з іншим шумом, переповненням лічильників, від'ємними значеннями, обірваними кадрами.

Які технології використовуються?

Python, C++. Код пишете й запускаєте прямо в браузері на платформі — встановлювати нічого не потрібно.

Скільки модулів містить курс?

14 модулів: Байти, порядок байтів і struct; Фреймінг: стартовий байт і довжина; Контрольні суми: sum8, XOR, CRC-8, CRC-16; Байт-стафінг: COBS і SLIP; Ресинхронізація після сміття; Навчальний формат TLM-1: заголовок, seq, crc_extra; Пропуски seq і оцінка втрат; Статистика частоти повідомлень; TLV: розширювані записи; Версіонування і сумісність; Безпечний парсер на C++; Стійкість до пошкоджених даних; Декодер телеметрії → CSV; Фінал: декодер наземної станції. Практичних завдань з автоматичною перевіркою — 40+, тестів — 5.

Як отримати доступ?

Залиште заявку на цій сторінці й завершіть реєстрацію в Telegram- або Viber-боті Prog Academy — там ви отримаєте подальші інструкції щодо доступу. Навчання проходить на платформі my.prog.academy у власному темпі.

Чи входить курс у підписку?

Так. Курс входить у підписку на платформі Prog Academy: доступ до всіх курсів за підпискою; ai-помічник з навчання в кожному курсі; усі уроки, домашні завдання та автоматична перевірка; нові курси за підпискою додаються автоматично.

Які сценарії й дані використовуються в курсі?

Усі формати й захоплення в курсі навчальні й синтетичні. Формат TLM-1 натхненний MAVLink, але не сумісний із ним: це окремий, повністю описаний у курсі протокол.

Не знайшли відповідь?

Залиште запитання — підкажемо, чи підходить вам курс і з чого краще почати.