Что надо знать для программирования квадрокоптеров

Основной процессор

8051 vs AVR vs PIC vs ARM: Семейство микроконтроллеров составляющее основу большинства современных контроллеров полёта. Arduino основан на AVR (ATmel), и сообщество, похоже, сосредоточено на MultiWii, как на предпочтительном коде. Microchip является основным производителем чипов PIC. Трудно утверждать, что одно лучше другого, всё сводится к тому, что может делать программное обеспечение. ARM (например, STM32) использует 16/32-битную архитектуру, при этом десятки используют 8/16-битные AVR и PIC. Поскольку одноплатные компьютеры становятся все менее и менее дорогостоящими, ожидается появление полётных контроллеров нового поколения, которые могут работать с полноценными операционными системами, такими как Linux, или Android.

ЦП: Обычно их разрядность кратна 8 (8-бит, 16-бит, 32-бит, 64-бит), что в свою очередь указывает на размер первичных регистров в ЦП. Микропроцессоры могут обрабатывать только установленное (максимальное) количество бит в памяти за один раз (такт). Чем больше бит может обработать микропроцессор, тем более точной (и более быстрой) будет обработка. Например, обработка 16-битной переменной на 8-битном процессоре происходит куда медленней, чем на 32-битном. Обратите внимание, что код также должен работать с правильным количеством бит, а на момент написания этой статьи лишь немногие программы используют код, оптимизированный для 32 бит.

Рабочая частота: Частота, на которой работает основной процессор. Также по умолчанию её называют «тактовой частотой». Частота измеряется в герцах (циклов в секунду). Чем выше рабочая частота, тем быстрее процессор может обрабатывать данные.

Смотрите про коптеры:  Радиоуправляемый катер для рыбалки своими руками - Все Сам - сайт о самодельщиках и самоделках

Программная память/Флэш: Флэш-память — это место, где хранится основной код. Если программа сложная, она может занимать много места. Очевидно, что чем больше память, тем больше информации она может хранить. Память также актуальна при хранении данных в полёте, таких как координаты GPS, планы полёта, автоматическое движение камеры и т.д. Код, загруженный на флэш-память, остается на чипе даже после отключения питания.

SRAM: SRAM расшифровывается как «Статическая память с произвольным доступом» и представляет собой пространство на чипе, которое задействуется при выполнении расчетов. Данные, хранящиеся в оперативной памяти, теряются при отключении питания. Чем выше объём оперативной памяти, тем больше информации будет «легко доступно» для расчетов в любой момент времени.

EEPROM: электрически стираемое программируемое постоянное запоминающее устройство (ЭСППЗУ) обычно используется для хранения информации, которая не изменяется во время полёта, например настройки, в отличие от данных, хранящихся на SRAM, к которым могут относиться показания датчика и т.д.

Дополнительные порты Ввода/Вывода: большинство микроконтроллеров имеют большое количество цифровых и аналоговых портов ввода и вывода, на контроллере полёта некоторые используются под датчики, другие для связи, либо для общего ввода и вывода. К этим дополнительным портам могут быть подключены RC сервоприводы, системы подвеса, зуммеры и многое другое.

Аналого-цифровой преобразователь (A/D converter/АЦП): Если датчики используют бортовое аналоговое напряжение (обычно 0-3.3В или 0-5В), аналого-цифровой преобразователь должен преобразовать эти показания в цифровые данные. Как и в случае с процессором, количество бит, которое может быть обработано АЦП, предопределяет максимальную точность. С этим связана тактовая частота, с которой микропроцессор может считывать данные (количество раз в секунду), чтобы убедиться, что информация не потеряна. Тем не менее, трудно не потерять часть данных во время такого преобразования, поэтому чем выше разрядность АЦП, тем более точными будут показания, но при этом важно, чтобы процессор смог справиться с той скоростью, с которой отправляются данные.

Что надо знать для программирования квадрокоптеров

Пришла пора поговорить о квадрокоптерах и программировании. Одновременно затронем тему, а нужны ли тут знания математики. Нас будет также интересовать что надо знать, чтобы научиться программировать эти летающие аппараты. Кто-то воспринимает

квадрокоптеры как крутые игрушки не только для детей, но и для взрослых, а нам эти устройства интересны с позиций математики и программирования. Число моделей растет, а стоимость снижается и, очевидно, в будущем квадрокоптер не будет восприниматься этакой диковинкой, а в учебных программах для айтишников появится обязательный учебный предмет – “программирование квадрокоптеров”. Число владельцев летальных аппаратов тоже растет – проводятся слеты и конференции. Все это порождает спрос на программное обеспечение для управления полетами и выполнения конкретных полетных задач. Риск потери такого аппарата велик (деревья, препятствия, птицы, вылет за пределы зоны управления и прочее), а значит, требуется программирование автоматической обработки таких нештатных ситуаций. Например, в случае переключения в режим автоматического возврата к владельцу в экстремальной ситуации. Ведь никому не хочется просто так потерять несколько сотен долларов.

Сразу разочаруем программистов – для того, чтобы программировать такие устройства одной математикой уже не обойтись. Как минимум, потребуются знания еще двух дисциплин – теоретической механики и динамики, а также теории автоматического управления. Конечно, если вы простой пользователь, то для того, чтобы запрограммировать автоматический полет по заданной программе, можно воспользоваться готовыми программами для записи таких программ. Но, мы же говорим сейчас о написании таких программ, а не про их использование. А для этого понадобятся фундаментальные знания.

Программистам “любителям” математики, сразу напомним про дифференциальные уравнения. Когда вы их решали в курсе высшей математики, то мучили своего преподавателя вопросом – зачем? А вот вам и ответ – описать поведение динамического объекта одним дифуравнением уже не получится. Как минимум летательный аппарат имеет шесть степеней свободы. Положение тела в пространстве описывают 6 координат: три – для определения положения центра масс и три – для определения угловой ориентации в пространстве (см.картинки ниже).

Что надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеров

Вспомним еще, что скорость – это производная. А если еще учитывать трение и ветер, то получится вполне приличная система дифференциальных уравнений. Кстати, чтобы ее только составить надо знать законы механики и динамику не на тривиальном уровне. И это еще не все. Дифуравнения потом надо решать, но вы подаете на вход системы начальные условия – управляете квадрокоптером. Значит решать надо быстро и точно. А пока вы решаете – аппарат летит, что означает: вычисленное управление приходит с опозданием. И тут вам понадобятся знания ТАУ- теории автоматического управления и, в частности, хорошее понимание того, как устроены ПИД-регуляторы. А из классической математики, кроме дифур, надо еще знать и численные методы (апроксимация, экстраполяция, численное интегрирование и дифференцирование). Но и это еще не все. Надо программировать управление стабилизацией положения – например, после столкновения. Да, чуть не упустили – надо понимать принципы аэродинамики (еще та математическая дисциплина).

Ну а чем-то порадовать сможете? – спросите вы. Порадовать можем – научиться этому смогут не всем (это вам не сайты делать), а значит, если вы выучите математику, то конкурентов у вас будет меньше, чем на рынке сайтов и платить вам будут больше.


 Похожие публикации

2023-09-08 • Просмотров [ 2748 ]


Как образовательный коптер помогает научиться программировать на python, и что не так с lua

Что надо знать для программирования квадрокоптеров

Почти 4 года прошло с выпуска первой статьи об учебном квадрокоптере Геоскан Пионер. За это время формат конструктора для сборки учебного квадрокоптера успел набрать популярность – он хорошо подходит как для организации учебного процесса со школьниками или студентами, так и для использования на различных хакатонах, соревнованиях, или при выполнении на его базе исследовательских проектов.

Ключевые элементы обучения на сегодняшний день – это развитие навыков программирования для решения задач автономного полета коптера, понимание основ алгоритмов управления и работа с различными функциональными модулями. Для юных пользователей порог входа был снижен за счёт возможности использования визуального блочного программирования в плагине для TRIK-Studio, а вот создание более сложных программ требовало знакомства с языком Lua.

В 2020 году линейка Пионеров дополнилась новыми моделями – появились младший  и старший «братья»  Мини и Макс. И если по размеру и массе братья стоят по ранжиру  – Мини самый маленький и легкий, а Макс самый большой и тяжелый, то по функционалу младший уже готов дать фору своему предшественнику (назовём его Классическим Пионером).

Во-первых, уже в базовой комплектации Пионер Мини имеет видеокамеру с возможностью передачи видео по Wi-Fi. Во-вторых, он оснащен датчиками, которые могут обеспечивать автономный полёт в помещениях с использованием сразу нескольких систем навигации – УЗ и ИК (подробнее про них расскажу в отдельном материале). Если вкратце – это внешние системы позиционирования в помещении, которые позволяют коптеру ориентироваться в локальной, зафиксированной системе координат, связанной с точкой взлета. В случае отсутствия системы навигации коптер не потеряется, т.к. имеет датчик оптического потока и TOF дальномер.

Что надо знать для программирования квадрокоптеров
Что надо знать для программирования квадрокоптеров
Что надо знать для программирования квадрокоптеров

Все эти функции доступны и Классическому Пионеру, но требуют использования отдельных модулей расширения. Концепция с дополнительными модулями позволяла адаптировать базовый набор под различные учебные или соревновательные кейсы. Например, модуль захвата груза в паре с модулем GPS позволяет реализовать простейший кейс поисковой операции. Однако для тех, кто только начинает свое знакомство с коптерами такое разнообразие может оказаться лишним и даже пугающим, поэтому для таких пользователей и был создан Мини: недорогой, ударопрочный коптер, который “из коробки” оснащён самым необходимым для автономных полетов в помещении. Ну и в-третьих, благодаря наличию Wi-Fi удалось добавить для Мини  возможность программировать на Python.

Какая связь? Сейчас поясню.

Пионер Мини рассчитан на полёт в помещении, и применение на нём Wi-fi в качестве канала связи было не только оправдано, но и открыло новые возможности по сравнению с Классическим Пионером, где обеспечивалась только узкополосная, но дальнобойная связь в канале 868МГц. Простота подключения (без использования доп. модулей), высокая скорость передачи данных и поддержка протокола MAVLink в совокупности позволяют осуществлять программирование квадрокоптера удаленно, используя, к примеру, ноутбук, на котором запущена программа. В данном случае коптер как бы визуализирует код, написанный пользователем на компьютере. При этом все, что происходит с коптером можно отслеживать на экране ноутбука в реальном времени, в том числе по изображению с видеокамеры.

В случае с Классическим Пионером пользователям было доступно только программирование на Lua с использованием базовых реализованных функций и готовых модулей, фактически без обратной связи или возможности отладки. Это позволяло освоить стандартную методику преподавания, но как только ученик хотел сделать что-то свое, начинались проблемы, о которых далее.

Почему Lua не лучший вариант для обучения программированию:

Несмотря на большие возможности Классического Пионера за счет разнообразных модулей расширения, часто “узким горлышком” учебного задания или проекта становился именно подход к реализации скрипта на квадрокоптере.

Постараюсь объяснить это на примере.

Есть типичная для школьных олимпиад по робототехнике задача – получить картинку с камеры и на основании какой-то информации с нее полететь в нужную сторону. Если вы работаете с техническим зрением, то в голове сразу выстраивается картина: берем OpenCV, обрабатываем видеопоток, выдаем команду. Но с Пионером не все так просто…

Контроллер автопилота решает только задачи управления и связи, при этом пользовательские скрипты на Lua запускаются внутри интерпретатора, который сам является частью прошивки. Поэтому вычислительные мощности автопилота как и набор доступных интерфейсов оказывается ограниченным и логичным решение является использование внешнего вычислителя. Например, мы можем подключить к автопилоту модуль с камерой OpenMV H7, которая имеет достаточно мощный контроллер для обработки изображений и способна выдавать результаты обработки в виде команд в декартовых координатах. Дальше нас ждут сюрпризы. Среда программирования Pioneer Station, поддерживает только работу с автопилотом, позволяя написать код на Lua  и загружать его в коптер. Для работы с камерой нужно отдельно установить среду OpenMV IDE, и оказывается, что камера программируется уже на MicroPython… К слову, IDE для камеры довольно хорошая и поддерживает отладку, правда отследить работу программы можно только по светодиодам – отладчик для работы Lua скриптов внутри автопилота не предусмотрен. Камера с автопилотом может быть соединена по интерфейсу UART, а для её подключения к автопилоту, для крепления на раме коптера используется плата адаптер.

В этом случае ученик бОльшую часть времени тратит, чтобы разобраться с общим несовершенством платформы, на которой должен обучаться, и меньший упор делает на непосредственное развитие навыков программирования. Ну и при практическом использовании не очень удобно постоянно приносить коптер к компьютеру для перепрошивки. При решении задач эти хождения туда-сюда очень утомляют.

Здесь и пришла идея об удаленном программировании, когда основной код выполняется на ноутбуке, а коптер лишь является источником данных и исполнителем команд. При реализации нового режима долгих споров о выборе языка программирования не было. Конечно, Python.

Python в последние годы де-факто стал образовательным стандартом, когда речь заходит об обучении программированию. Во многом благодаря низкому порогу вхождения и таким свойствам языка, как динамическая типизация, упрощенное ООП и удобство использования библиотек. В интернете сейчас есть много образовательных курсов, направленных именно на первое знакомство с программированием через Python. В контексте применимости к робототехническим кейсам язык себя хорошо зарекомендовал, в первую очередь из-за своих скриптовых корней, однако если в лоб начать сравнивать его с Lua, то станет понятно, что у Python есть свои ограничения в быстродействии. Но опять же, когда мы говорим об образовании, на первые роли выходит удобство и понятность, а быстродействие обычно описывается фразой „лишь бы работало…“

Что надо знать для программирования квадрокоптеров

Lua является очень быстрым и легким скриптовым языком во многом потому, что из коробки в нем практически ничего нет. И тут Python с пакетным менеджером просто не оставляет ему шансов. Вернусь к вышеописанной задаче по обработке изображения. Вполне логичной кажется ситуация, когда скрипт должен работать в асинхронном режиме. Я имею ввиду, что обработка изображения не должна „вешать” часть кода, связанную с отправкой команд управления дрону. На Python уже „из коробки” стоят пакеты threading и multiprocessing, к которым в придачу идет отличная документация и примеры, когда как на Lua скорее всего я найду чей-нибудь проект на github-е, и если в нем окажется хороший readme, это уже будет огромной удачей. Также важным фактором является и то что, Python используется как нативный язык для ROS, что позволяет сильно облегчить процесс понимания разработки своих роботов.

Другим преимуществом Python в образовательной робототехнике является организация „экосистемы“ обучения. Касательно квадрокоптеров многие задачи строятся вокруг создания алгоритмов полета на основе обработки информации с сенсоров, поэтому очень удобно проводить расчеты и визуализировать процессы в одной среде.

Так, библиотека numpy может стать полноценной альтернативой вычислениям в более мощных пакетах, таких как Matlab, а полученные результаты можно очень легко встроить в программы полета. Опять же, говоря о техническом зрении, многие процессы получения геометрических характеристик сводятся к последовательным переходам от одной системы координат к другой, и тут возможности матричных вычислений numpy очень сильно помогают. Библиотека matplotlib со своей стороны может отлично помочь в визуализации данных, получаемых с дрона в реальном времени. Но в ситуации, когда для реализации Lua скриптов их заливают в микроконтроллер, возможности подключить к нему пользовательскую библиотеку нет вообще.

Чем сейчас удобна работа с библиотекой:

Библиотека для программирования Пионер Мини на Python выложена как open-source проект на github, а так же может быть установлена используя pip с хранилища PyPi. Это, по сравнению с применением Lua скриптов, позволило реализовать полноценную версионность и дало нам уверенность в том, что пользователь сам может узнать об актуальной версии библиотеки.

Реализация библиотеки представляет собой класс квадрокоптера, в котором присутствуют методы по получению изображения с камеры квадрокоптера, полета, управлению светодиодами и получению “сырых” данных с датчиков. Освоив работу с ними с помощью преподавателя, ничего не мешает ученику внедрить свои идеи в скрипт квадрокоптера: будь то распознавание объектов или ARUCO маркеров, использование нейросетей, построение различных регуляторов и т.д. В дополнение к этому был реализован метод запуска предварительно залитого на коптер Lua скрипта по воздуху (в дальнейшем хочется также реализовать загрузку скрипта, чтобы уже написанные образовательные методики могли использоваться удобнее).

Также, опираясь на опыт разработки полетных заданий на Lua, часто случались ситуации когда ученик совершал „фатальную“  ошибку в коде, которая могла привести к полному крашу коптера. Используя Python, удобно применять механизм прерываний по нажатию клавиш на клавиатуре, который позволяет спасти квадрокоптер в таких ситуациях либо же корректно завершить скрипт. Что не менее важно, так это на примере объяснять ученикам важность механизмов защиты и предусматривать их с самого начала работы.

В процессе полета библиотека по умолчанию логирует происходящие события в терминал, что очевидно на порядок ускоряет процесс отладки пользовательских программ. При работе с камерой библиотека позволяет выводить видеопоток на экран, а используя стандартные средства OpenCV по его обработке, довольно просто визуализировать происходящий анализ картинки.

Что надо знать для программирования квадрокоптеров

Как самый свежий пример расскажу вкратце об опыте работы с Python на Пионере Мини в ФМЛ № 239 г. Санкт-Петербурга. Школьники Центра робототехники в январе этого года работали с установкой всего необходимого ПО (PyCharm Community и Pioneer Station 1.11.0.), перепрошивали ESP-32 до версии 0.2.7., учились подключать компьютер к дрону. В итоге за одно занятие они смогли разобраться и запустить скрипт калибровки камеры на Python.

Сейчас у них есть возможность опробовать другие примеры скриптов и создать свои уникальные кейсы, например, реализовывать полёт Пионер Мини по линии (с помощью библиотек OpenCV и pioneer_sdk).

Все ученики говорят, что для них плюсы в работе с Пионером Мини – это широта возможностей коптера, способность полноценной реализации функций компьютерного зрения с помощью библиотеки OpenCV и компактность дрона. У всех есть большой интерес и к появлению дополнительных модулей (для изучения Python и видеозрения).

Что надо знать для программирования квадрокоптеров
Что надо знать для программирования квадрокоптеров
Что надо знать для программирования квадрокоптеров

Бортовая электроника

Основной компонент, который мы разрабатывали самостоятельно, — плата стабилизации. Изначально она была основана на платформе Arduino Uno, потом заменили на более мощную Due, что позволило увеличить частоту ПИД-регуляторов с 40Гц до 66.(6)Гц.

Пропеллеры коптера приводятся в движение компактными бесколлекторными двигателями в связке со стандартными контроллерами оборотов — ESC. Мы используем ESC с изменённой прошивкой.

Для питания всей системы используется литий-полимерный аккумулятор (3S). Из соображений безопасности мы решили сделать систему мониторинга напряжения на аккумуляторе. В штатном режиме использования аккумуляторов система ведёт себя достаточно стабильно. Однако на начальных этапах работы мы наблюдали эффекты, вызванные неоптимальным использованием батарей:

  • Вздувшиеся аккумуляторы. Причина в перезаряде и длительном хранении разряженных аккумуляторов. Производители рекомендуют не разряжать силовые аккумуляторы ниже значения 3,3В на каждую банку батареи, что в нашем случае даёт минимальное допустимое напряжение в 9,9В.
  • Выключение моторов при низком напряжении. Это особенность реакции большинства прошивок ESC на низкое напряжение, которая может привести к серьёзной аварии — в первый момент выключается только один мотор, остальные продолжают работать.

Для наших целей ESC было решено перепрограммировать. Благодаря использованию прошивки tgy (от SimonK) мы добились уменьшения задержки системы на пути от центрального контроллера до двигателей. В результате компоненты ПИД и угловая скорость стали более синусоидальными, а поведение всей системы приблизилось к поведению математической модели.

Для измерения динамических параметров используются следующие датчики:

  • 6-осевой акселерометр-гироскоп InvenSense MPU-6050
  • 3-осевой компас Honeywell HMC5883L

Грабли


В случае с корректировкой мощностей моторов необходимо не допускать слишком низких и слишком высоких мощностей, при которых стабилизация работает неверно.

С одной стороны, существует минимальная мощность, которую уменьшить нельзя, или моторы просто остановятся. С другой, уменьшение мощности может быть необходимо для правильной работы алгоритма. Если мощность (throttle) уменьшить слишком сильно, ПИД может «зашкаливать» в нижнюю сторону. Чтобы решить эту проблему, мы ограничиваем доступные пилоту мощности.

Что надо знать для программирования квадрокоптеров
Другая опасность — влияние побочных вибраций от моторов на Что надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеров

Дополнительные соображения

Функциональность: Производители полётных контроллеров, обычно, стараются предоставить как можно больше функций — либо включены по умолчанию, либо приобретаются отдельно в качестве опций/дополнений. Ниже приведены лишь некоторые из множества дополнительных функций, на которые вы, возможно, захотите взглянуть при сравнении контроллеров полёта.

Демпфирование: даже небольшие вибрации в раме, обычно вызываемые несбалансированными несущими винтами и/или моторами, могут быть выявлены встроенным акселерометром, который, в свою очередь, отправит соответствующие сигналы на главный процессор, который предпримет корректирующие действия. Эти незначительные исправления не нужны или не желательны для стабильного полёта, и лучше всего, чтобы контроллер полёта вибрировал как можно меньше. По этой причине между контроллером полёта и рамой часто используются виброгасители/демпферы.

Корпус: защитный корпус вокруг контроллера полёта может помочь в различных ситуациях. Помимо того, что корпус выглядит более эстетично, чем голая печатная плата, корпус часто обеспечивает некоторый уровень защиты элект. элементов, а также дополнительную защиту в случае краша.

Монтаж: Существуют различные способы установки контроллера полёта на раму, и не все контроллеры полёта имеют одинаковые варианты монтажа:

  1. Четыре отверстия на расстоянии 30.5мм или 45мм друг от друга в квадрате.
  2. Плоская нижняя часть для использования с наклейкой.
  3. Четыре отверстия в прямоугольнике (стандарт не установлен).

Сообщество: поскольку вы создаете кастомный дрон, участие в онлайн-сообществе может значительно помочь, особенно, если вы столкнулись с проблемами или хотите получить совет. Получение рекомендаций от сообщества или просмотр отзывов пользователей, касательно качества и простоты использования различных контроллеров полёта, может также быть полезным.

Аксессуары: Для полноценного использования продукта, помимо самого контроллера полёта, могут потребоваться сопутствующие элементы (аксессуары или опции). Такие аксессуары могут включать, но не ограничиваются ими: модуль GPS и/или GPS антенна; кабели; монтажные принадлежности; экран (LCD/OLED);

Как программировать квадракоптер?

Выучить:

-линал (линейная алгебра, скучный предмет, быдлостуденты ноют “зачем нам матрицы” и путают столбцы и строки)

-ангем (аналитическая геометрия – это приложение линейной алгебры к решению геометрических задач и мозговынос для “гуманитариев” (читай – лентяев, страдающих (страдающих ли?) СДВ))

-ГА (гармонический анализ – преобразования Фурье и прочие страшности, которые почему-то помогают писать устойчивые алгоритмы управления. У быдлстудентов вызывают зевоту, так как на 146% состоят из угрюмых интегралов и правила “удави и в воду”)

-ЧМ (численное моделирование – решение задач математики численными методами. Быдлокодеры сливаются, потому как тут фигакпродакшен не пройдет – результат не сойдется. Думать башкой придется).

-теормех (теоретическая механика. Применение всего вышеописанного к задачам механики. Ой-ой, придется выучить, что такое Гамильтониан, задротство какое-то, лучше в дотку поиграйте.)

-аэродин (аэродинамика. Ну, такой спор о том, взлетит или не взлетит)

-ВА (вариационный анализ. Ну, решить вон тот гамильтониан из термеха за разумное время численными методами, да еще так, чтобы летало, а не валилось)

Это примерно так три курса профильного вуза.

Язык реализации не так важен, как алгоритмы управления. Однако, изучение вышеперечисленного обычно выкидывает из головы дурацкие идеи писать софт для контроллеров на LUA и вносит корректные идеи о применении С.

“Просто так”, не прилагая усилий и не имея знаний, вы сможете только дорвеи и дейтинги лепить.

Матчасть

Определим невязку — разницу между требуемым и реальным значением некоторой величины:

Что надо знать для программирования квадрокоптеров

 — требуемое значение величины (угол с джойстика),

Что надо знать для программирования квадрокоптеров

 — текущее значение величины (угол с датчика).

Зададим момент сил для угла Что надо знать для программирования квадрокоптеров

где

Что надо знать для программирования квадрокоптеров

 — пропорциональная,

Что надо знать для программирования квадрокоптеров

 — интегральная,

Что надо знать для программирования квадрокоптеров

 — дифференциальная составляющие.


Знак минус говорит о том, что при положительных

Что надо знать для программирования квадрокоптеров

воздействие направлено против отклонения.

В чём смысл этой формулы? Напишем уравнение динамики, положив Что надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеров

 — момент инерции.

Для простоты уберём интегральную составляющую (Что надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеров

где

Т. е. чем больше пропорциональная составляющая, тем более «резкой» будет реакция на воздействие (больше амплитуда). Чем больше дифференциальная составляющая, тем быстрее будет происходить затухание (больше декремент).

Из модели затухающих колебаний получаем выражение для коэффициента затухания:

Из возможных решений уравнения нам подходит режим, близкий к критическому (граница апериодичности,

Что надо знать для программирования квадрокоптеров

) — нет отрицательного «перелёта» графика, переходный процесс короткий. Как видно, критический режим задается всего одним соотношением на коэффициенты ПИД-регулятора.

Интегральная составляющая устраняет статическую ошибку. Пусть невязка Что надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеров

Более подробный анализ уравнения ПИД-регулятора можно найти в других статьях: раз, два.

Необходимые детали и узлы

Прежде чем приступить к сборке квадрокоптера своими руками, необходимо обзавестись всеми необходимыми деталями. Мозгом нашей самоделки станет полетный контроллер Arduino Uno. Его возможностей более чем достаточно для того, чтобы управлять беспилотником.

Помимо микроконтроллера, нам понадобятся:

  • Аккумулятор (лучше несколько) на 3.7В
  • Плата MPU-6050 (на ней установлены гироскоп и акселерометр)
  • Транзистор ULN2003A
  • Коллекторные двигатели с полым ротором 0820
  • Провода

Необходимо сделать несколько замечаний. Так как мы собираем дешевый самодельный дрон, то наш выбор пал на коллекторные движки с полым ротором (так называемые coreless motors). Они далеко не так надежны, как бесколлекторные двигатели, но зато гораздо дешевле стоят. Кроме того, можно обойтись без дополнительных контроллеров скорости.

Зато невозможно обойтись без гироскопа и акселерометра. Гироскоп необходим для того, чтобы квадрокоптер мог удерживать заданное направление движения, тогда как акселерометр используется для измерения ускорения. Без этих устройств управлять коптером было бы гораздо сложнее (если вообще возможно), так как именно они предоставляют данные для сигнала, регулирующего скорость вращения винтов.

Мы не указали в списке необходимых деталей раму. Ее можно приобрести, а можно распечатать на 3D принтере каркас, лучи и крепления для двигателей. Второй вариант нам кажется более предпочтительным, тем более, что в интернете можно без труда найти проекты квадрокоптера.

Распечатанная на принтере рама окажется не только легкой, но и прочной. Но если доступа к 3D принтеру нет, раму можно заказать.

Первая авария

Слишком большая дифференциальная составляющая на практике приводит к автоколебаниям, чего не должно быть в теории. Почему? Уберём все составляющие, кроме дифференциальной, и решим уравнение:

Что надо знать для программирования квадрокоптеровЧто надо знать для программирования квадрокоптеров

т. е. величина

Что надо знать для программирования квадрокоптеров

превращается в линейную комбинацию

Что надо знать для программирования квадрокоптеров

и её производной. То же самое происходит с моментом сил, который также является гармонической функцией в этом примере. При определенных

Что надо знать для программирования квадрокоптеров

коэффициенты линейной комбинации могут быть такими, что возникнут незатухающие автоколебания.

Что надо знать для программирования квадрокоптеров
Также результат работы составляющих ПИД приходится ограничивать по модулю. Иначе значение Что надо знать для программирования квадрокоптеров

Компромиссом является установка не слишком маленьких коэффициентов в совокупности с введением ограничения сверху на все три составляющие: пропорциональную, интегральную и дифференциальную.

Стоит сказать, что реальная коррекция в почти горизонтальном положении — около 1–2 попугаев процентов мощности моторов (полётная мощность около 60%).

Что надо знать для программирования квадрокоптеров
Рассмотрим решение уравнения второго порядка (1), которое в одном из случаев является затухающей синусоидой.

На практике действительно получается что-то похожее (пример справа). Для демонстрации коэффициенты специально ухудшены для увеличения времени затухания. Оригинальную прошивку ESC пришлось заменить, т. к. она вносила существенную задержку, из-за которой математическая модель плохо описывала реальную систему.

Что надо знать для программирования квадрокоптеров
Поскольку Что надо знать для программирования квадрокоптеров

Подключение к контроллеру

Для того, чтобы управлять коптером, нам необходимо получить контроль над моторами, подключив их к Arduino. Контроллер дает на выходе лишь небольшое напряжение и силу тока, поэтому подключение двигателей напрямую лишено смысла. Вместо этого можно поставить несколько транзисторов, позволяющих увеличить напряжение.

Для составления схемы нам необходимы:

  • Arduino
  • Двигатели
  • Транзисторы

Все это собирается на монтажной плате и соединяется коннекторами.

На первом этапе следует подсоединить 4 ШИМ выхода (обозначены ~) к транзистору. Затем подсоедините коннекторы к движкам, подключенным к питанию. В нашем случае мы используем аккумулятор на 5В, но подойдет и аккумулятор на 3-5В.

Транзисторы должны быть заземлены, а земля на плате Arduino должна быть подключена к земле аккумулятора. Двигатели должны вращаться в правильном направлении, то есть работать на подъем коптера, а не на его крен.

Переключив контакт двигателя с напряжения 5В на транзистор, вы увидите, что ротор изменит направление вращения. Единожды совершив настройку, больше возвращаться к изменению направления вращения ротора не придется. Теперь нас интересует скорость.

Запустив и проверив акселерометр, мы устанавливаем нашу схему на ProtoBoard. За ее неимением, можно использовать и обычную монтажную плату, предварительно напаяв на ней рельсы для контроллера.

Перед тем, как припаивать акселерометр к плате, необходимо выполнить его калибровку на горизонтальной поверхности. Это поможет добиться более точной работы сенсора в будущем.

Пример

Итак, учитывая все эти различные сравнительные характеристики, какую информацию вы можете получить о контроллере полёта и что может включать контроллер полета? В качестве примера мы выбрали Quadrino Nano Flight Controller.

Главный процессор

Используемый на борту ATMel ATMega2560 является одним из наиболее мощных Arduino-совместимых чипов ATMel. Хотя он имеет в общей сложности 100 выводов, включая 16 аналогово-цифровых каналов и пять портов SPI, из-за его небольшого размера и предполагаемого использования в качестве контроллера полёта, на плате присутствуют только некоторые из них.

  • AVR vs PIC: AVR
  • Процессор: 8-бит
  • Рабочая частота: 16МГц
  • Программная память/Flash: 256Кбайт
  • SRAM: 8Кбайт
  • EEPROM: 4Кбайт
  • Дополнительные контакты ввода/вывода: 3 × I2C; 1 × UART; 2 × 10-контактных GPIO; Серво с 5 × выходами; OLED порт
  • Аналого-цифровой преобразователь: 10-бит

Что надо знать для программирования квадрокоптеров

Сенсоры

Quadrino Nano включает микросхему MPU9150 IMU, которая включает в себя 3-осевой гироскоп, 3-осевой акселерометр и 3-осевой магнитометр. Это помогает сделать плату достаточно маленькой, не жертвуя качеством датчика. Барометр MS5611 предоставляет данные о давлении и покрыт кусочком пены. Интегрированный Venus 838FLPx GPS с внешней GPS антенной (в комплекте).

Что надо знать для программирования квадрокоптеров

Программное обеспечение

Quadrino Nano был создан специально для использования новейшего программного обеспечения MultiWii (на базе Arduino). Вместо того, чтобы изменять код Arduino напрямую, было создано отдельное, более графическое программное обеспечение.

Что надо знать для программирования квадрокоптеров

Связь

  • Прямой ввод от стандартного RC приёмника.
  • Порт выделенного спутникового ресивера Spektrum
  • Последовательный (SBus и/или Bluetooth или 3DR радиосвязи)

Что надо знать для программирования квадрокоптеров

Дополнительные факторы

  1. Корпус: защитный полупрозрачный корпус входит в стандартную комплектацию
  2. Монтаж: Есть два основных способа крепления Quadrino Nano к дрону: винты и гайки или наклейка из вспененной резины.
  3. Компактная конструкция: сам контроллер (без учёта GPS антенны) имеет размеры 53 × 53мм.

Что надо знать для программирования квадрокоптеров

Режимы полёта

Ниже приведён список самых популярных режимов полёта, тем не менее не все из них могут быть доступны в полётных контроллерах. «Режим полёта» — это способ, посредством которого полётный контроллер использует сенсоры и входящие радиокоманды для обеспечения стабилизации и полёта БПЛА.

  • ACRO — обычно режим по умолчанию, из всех имеющихся сенсоров, контроллером полёта задействуется только гироскоп (беспилотник не может автоматически выравниваться). Актуален для спортивного (акробатического) полёта.

  • ANGLE — стабильный режим; из всех имеющихся сенсоров, контроллером полёта задействуются гироскоп и акселерометр. Углы ограничены. Будет удерживать беспилотник в горизонтальном положении (но без удержания позиции).

  • HORIZON — сочетает в себе стабильность режима «ANGLE», когда стики находятся вблизи центра и перемещаются медленно, и акробатику режима «ACRO», когда стики находятся в крайних положениях и перемещаются быстро. Контроллером полёта задействуется только гироскоп.

  • BARO (Altitude Hold) — стабильный режим; из всех имеющихся сенсоров, контроллером полёта задействуются гироскоп, акселерометр и барометр. Углы ограничены. Барометр используется для удержания определенной (фиксированной) высоты, когда с аппаратуры управления не подаются никакие команды.

  • MAG (Heading Hold) — режим блокировки курса (направления компаса), беспилотник будет сохранять Yaw ориентацию. Из всех имеющихся сенсоров, контроллером полёта задействуются гироскоп, акселерометр и компас.

  • HEADFREE (CareFree, Headless, Безголовый) — исключает отслеживание ориентации (Yaw) дрона и тем самым позволяет перемещаться в 2D направлении согласно перемещению стика управления ROLL/PITCH. Из всех имеющихся сенсоров, контроллером полёта задействуются гироскоп, акселерометр и компас.

  • GPS/Return to Home — автоматически использует компас и GPS, чтобы вернуться к месту взлёта. Из всех имеющихся сенсоров, контроллером полёта задействуются гироскоп, акселерометр, компас, и модуль GPS.

  • GPS/Waypoint — позволяет беспилотнику автономно следовать по предварительно установленным GPS точкам. Из всех имеющихся сенсоров, контроллером полёта задействуются гироскоп, акселерометр, компас, и модуль GPS.

  • GPS/Position Hold — удерживает текущую позицию с помощью GPS и барометра (если доступен). Из всех имеющихся сенсоров, контроллером полёта задействуются гироскоп, акселерометр, компас, и модуль GPS.

  • Failsafe (аварийный/отказоустойчивый режим) — если другие режимы полёта заданы не были, беспилотник переходит в режим Acro. Из всех имеющихся сенсоров, контроллером полёта задействуется только гироскоп. Актуален при сбоях в программном обеспечении беспилотника, позволяет восстановить контроль над БЛА посредством ранее предустановленных команд.

Связь

Радиоуправление (RC)

Управление посредством радиосвязи обычно включает в себя RC передатчик/RC transmitter (в беспилотном хобби — радиоаппаратура управления/пульт) и RC приёмник (RC receiver). Для взаимодействия с БПЛА пользователю потребуется как минимум четырёх (и более) канальный RC передатчик. По умолчанию первые четыре канала связаны с:

Что надо знать для программирования квадрокоптеров

Все остальные имеющиеся каналы могут быть задействованы для таких действий как:

  • Арминг (Arming или Arm)/Дизарминг (Disarming или Disarm) — постановка/снятие с охраны моторов.
  • Управление подвесом (панорамирование вверх/вниз, вращение по часовой стрелке/против часовой стрелки, зуммирование)
  • Смена режимов полёта (ACRO/ANGLE и т.д.)
  • Активировать/Задействовать полезную нагрузку (парашют, зуммер или другое устройство)
  • Любое другое применение

Что надо знать для программирования квадрокоптеров

Большинство пользователей (пилотов БПЛА) предпочитают именно ручное управление, это ещё раз доказывает, что пилотирование при помощи аппаратуры управления по прежнему является выбором номер один. Сам по себе RC приёмник просто передаёт поступающие от RC передатчика значения, а значит не может управлять беспилотником. RC приёмник должен быть подключен к контроллеру полёта, который в свою очередь должен быть запрограммирован для приёма RC сигналов. На рынке очень мало полётных контроллеров, которые принимают входящие радиокоманды от приёмника на прямую, а большинство ПК даже обеспечивают питание приёмника от одного из контактных выводов. Дополнительные соображения при выборе пульта дистанционного управления включают в себя:

  • Не все RC передатчики могут обеспечить полный диапазон RC сигналов от 500мс до 2500мс; некоторые искусственно ограничивают этот диапазон, так как большинство используемых RC предназначены для радиоуправляемых автомобилей, самолётов и вертолётов.
  • Дальность/Макс. воздушный радиус действия (измеряется в футах или метрах) RC-системы практически никогда не предоставляются производителями, поскольку на этот параметр влияют множество факторов, таких как помехи, температура, влажность, заряд батареи и другие.
  • Некоторые RC-системы имеют приёмник, который также имеет встроенный передатчик для передачи данных от датчика (например, GPS-координат), которые в последствии будут отображаться на ЖК-дисплее RC передатчика.

Bluetooth

Bluetooth и более поздние продукты BLE (Bluetooth Low Energy) изначально предназначались для передачи данных между устройствами без заморочек сопряжения или согласования частот. Некоторые имеющиеся на рынке контроллеры полёта могут отправлять и получать данные по беспроводной связи через соединение Bluetooth, что упрощает поиск неисправностей в полевых условиях.

Что надо знать для программирования квадрокоптеров

Wi-Fi

Управление по Wi-Fi обычно достигается посредством Wi-Fi роутера, компьютера (в том числе ноутбук, десктоп, планшет) или смартфон. Wi-Fi в состоянии справится как с передачей данных, так и с передачей видеопотока, но одновременно с этим эту технологию сложнее настроить/реализовать. Как и для всех Wi-Fi устройств, расстояние удаления ограничено Wi-Fi передатчиком.

Что надо знать для программирования квадрокоптеров

Радиочастота (RF или РЧ)

Радиочастотное (РЧ) управление в этом контексте относится к беспроводной передаче данных с компьютера или микроконтроллера на летательный аппарат с использованием РЧ передатчика/Приёмника (или двухполосного приёмопередатчика). Использование обычного радиочастотного блока, подключенного к компьютеру, позволяет осуществлять двухполосную связь на большие расстояния с высокой «плотностью» данных (обычно в последовательном формате).

Что надо знать для программирования квадрокоптеров

Смартфон

Хоть это и не тип связи, самого вопроса, как управлять дроном используя смартфон, достаточно, чтобы уделить ему отдельный раздел. Современные смартфоны это по сути мощные компьютеры, которые по случайному совпадению могут также совершать телефонные звонки. Почти все смартфоны имеют встроенный модуль Bluetooth, а также модуль WiFi, каждый из которых используется для управления дроном и/или получения данных и/или видео.

Что надо знать для программирования квадрокоптеров

Инфракрасное излучение (Infrared (IR))

Инфракрасная связь (то что можно найти в каждом телевизионном пульте дистанционного управления) редко используется для управления дронами, так как даже в обычных комнатах (не говоря уже об открытом пространстве) присутствует так много инфракрасных помех, что они не очень надёжны. Несмотря на то, что технологию можно использовать для управления БПЛА, не может быть предложена как основной вариант.

Что надо знать для программирования квадрокоптеров

Сенсоры

С точки зрения аппаратного обеспечения, контроллер полёта по сути является обычным программируемым микроконтроллером, только со специальными датчиками на борту. Как минимум, контроллер полёта будет включать в себя 3-осевой гироскоп, но без автовыравнивания. Не все контроллеры полёта оснащаются указанными ниже сенсорами, но они также могут включать их комбинацию:

  • Акселерометр: Как следует из названия, акселерометры измеряют линейное ускорение по трем осям (назовём их: X, Y и Z). Обычно измеряется в «G (на рус. Же)». Стандартное (нормальное) значение, составляет g = 9.80665 м/с². Для определения положения, выход акселерометра может быть интегрирован дважды, правда из-за потерь на выходе объект может быть подвержен дрейфу. Самой значимой характеристикой трёхосевых акселерометров является то, что они регистрируют гравитацию, и как таковые, могут знать, в каком направлении «спуск». Это играет главную роль в обеспечении стабильности многороторного БЛА. Акселерометр должен быть установлен на контроллере полёта так, чтобы линейные оси совпадали с основными осями беспилотника.

Что надо знать для программирования квадрокоптеров

  • Гироскоп: Гироскоп измеряет скорость изменения углов по трём угловым осям (назовём их: альфа, бета и гамма). Обычно измеряется в градусах в секунду. Обратите внимание, что гироскоп не измеряет абсолютные углы напрямую, но вы можете выполнить итерацию, чтобы получить угол, который, как и у акселерометра, способствует дрейфу. Выход реального гироскопа имеет тенденцию быть аналоговым или I2C, но в большинстве случаев вам не нужно беспокоиться об этом, так как все поступающие данные обрабатываются кодом контроллера полёта. Гироскоп должен быть установлен так, чтобы его оси вращения совпадали с осями БПЛА.

Что надо знать для программирования квадрокоптеров

  • Инерционный измерительный блок (IMU): IMU — по сути, это небольшая плата, которая содержит как акселерометр, так и гироскоп (обычно многоосевые). Большинство из них включают трёхосевой акселерометр и трёхосевой гироскоп, другие могут включать дополнительные сенсоры, например трёхосевой магнитометр, обеспечивающий в общей сложности 9 осей измерения.

Что надо знать для программирования квадрокоптеров

  • Компас/Магнитометр: Электронный магнитный компас способный определять магнитное поле Земли и использовать эти данные для определения направления компаса беспилотника (относительно северного магнитного полюса). Этот сенсор почти всегда присутствует, если система имеет GPS вход и доступно от одной до трех осей.

Что надо знать для программирования квадрокоптеров

  • Давление/Барометр: Так как атмосферное давление изменяется по мере удаления от уровня моря, можно использовать сенсор давления, чтобы получить довольно точные показания высоты БПЛА. Для расчёта максимально точной высоты, большинство контроллеров полёта получают данные одновременно от сенсора давления и спутниковой системы навигации (GPS). При сборке обратите внимание, что предпочтительнее, чтобы отверстие в корпусе барометра было накрыто куском поролона, это уменьшить отрицательное влияние ветра на чип.

Что надо знать для программирования квадрокоптеров

  • Расстояние: Датчики расстояния все чаще используются на беспилотниках, поскольку GPS-координаты и датчики давления не могут рассказать вам, насколько далеко вы находитесь от земли (холма, горы или здания), либо столкнётесь ли вы с объектом или нет. Датчик расстояния, обращенный вниз, может быть основан на ультразвуковой, лазерной или лидарной технологии (ИК-сенсоры могут испытывать проблемы в работе при солнечном свете). Датчики расстояния редко входят в стандартный комплект полётного контроллера.

Что надо знать для программирования квадрокоптеров

Скетч для arduino

Преимуществом выбранного для сборки дрона микроконтроллера является относительная простота работы с ним. Вам не придется читать специальные книги, документы и техническую документацию. Достаточно знать основы программирования Arduino, которые, как вы сейчас убедитесь, не так сложны.

Подсоединив плату MPU-6050 к контроллеру, включите его и перейдите по ссылке.

Нас интересует скетч I2C scanner code, вернее, его код.

Скопируйте программный код, вставьте в пустой скетч, после чего запустите его. Убедитесь, что подключение установлено к 9600 (для этого запустите Arduino IDE через Tools-Serial Monitor). Должно появиться устройство I2C с адресом 0×68 либо 0×69. Запишите или запомните адрес. Если же адрес не присвоился, скорее всего проблема в подключении к электронике Arduino.

Затем нам понадобится скетч, умеющий обрабатывать данные гироскопа и акселерометра. В интернете есть множество вариантов, и найти подходящий не проблема. Скорее всего, он будет в заархивированном виде. Разархивируйте скачанный архив, отройте Arduino IDE и добавьте библиотеку (sketch-import library-add library). Нам понадобятся папки MPU6050 и I2Cdev.

Открываем MPU6050_DMP6 и внимательно просматриваем код. Никаких сложных действий производить не придется, но если был присвоен адрес 0×60, то необходимо расскоментировать строку в верхней части (ее можно найти за #includes) и написать верный адрес. Изначально таv указан 0×68.

Загружаем программу, открываем окно монитора через 115200 и просто следуем инструкции. Через несколько мгновений вы получите данные с гироскопа/акселерометра. Затем следует провести калибровку датчиков.

Установите плату на ровную поверхность и запустите скетч MPU6050_calibration.ino (легко ищется в интернете). Просмотрите код, по умолчанию в нем указан адрес 0×68. После запуска программы у вас появится информация по отклонениям (offset). Запишите ее, она нам понадобится в скетче MPU6050_DMP6.

Все, вы получили функционирующие гироскоп и акселерометр.

Схема подключения к arduino

Прежде чем плата I2C сможет обмениваться данными с Arduino, ее необходимо подключить к контроллеру.

Что надо знать для программирования квадрокоптеровСхема следующая:

  • VDD -3.3v
  • GND — GND
  • INT- digital 2
  • SCL — A5
  • SDA — A4
  • VIO – GND

Еще раз обращаем внимание на то, что для питания необходимо использовать необходимо именно 3.3В. Подключение платы к 5В скорее всего приведет к ее поломке (спасти может только регулятор напряжения, но он далеко не всегда присутствует на плате).

Если на плате присутствует контакт AD0, он подключается к земле (GND).

В библиотеке, на которую мы дали ссылку выше, используются перечисленные каналы.

Телеметрия

https://www.youtube.com/watch?v=lg7PXaCgQUs

Дистанционное управление реализовано в двух режимах (для обеспечения более гибкого процесса разработки):

  1. С помощью модулей xBee Pro в конфигурации «коптер  ПК».
  2. С помощью выделенной радиочастоты (2.4ГГц) в конфигурации «пульт ДУ ↦ коптер».

Помимо управления через пульт ДУ происходит пересылка критических данных между коптером и ПК в режиме реального времени, для чего используются xBee Pro и приложение собственной разработки (см. скриншот). На компьютере можно видеть значение углов и угловой скорости, напряжение на аккумуляторе, мощность двигателей.

Данные, пересылаемые между коптером и ПК:

  • ПК ↦ Коптер: канал управления (ПК/пульт ДУ), мощность моторов, настройка для включения/выключения стабилизации, коэффициенты ПИД и ограничения;
  • Коптер ↦ ПК: углы, угловая скорость, компоненты Что надо знать для программирования квадрокоптеров, Что надо знать для программирования квадрокоптеров, Что надо знать для программирования квадрокоптеров, данные с джойстика (мощность 3 угла), мощности моторов, напряжение на аккумуляторе.

https://www.youtube.com/watch?v=4sjsRiIBbS4

Благодаря датчику от InvenSense, начальная обработка данных с датчиков происходит на встроенном процессоре (DMP). Мы разгружаем плату стабилизации, которая может использовать в качестве вычислителя даже маломощный AVR-микроконтроллер.

Оцените статью
Радиокоптер.ру
Добавить комментарий