Автопилот для самолета своими руками

Моделирование автопилота на авиасимуляторе

Можно ли использовать продольно расположенный полупроводниковый гироскоп, который измеряет угловую скорость разворота самолета, для удержания крена? Проверим это на авиасимуляторе с внешним автопилотом. А также хотелось бы проверить алгоритмы управления самолетом. Такую возможность предоставляет авиасимулятор XPLANE.

Почему именно XPLANE? Он позволяет выводить данные с датчиков симулируемого самолета в другие программы или компьютеры различными средствами. Я для этого выбрал UDP протокол. На рис. 1 представлена структурная схема комплекса симуляции. Пример одного полета можно увидеть в видео. В ролике продемонстрирован ручной взлет, вывод самолета из штопора при падении, пролет по маршруту, развороты с потерей высоты и с набором высоты, посадка самолета, ручное управление курсом и высотой, а также содержатся инструкции по настройке X-Plane симулятора и программы автопилота.

PPJOY и VSPE

Для управления самолетом в симуляторах обычно используется джойстик. Для обучения управлению радиоуправляемыми самолетам также применяются соответствующие симуляторы. Для сопряжения стандартных пультов радиоуправления с симуляторами существует программа PPJOY, которая преобразует входной поток данных интерфейса RS232, созданному по определенным правилам, в сигналы управления виртуального джойстика. Программа также содержит и драйвер, который определяется в системе как джойстик. Описание программы PPJOY можно найти в свободном доступе в интернете. Здесь можно найти программу, которая может работать с Win7. К сожалению, драйвер (64b), входящий в программу не имеет цифровой подписи и поэтому приходиться запускать систему в тестовом режиме. Стандартный поток для PPJOY обычно формируется специальным модулем на каком-нибудь контроллере (например, PIC), который подключается к выходу «тренер» пульта ДУ, где применяется протокол PPM. В данном проекте поток в соответствие со стандартом RS232 формирует непосредственно программа автопилота. Разработка начиналась с замыкания петли ОС через внешние физические COM — порты компьютера. При этом есть возможность использовать разные компьютеры для симулятора и автопилота, что актуально для очень слабых компьютеров. Сейчас, в связи с массовым отсутствием на компьютерах COM-портов и достаточно большой мощностью компьютеров, когда даже самые слабые компьютеры способны работать в такой системе, используется программа VSPE (Virtual Serial Port Emulator). Программа позволяет внутри компьютера создавать пары портов, и не использовать внешние порты. Для нормальной работы программы вероятно сначала придется создать с помощью средств Windows соответствующие COM-порты, а потом уже можно их использовать в программах VSPE и PPJOY. Аппаратные преобразователи для пультов радиоуправления появились с разными правилами преобразования, поэтому необходимо в программе PPJOY выбрать режим с частотой потока 19200 б/с. именно такой вариант реализован в программе автопилота.

Для получения данных с датчиков самолета X-Plane симулятор настраивается в режим выдачи данных по сетевому UDP протоколу. Для этого необходимо, как показано в фильме, настроить симулятор выдавать данные с «датчиков» самолета через сеть на выбранный IP-адрес и указанный порт. В данном случае используется локальный IP адрес 127.0.0.1 и порт 49001 и выдача данных с темпом 20 раз в секунду. Кроме этой настройки необходимо правильно выбрать датчики, с которых необходимо передавать данные в автопилот. Необходимо в симуляторе установить вывод поля 02 (скорость, вертикальная скорость), 16 (угловые скорости), 17 (тангаж, крен, курсы) и 18 (широта, долгота, высота). Также можно настроить вывод этих параметров на экран.

Автопилот

Программа автопилота написана в среде Borland C++ Builder 6. Поле «Приборы» (Рис.11) показывает исходные данные с датчиков, которые обновляются 20 раз в секунду. Здесь мы видим Pitch (Тангаж, градусы), который вычисляется по акселерометру в радиоуправляемом самолете, Roll (Крен, градусы), который вычисляется по продольно установленному гироскопу, измеряющему скорость разворота самолета. Нужно тут заметить, что тангаж в симуляторе я тут беру настоящий, а не с акселерометра, хотя в настоящем самолетике тангаж я вычисляю по акселерометру, а это означает, что резкое ускорение при разгоне самолет будет “чувствовать” как добавку к положительному тангажу. Это хорошо видно в видеофрагментах испытаний: при разгоне самолет сразу же приподнимает хвост. Это отличие от реальности. А вот крен действительно вычисляется по угловой скорости разворота самолета. Вычисленное значение крена и демонстрируется в виде условного авиагоризонта в правом нижнем углу программы. (Рис.2) Значение тангажа показывает слайдер в центре авиагоризонта. Следующее окошечко – это воздушная скорость, значение которой обычно получают с трубки Пито, следующее окно – это курс, которые мы получаем от магнитного компаса, следующее поле – это высота. Ниже панель GPS.

Checkbox GPS включает полет по маршруту, записанному в таблице. При этом поля Requested Heading, Requested Altitude и Requested Speed заполняются автоматически из структуры
typedef struct WPNT < int pid; int speed; int altitude; int heading; int latitude; int longitude; >WPNT;

В демонстрации структура содержит пример маршрута около аэропорта Los Angeles. (Рис.3)
Для изменения маршрута необходимо изменить структуру и перекомпилировать проект. Если GPS выключен, то эти поля можно заполнить вручную. Активация значения в поле происходит при двойном клике мышки. Checkbox Return позволяет вернуться к точке, запомненной при нажатии кнопки Store Point.

WayPoint — номер точки маршрута; Distance — дистанция до следующей маршрутной точки; Calculated Time — приблизительное время достижения следующей точки (приблизительно потому что не учитывается скорость ветра), и далее — координаты GPS широта-долгота. Справа вверху панель UDP сервера. Ниже нее панель управления портом RS232. Здесь следует менять только номер порта. Остальные параметры жестко определены взаимодействием с виртуальным джойстиком.

Параметры панели Autopilot:

Легенда: RW — change allowed, RO — only for look, RWP- change allowed partially
Kst_roll (RW) — статический коэффициент усиления петли ОС (обратной связи) по крену
Kast_roll (RW) -астатический коэффициент усиления петли ОС по крену
Kfar_roll (RW) — коэффициент триммирования по крену
Kst_hdg (RW) — статический коэффициент усиления по удержанию курса
Kаst_hdg (RW) — астатический коэффициент усиления по удержанию курса
Time (RO) — время в полете, секунды.
Requested Heading(RWP) — запрошенный курс, градусы (Вручную или из таблицы если GPS вкл)
Head_Err (RO) — Ошибка по курсу, градусы
RollTrim (RO) — поправка триммирования по крену
HVariation (RO) — скорость изменения курса гардус/сек.
Keep_Roll (RO) — удерживаемый крен, градусы
Ailerons (RO) — положение элеронов самолета
Requested Altitude (RWP) — запрошенная высота, футы (Вручную или из таблицы если GPS вкл)
Alt_Err (RO) — Ошибка по высоте, футы
PitchTrim (RO) — поправка триммирования по тангажу
AVariation (RO) — скорость изменения высоты футов/сек.
Keep_Pitch (RO) — удерживаемый тангаж (градусы)
Elevator (RO) — положение руля высоты самолета
Kstpitch (RW) — статический коэффициент усиления петли ОС по тангажу
Kast
pitch (RW) -астатический коэффициент усиления петли ОС по тангажу
Kfar_ pitch (RW) — коэффициент триммирования по тангажу
Kst_alt (RW) — статический коэффициент усиления по удержанию высоты
Kаst_alt (RW) — астатический коэффициент усиления по удержанию высоты
Rudder (RO) — положение руля направления самолета
Requested Speed (RWP) — запрошенная скорость, миль/час(knots) (Вручную или из таблицы (GPS вкл))
Speed_Err (RO) — ошибка по скорости(knots)
SVariation (RO) — скорость изменения скорости(knots)
Keep_Throttle (RO) — удерживаемая скорость(knots)
Throttle(RO) — положение РУД
Kst_speed (RW) — статический коэффициент усиления по удержанию скорости
Kast_speed (RW)- астатический коэффициент усиления по удержанию скорости
Calibrate — ChechBox включения калибровки джойстика
AP0 — CheckBox режим 0 автопилота — удержание крена = 0 и тангажа = 0
AP1- CheckBox режим 1 — удержание текущей высоты и текущего курса
AP2- CheckBox режим 2 — удержание курса и высоты по таблице (GPS вкл.) или по установленным значениям (GPS откл.)
AT — CheckBox — автомата тяги

Читайте также:  Как сделать лопату для огорода своими руками

Около «авиагоризонта» есть слайдеры, с их помощью можно вручную управлять самолетом в случае отключения автопилота или автомата тяги. Справа с краю есть еще три слайдера, это составляющие управления рулем высоты: (выведены для отладки)

верхний — статическая составляющая TrackAltErr
средний — астатическая составляющая TrackVarErr
средний — составляющая триммирования TrackTrim

В поле внизу выводится текущий лог:

DST — дистанция до следующей точки в футах (C-B на рис. 13)
HDG — курс непосредственно на следующую маршрутную точку (С-B на рис.13)
THDG — курс, с которым следует подлететь к следующей точке (А-B на рис.13)
OFF — смещение от требуемой траектории в футах (расстояние от точки С до линии AB Рис.13)
SP — требуемая воздушная скорость полета
ALT — требуемая высота полета
WP — следующая путевая точка

На Рис.4 представлен алгоритм работы автопилота по удержанию курса. Предположим, что задание — пролет из точки А в точку B. Предположим, что самолет оказался почему-то в точке “С”. Существуют различные варианты достижения точки B. Например, можно лететь непосредственно на нее курсом HDG, но тогда подход к точке будет выполнен с неправильного курса. Если, например, здесь полоса для посадки, то посадка точно не получится. Поэтому здесь реализован алгоритм, при котором, если самолет очень далеко от заданной траектории, то он летит по кратчайшему расстоянию перпендикулярно THDG (True HDG). Как только он подойдет на определенной расстояние диаметра разворота к THDG, автопилот начнет менять этот курс (Requested Heading), который постепенно сравняется c THDG. Таким образом, к моменту, когда отклонение от маршрута (OFF) станет нулевым все четыре курса: Current Heading (текущий курс самолета на панели Приборы), Requested Heading, THDG и HDG на нижней панели должны сойтись и показывать одно и то же. Такой алгоритм сейчас приводит к тому, что пока самолет не достигнет заданной точки он «не думает» о следующей, и получается большая ненужная петля. Решением может быть переход к следующей точке на расстоянии двойного радиуса разворота самолета. На данный момент условия принятия решения о достижении точки начинают проверятся при приближении самолета к заданной точке на расстояние меньшее чем

радиус разворота RadRazv. Решение о переходе к следующей точке принимается либо при сближении с ней менее чем на 50 ft либо при начале удаления от этой точки, если самолет не попал в круг радиусом 50 ft. Это наиболее интересные моменты работы программы.

Триммирование

Как оказалось, фраза «снять усилие со штурвала» оказалась не пустым звуком. Все попытки сделать систему обратной связи по тангажу так, чтобы точно удерживать высоту, и при этом охватить весь диапазон изменений режимов полета, оказались тщетны. Либо самолет входит неустойчивый режим с колебаниями по высоте при большом усилении петли ОС, либо не точно удерживает высоту. Кроме того, при большой скорости подъемная сила может стать настолько большой, что руль высоты не справляется (из-за недостаточного коэффициента усиления петли ОС), и самолет начинает все время набирать высоту. Либо снижается, не имея возможности выйти на большие углы атаки при маленькой скорости. Таким образом применена система триммирования руля высоты со следующим алгоритмом:

  • Eсли есть задание увеличивать высоту и высота действительно растет, то триммирование не производится.
  • Если есть задание увеличить высоту, но она падает, или не меняется, то начинается триммирование стабилизатора в набор, пока не начнется набор высоты.
  • Если требуется снижение и происходит снижение, то триммирование не производится
  • Если требуется снижение, но при этом высота не меняется или идет набор высоты, то начинается триммирование руля высоты вниз.

Триммирование производится значительно медленнее, чем управление автопилота 0, поэтому самовозбуждение петли обратной связи не происходит.

Посадка

Как известно, самым сложным элементом полета является посадка. Поскольку мой автопилот предназначен для радиоуправляемой модели, требования к посадке можно упростить. Здесь посадка выполняется в режиме планирования. При этом автопилоту дается задание при подлете к месту посадки (посадочный курс удерживается по GPS) удерживать скорость 0 и высоту, например, около 200 ft — немного больше чем высота полосы. При этом автопилот удерживает самолет в правильном полетном положении, постепенно увеличивая при снижении угол атаки. Такая посадка не годится для тяжелых самолетов, для них нужно требовать не нулевую скорость, а минимальную для данной конфигурации самолета, не достигая при этом сверхкритических углов атаки. В фильме можно увидеть посадку и также увидеть, как работают алгоритмы автопилота при триммировании и пролете по маршруту. Это в симуляторе. Посадку реального самолета можно увидеть в испытании 17.10.2017. Она произошла не штатно из-за разряда аккумулятора, но вполне красиво, т.е. так, как и задумано.

Читайте также:  Вещи для самообороны своими руками

Источник

Самодельная система стабилизации самолета на базе Arduino

С недавних пор я увлекся авиамодельной темой. И тут понеслась: построил самолет, купил аппаратуру. Предвидя быструю кончину первой модели не отходя от кассы начал собирать вторую, параллельно занимаясь в симуляторе. В общем оттягивал я свой первый реальный полет как мог, боясь с ходу разбить модель. И тут совершенно случайно, бороздя просторы алиэкспресса я наткнулся на интересную штуку — систему стабилизации полета. Это небольшое, размером с приемник, устройство, которое корректирует полёт самолета, делая его более плавным, сглаживая огрехи пилота. Начал искать, читать, говорят и правда хорошая вещь для новичков. Ну и тут я загорелся — хочу и хоть ты тресни. Вот только бюджет уже совсем поджимал. Казалось бы, самолет тот построить вопрос долларов на 10 потолок, а аппаратуру купи, аккумулятор купи, зарядное устройство для него купи, двигатель, регулятор, сервоприводы, пропеллеры . Короче в итоге набегает немало. Немного приуныв, но не сдавшись я начал чухать затылок: дык, я ж вроде паять умею. Начал искать и почти сразу же нашел небольшую статейку под названием «Система стабилизации самолета за 200 рублей». Совсем скромная статейка со совсем скромной реализацией. Но это уже что-то. Полез на зарубежные форумы — и о чудо, да это же огромный проект с постоянным развитием! Решено, будем делать!

Проект называется MultiWii. Изначально это задумывалось как полетный контроллер для мультикоптеров на базе arduino, но со временем начало обрастать и совершенствоваться. Сейчас есть код, позволяющий ставить эту систему стабилизации и на самолеты, и на V крылья. Для самого простого исполнения, как в вышеупомянутой статье, потребуется всего 2 вещи: arduino и акселерометр. Все это можно спаять проводами, залить горячими соплями и работать будет. Но оно может и будет, вот только я так не работаю.

И так, для изготовления полноценного устройства понадобятся:

  • Arduino PRO Mini, 5V, Atmega 328
  • Модуль трехосевого акселерометра с гироскопом MPU-6050
  • Гребенка PLS
  • Кусок фольгированного стеклотекстолита, если делаете плату сами.
  • SMD резистор 500-1500 Om
  • Светодиод 3 мм любой.

Из инструментов:

  • Паяльник
  • Припой
  • Флюс (я советую F5)
  • USB — UART конвертер CP2102 или аналогичный
  • Модельный/канцелярский/монтажный нож для изготовления корпуса

Ну и по мелочи, двусторонний скотч, ножницы, ушные палочки, пинцет, то, что должно быть на вооружении и у самого юного самоделкина.

Как я говорил проект растет и развивается. Так что сюда можно прикрутить еще Bluetooth модуль, для настройки контроллера с телефона, барометр, для контроля высоты, GPS для возврата модели «домой» при потере сигнала. Помимо этого так же растет тема про самодельные приемники на базе той же arduino и дешевого модуля связи A7105, который без хирургических вмешательств сопрягается с моей аппаратурой FlySky i6, так что в теории можно связать два этих проекта и забабахать полноценные «мозги» для самолета, планера или крыла. А в купе с вышеупомянутой бюджетной аппаратурой, которая спокойно прошивается с 6-и каналов на 14-ть — это выходит вообще просто идеальный вариант для новичка за свои деньги.

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

Первым делом впаиваем перемычки.

Шильдик напечатал на самоклеящейся глянцевой бумаге. Купил недавно специально для таких целей. Раньше делал так: печатал на чем есть, ламинировал скотчем и клеил на двухсторонний скотч. Самые внимательные могли оценить мой уровень английского языка)

Теперь устройство действительно можно назвать готовым модулем. Итоговый вес 15.5 грамм. Многовато если сравнивать с покупным, но в целом очень даже ничего. По крайней мере моя модель с размахом 950мм потянет без проблем. Но если гнаться за весом — можно распаять arduino из рассыпухи прямо на плате, сэкономит грамма 2, использовать тонкий миллиметровый текстолит (я использовал какой был, полтора или два миллиметра, не измерял), не делать корпус. Но стоит ли ради тех 5 грамм? К примеру вес родного приемника от моей аппы — 16 грамм.
Устройство должно быть расположено в горизонтальной плоскости, стрелка указывает направление движения. Так же устройство нельзя устанавливать вверх дном. Для большей наглядности прилагаю картинку.

Немного о других настройках. PID — это настройки самой стабилизации. В двух словах:

  • Р — это величина корректирующей силы, приложенной для того, чтобы вернуть модель в её начальное положение.
  • I – это период времени, в течение которого записываются и усредняются угловые отклонения.
  • D – это скорость, с которой модель вернется в её начальное положение.
Читайте также:  Дракон своими руками несложный

Я советую не трогать эти настройки перед первым полетом. Стабилизация хорошо работает на базовых значениях, ну а там уже можно подкрутить, если что-то не устраивает.

Далее. TPA отвечает за значение этих PID настроек в зависимости от положения газа. При значении 0.00 значения PID будут одинаковыми при любом положении газа, то есть как предполагается, на любой скорости. При значении 1.00 при газе 100% PID будут равны нулю, то есть стабилизация будет отключена. При значении 0.5 на 100% газа пиды будут равны 50% соответственно. Тут уже настраивается под самолет и под свой стиль пилотажа, я пока оставил 50%.

Так же на канале AUX2 нужно настроить арминг. Арминг — термин коптерный. По человечьи это называется разблокировка двигателя. На самолетах это обычно реализуется через аппаратуру управления, но т.к. этот контроллер изначально коптерный — тут это сделали довольно жестко. В общем вешаем на AUX2 какой-то свободный тумблер, в программе ставим ARM на высокий уровень. Тут кто-то может захотеть схитрить и выставить разблокировку на всех уровнях AUX2, вот только не проканает. В таком случае мультивий откажется запускать двигатель вообще. Можно предположить что это баг, но я думаю что скоре защита. Самолет все таки только вперед летит, а куда рванет неуправляемый коптер одним Богам известно.

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

Важный момент про отключение устройства от компьютера. Если выдернуть провода программирования из устройства или выдернуть конвертер из USB порта не закрыв COM порт или программу MultiWiiConf — примерно со 100%-й вероятностью произойдет краш системы и синий экран. По крайней мере на моем ноуте это так. Я даже специально проверял. Не знаю, проблемы ли это моего железа или так реагирует видна на виртуальный COM порт, но предупрежден — значит вооружен. Имейте в виду.

И еще немного настроек которые могут пригодиться. Если Ваш приемник умеет выдавать PPM сигнал, возможно Вам захочется передавать на мультивий его. Для этого открываем файл прошивки, переходим во вкладку config.h и ищем раздел PPM Sum Reciver (восслався Ctrl+F). Тут нужно расскоменитровать 2 строчки. Кто не в теме, раскомментировать — это значит убрать два слэша в начале строки. Было так:

Так же нужно расскоментировать одну из этих строчек в зависимости от аппаратуры:

В моем случае это вторая строка, там где Futaba (при чем аппаратура у меня FlySky). Тут возможно придётся подбирать опытным путем, возможно и самому прописать нужную последовательность. Так или иначе ничего сложного в этом нет. Компилируем скетч и заливаем его по новой. Для возврата в обычный режим делаем обратное, комментируем строки, компилируем, заливаем. Хочу обратить внимание, после перезаливки скетча все настройки и калибровка будут сбиты, имейте это в виду.

Ещё одна распространённая проблема с которой как я понял часто сталкиваются, и я не исключение. После того как все собрали и настроили, подключили все рули — уплывает руль направления. Передернули ручки на пульте — вроде стал на место, но стоит немного покачать планер — опять уплывает в сторону, при чем на довольно серьезный угол. Лечится элементарно: в программе GUI устанавливаем значение YAW — I в ноль. Проблема сразу уходит.

Ну и видео работы:

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

Форум продавца печатных плат из Вены , у которого я и позаимствовал формфактор платы. Покупать я не предлагаю, но в теме есть детальный гайд по конфигурации прошивки на английском языке. Правда для старой версии прошивки, но в новой все почти так же. Так же в ветке есть мод, позволяющий в реальном времени регулировать PID настройки через аппаратуру управления потенциометром.

Личный блог авиамоделиста Патрика Эмерсона . У него есть своя личная переписанная прошивка, говорят что идеально оптимизированная под самолеты. Но опять таки старой версии. Можете попробовать ее, но за появление глюков не описанных в этой статье я ответственности не несу. Там же много описаний настроек.

Русская тема на форуме . Но основную полезную информацию, которая там описана, а именно лечение руля направления я уже изложил. Тем не менее, мало ли.

Итоговая стоимость колеблется в пределах 4-8 долларов, смотря по какой цене купили ардуино и модуль, есть ли дома текстолит, есть ли программатор. При любом раскладе это в разы меньше рыночной стоимости от 20 долларов за устройство с такими же характеристиками. Лично мне оно обошлось в 2 доллара, запас ардуинок для таких вот целей был закуплен еще год назад, не было только модуля.

В прикрепленном ниже архиве скетч для ардуино, программа настройки MultiWiiConf для разных операционных систем, файл печатной платы (для открытия нужен SprintLayout не меньше 6-й версии) а так же печатная плата в формате PDF, для тех, у кого нет лазерного принтера дома (нужно печатать в размере 100%).

Источник

Оцените статью