Из чего состоит
Прошивка живёт на плате RP2040 (Raspberry Pi Pico) — это микроконтроллер за пару сотен рублей. Он выбран не случайно: под Linux (а Raspberry Pi Zero 2 W работает под Linux) планировщик, SD-карта и WiFi дают дрожание шага в миллисекунды, а контуру стабилизации нужен ровный шаг 250 раз в секунду. Raspberry считает медленное — курс по солнцу, снос ветром, картинку, — а рули держит микроконтроллер.
| Файл | Что делает | Строк |
|---|---|---|
control.py | Контуры управления: курс, крен, тангаж. Считает отклонение рулей из момента, инерции и скоростного напора, а не «на глаз» | 664 |
imu.py | Драйвер гироскопа и акселерометра по I2C, включая калибровку ухода | 101 |
sequencer.py | Система запуска: запал, выдержка 0,5 с, катапульта, распознавание отказа двигателя | 250 |
system.py | Автоматический парашют: барометр, акселерометр, таймер, двойной выпуск | 340 |
flight_computer.py | Собирает всё вместе и принимает решения. Здесь же спасение от случайной встречи | 300 |
servo_loop.py | Простой вариант: только рули и стабилизация, без запуска и парашюта | 200 |
Что происходит от нажатия до посадки
| Время | Событие | Чем подтверждается |
|---|---|---|
| −3 с | Взвод: тумблер включён | целостность цепи запала |
| 0,0 с | Запал подан | одна команда, без повторов |
| +0,5 с | Катапульта отпускает | строго по таймеру, датчики не участвуют |
| +0,3 с | Сход с направляющей | перегрузка выше 1,5 g |
| +0,5 с | Рули берут курс | курс от Raspberry по солнцу |
| апогей | Выпуск вытяжного купола | вертикальная скорость около нуля 0,2 с |
| 150 м | Выпуск основного купола | высота по барометру |
| посадка | Аппарат сел | высота ниже 3 м |
Камера просит, плата решает
Спасение от случайной встречи устроено так: камера на Raspberry присылает просьбу «в кадре крупный объект», а выпускает купол плата, и только если прошли все проверки. Это принципиально: камера видит крупный объект постоянно — землю при подъёме, облако, птицу, руку при запуске, — поэтому у неё совещательный голос, а не решающий.
| Проверка | Что отсекает |
|---|---|
| Система взведена, аппарат в полёте | ложные просьбы на столе |
| Прошло не меньше 3 секунд после старта | выпуск, когда ракета ещё рядом с расчётом |
| Высота выше 25 м | выпуск купола под ногами |
| Скорость ниже 35 м/с | разрыв купола |
| Просьба держится 0,2 с | мигание одного кадра, блик, облако |
Как считаются отклонения рулей
Рули не «крутят ручку на минус-плюс». Сила рулей растёт как скоростной напор: на малой скорости они почти ничего не могут, на большой — переворачивают аппарат за десятые доли секунды. Поэтому регулятор каждый раз считает, какое отклонение даст нужное угловое ускорение:
момент на радиан отклонения M = q · S · CN · L угловое ускорение на радиан a = M / I нужное ускорение a = w0² · ошибка − 2·z·w0 · скорость отклонение d = a / a_нужное
Здесь q — скоростной напор, S — площадь рулей,
CN — их эффективность, L — плечо,
I — момент инерции, w0 — желаемая частота контура.
Такой регулятор одинаково работает и на старте, и на разгоне, и на спуске.
Предохранители
- Физический разрыв цепи заряда с чекой, снимаемой перед пуском. Программная нейтраль его не заменяет.
- Рули в нейтраль при потере связи с Raspberry дольше секунды, при недостоверном курсе и при отказе датчика.
- Отсечка по ошибке курса — если оценка ориентации разошлась, управление выключается, и аппарат летит как обычная устойчивая ракета.
- Сторожевой таймер: зависла программа — плата перезагружается, рули обесточиваются.
- Резервный таймер парашюта: если барометр откажет, выпуск произойдёт по времени.
- Проверка правдоподобности апогея: залипший барометр не должен выглядеть как апогей и выпускать купол через полсекунды после старта.
Что проверено, а что нет
| Проверено на компьютере | Не проверено |
|---|---|
|
|