Skip to content
etoestja edited this page Aug 12, 2012 · 14 revisions

Эта статья отображает текущее состояние кода. Очевидно, что некоторые вещи стоит переделать.

На данный момент для полета необходимы 3 устройства: arduino на квадрокоптере, компьютер с Bluetooth и arduino для джойстика. Джойстик подключается к компьютеру через USB, программа пересылает данные с джойстика на квадрокоптер через Bluetooth и запрашивает состояние.

Table of Contents

Код для квадрокоптера

Используется подход arduino (функции setup, loop), в дальнейшем планируется использование таймеров и прерываний от UART для лучшего распределения времени.

Работа с датчиками реализована через классы Accelerometer и Gyroscope. Класс TimerCount позволяет засечь время между итерациями loop()

Макросы DEBUG_* используются для включения/выключения режимов отладки:

  • DEBUG_NO_MOTORS отключает задержку в несколько секунд перед включением. Удобно для отладки кода (без моторов)
  • DEBUG_NO_GYROSCOPE отключает запрос данных с гироскопа (возвращаемое значение - (0, 0, 0))
  • DEBUG_NO_GYROSCOPE отключает запрос данных с акселлерометра (возвращаемое значение - (0, 0, 0))
  • DEBUG_SERIAL включает последовательный порт
  • DEBUG_SERIAL_HUMAN включает команды, которые удобно выполнять, используя Serial Monitor (wasd как джойстик, цифры для мощности)
Коммуникация с компьютером осуществляется через последовательный порт (Serial) на скорости 115200.

Глобальные переменные

  • throttle - вектор длины 1, который содержит данные о запрашиваемом (вручную) наклоне. Зависит от позиции джойстика.
  • angle содержит два угла поворота системы координат, связанной с квадрокоптером относительно g.
  • angle_period - значение RC для RC-фильтра, который используется для получения угла (angle).
  • MController, Accel, Gyro, TCount - указатели на объекты соответствующих классов.
  • serial_type - текущий режим работы с последовательным портом. В режиме SERIAL_DEFAULT последовательный порт готов принимать команды, в режим SERIAL_RESTORE производится переход после дополнительного приема данных (например, при получении нескольких байт значений одной величины).

Функция setup()

Создаются объекты классов датчиков, инициализируется последовательный порт,

Функция loop()

Вспомогательные классы