Архитектура прошивки

Firmware dataflow diagram

Главный цикл работает на частоте 1000 Гц. Передача данных между подсистемами происходит через глобальные переменные:

  • t (float) — текущее время шага, с.
  • dt (float) — дельта времени между текущим и предыдущим шагами, с.
  • gyro (Vector) — данные с гироскопа, рад/с.
  • acc (Vector) — данные с акселерометра, м/с2.
  • rates (Vector) — отфильтрованные угловые скорости, рад/с.
  • attitude (Quaternion) — оценка ориентации (положения) дрона.
  • controls (float[]) — пользовательские управляющие сигналы с пульта, нормализованные в диапазоне [-1, 1].
  • motors (float[]) — выходные сигналы на моторы, нормализованные в диапазоне [-1, 1] (возможно вращение в обратную сторону).

Исходные файлы

Исходные файлы прошивки находятся в директории flix. Ключевые файлы:

  • flix.ino — основной входной файл, скетч Arduino. Включает определение глобальных переменных и главный цикл.
  • imu.ino — чтение данных с датчика IMU (гироскоп и акселерометр), калибровка IMU.
  • rc.ino — чтение данных с RC-приемника, калибровка RC.
  • mavlink.ino — взаимодействие с QGroundControl через MAVLink.
  • estimate.ino — оценка ориентации дрона, комплементарный фильтр.
  • control.ino — управление ориентацией и угловыми скоростями дрона, трехмерный двухуровневый каскадный PID-регулятор.
  • motors.ino — управление выходными сигналами на моторы через ШИМ.

Вспомогательные файлы включают:

  • vector.h, quaternion.h — реализация библиотек векторов и кватернионов проекта.
  • pid.h — реализация общего ПИД-регулятора.
  • lpf.h — реализация общего фильтра нижних частот.