OSD на ATmega1281
а не пробовали свой пилот к симулятору подключать ( типа X-Plane )? Может там прощще коэффициенты подобрать?
как организовать устойчивый полет по кругу вокруг заданной точки с заданным радиусом (малым) по GPS данным с учетом, что эти данные по положению запаздывают… и не всегда с определенной постоянной времени…
Время маркируется в строчках NMEA. Причём именно тем моментом, когда данные были получены.
Можно для начала прошить в ЖПС профиль “самолёт”, если он поддерживает смену профиля. Отработка высот и курсов станет намного лучше. А далее -прогноз. По нескольким последним точкам ЖПС. Такая имитация калмана. Но из-за ветра, если его не учитывать, всё равно будут овалы.
а не пробовали свой пилот к симулятору подключать ( типа X-Plane )?
Да, было бы здорово. Но не уверен (не разбирался), что в симуляторах есть возможность получать обратную связь о положении модели (координаты), крен, тангаж итп. Пока использую свой примитивный “симулятор” (там используется непосредственно Си-шный код прошивки, визуализация в окошке OSD, реализуется зависимость с задержкой и огрублением элероны->крен, крен-курс итп…), больше для того, что бы в принципе проверять работоспособность алгоритма/кода. Ошибку в cообщении #370, допустил именно от того, что пренебрег тщательной проверкой на этом “симуляторе”. Реальных коэффициентов там не найдешь, но забавно наблюдать общие тенденции зависимости поведения “модели” от тех или иных параметров.
Можно для начала прошить в ЖПС профиль “самолёт”, если он поддерживает смену профиля.
Не видел для MC1513 такой возможности.
А далее -прогноз. По нескольким последним точкам ЖПС. Такая имитация калмана.
Д-ветвь регулятора курс->крен по сути и есть прогноз. Мне виделся в подсознании некоторый алгоритм, в основе удержание постоянного крена. Сразу получаем достаточно плавные круги. Но как это грамотно связать с целевым радиусом поворота, а тем более с сохранением центра- пока не придумал…
Еще такая мысль не дает покоя… Можно записать все параметры полета в лог, даже в ручном упралении. Потом на ПК натравить на этот лог некую программу, которая сможет построить переходные характеристики заданных параметров, выполнит идентификацию объектов управления и пр. умные вещи, выдаст в итоге рекомендуемые коэффициенты с заданным запасом устойчивости. Благо вычислительные ресурсы и время на выработку решения будут неограниченны… Спецы по ТАУ, отзовитесь! Может есть подобный софт для формальных решений подобных задач?
ЗЫ Сегодня приехал на поле, пока разворачивал наземку, настраивал самолет, началась гроза и проливной дождь… Зато все привез домой целым и невредимым… 😃
To msv
Тут наверное св.диод наоборот? Или я чего непонял.😵
Да, конечно… очепятка…
Да, конечно… очепятка…
Я бы вам рекомендовал такой преобразователь уровня: www.analog.com/static/…/ADG3304.pdf Двусторонний, быстрый, надёжный.
Можно записать все параметры полета в лог, даже в ручном упралении. Потом на ПК натравить на этот лог некую программу, которая сможет построить переходные характеристики заданных параметров, выполнит идентификацию объектов управления и пр. умные вещи, выдаст в итоге рекомендуемые коэффициенты с заданным запасом устойчивости.
Не так всё просто…
Мы составляем 3D модель планера (рисовать месяц), потом продуваем его в солиде (двухядерный пенёк пыхтит почти трое суток) и получаем передаточные характеристики ТОЛЬКО планера. Ещё нужна ПХ для сервы, электроники и тд. И вот когда всё это есть, тогда в маткаде можно довольно легко посчитать коэффициенты.
Это старая методика, описана ещё в книгах Боднера.
Для себя сделал вывод,ч то проще в поле провести день и подобрать эти коэфициенты 😉
Сразу скажу, что я полный ноль этой области… Более того, о существовании ТАУ узнал в этом проекте… 😃 И все же…
Не так всё просто…
Это если идти путем прямого мат. моделирования объекта. У меня же более реальная идея- синтез формальной модели объекта с пассивной идентификацией. Хотя бы (для начала 😃) модели первого порядка с транспортной задержкой. Под объектом можно представить сразу весь контур регулирования - например черный ящик, на который подается PWM для элеронных серв, а на выходе получается некоторый крен. Поэтому в этом объекте сразу будут учтены и ПХ сервы и аэродинамика самолета итп… Понятно, что модель эта жутко нелинейная, но для начала можно получить усредненные параметры на основании относительно длительного наблюдения (скажем перелопатив лог 30-мин. полета) . Ну а стоит войти во вкус, глядишь и до адаптивного фильтра можно дорасти, отдельно идентифицировав например модель элероны-крен для разного тангажа и др. параметров полета… ( ну это так, помечтать…)
Для себя сделал вывод,ч то проще в поле провести день и подобрать эти коэфициенты
Хотелось бы хоть знать, хоть от каких порядков отталкиваться. Например прошлый самолет оценил Зиглером/Никольсом, и потом только маленько поправил коэффициенты, увеличив запас устойчивости. А вот текущий самолетина, категорически не переносит диф-составляющую для крена, сразу появляется недопустимое перерегулирование/раскачка… Объяснить это пока не могу.
ЗЫ интересно, как сделаны регуляторы в продаваемых народных системах стабилизации, где все настраивается одной крутилкой…
У меня же более реальная идея
Ваша идея выполнима только в идеально равномерной среде, увы. Я пробовал писать эти параметры - получается. Но мы не учитываем влияние ветра и т.п. То же скольжение влияет на динамику, а пирометры скольжение не покажут никак. Ибо крен, это ещё не скольжение.
Объяснить это пока не могу.
Инертная масса. Помню, весы мы делали, автомобильные. И были у нас гири на тонну, которые мы тельфером на весы клали. Дык они потом ещё минут 10 качались, хотя весы на тензодатчике и упругих элементов не имеют.
о существовании ТАУ узнал в этом проекте… 😃 И все же… Это если идти путем прямого мат. оценил Зиглером/Никольсом, и потом только маленько поправил коэффициенты, увеличив запас устойчивости. А вот текущий самолетина, категорически не переносит диф-составляющую для крена, сразу появляется недопустимое перерегулирование/раскачка… Объяснить это пока не могу.
Доброго дня! Как насчет прошивки а то засада, плату собрал если что.😃
Можно глянуть и на исходники, если не жалко.
Прошивка меняется каждую неделю, поэтому пока нет смысла ее выкладывать. Крайний облетанный вариант выслал Вам на мыло.
Еще раз попробую спросить… Как правильно реализовать Д-ветвь ПИД регулятора? Каноническая реализация Kd/T*(e[n]-e[n-1]) ничего кроме дифф. шума не дает… И не удивительно, скорость изменения функции измеряется только за один период дискретизации и считается что она такая же будет за все время дифференцирования. Если например после скачка рассогласования к следующей итерации выходной сигнал даже случайно чуть сдвинется в нужную сторону, такая диф. цепь уже начнет выдавать активное торможение. Я изобрел и попробовал кучу разных алгоритмов, они все как-то работают (во всяком случае рисуют красивые графики на ускорение и демпфирующее торможение), но создается ощущение что изобретаю велосипед…
Может самым красивым решением будет в качестве дифференциатора использовать ФВЧ 1-го порядка например БИХ? А частоту среза определить постоянной времени дифференцирования.
Может самым красивым решением будет в качестве дифференциатора использовать ФВЧ 1-го порядка например БИХ?
Может😒 вообще то я не копенгаген как говорят
но в общем случае устойчивость и перегулирование определяет запас по фазе и амплитуде как в ФАПЧ е к примеру ИМХО. Ну и вопрос: механика самолета какого порядка?
я не копенгаген надо копаться если что, надо подумать.
А за прошивку спасибки и за труд тоже и не жадность:)
Д-ветвь ПИД регулятора?
Которая по угловой скорости?
Во-1 имеет значение, сколько у вас пирометров - 4 или 6. Во-2, учитываете ли вы взаимовлияние крена и тангажа. Если учитываете и датчиков 6, то канонический вид вполне работоспособен. Разумеется, надо фильтровать. Например, у меня период цикла АП равен 2,5 мс. То есть за один период ППМ (20 мс) я успеваю 8 раз получить угол. Потому и угол, и угл. скорость идут через ФСС на 8 выборок. Способ простейший и дубовый, но работает.
В зависимости от градента меняется глубина ФСС и, соответственно, коэффициенты ПИД.
ту Dikoy
я правильно понял - зная количество опросов можно вычислить угловую скорость и скомпенсировать ее?
может если ещё и скорость учитывать то можно будет достаточно точно стабилизировать самик?
Может самым красивым решением будет в качестве дифференциатора использовать ФВЧ 1-го порядка например БИХ? А частоту среза определить постоянной времени дифференцирования.
ФСС затормаживает реакцию сильно. Экспоненциальный фильтр, как частный случай БИХ, работает на ура. С пирами я использую экспоненциальный фильтр и на П и на Д компонентах. Вообще, экспоненциальный фильтр зело хорошая вещь при правильном использовании.
На П ветвь - угол = угол*к + новоезначениеугла*(1-к)
На Д ветвь - скорость = скорость*к + новоезначениескорости*(1-к) где новоезначениескорости = угол без фильтра минус угол на предыдущем цикле АЦП без фильтра.
При целых рядах и к=3/4, 1/2, 1/4 и т.д. получается очень быстрая красивая математика. У меня плавающая точка, и времени вагон, но Вам это особенно важно, поскольку времени на математику у АП не очень много, рисовать надо.
к можно менять на лету по вкусу, но я этого не делаю, уровень шумов после фильтров обычно гораздо меньше, чем погрешность от кривой установки пир на модель или просто плохой погоды. Т е горизонт просто встает набекрень, но не дрожит.
Суперсэмплинг на АЦП идет всего лишь по 4 выборки на каждом канале, этого хватает за глаза.
Время сэмплирования у меня константно, так что я не думаю о том, сколько времени прошло с предыдущего шага, а просто учитываю время сэмплирования в коэффициентах усиления по П и Д ветвям - домножаю их на заранее посчитанные константы.
Особо быстрыми фильтры на пирах можно не стараться делать, постоянная времени даже очень хороших пир из тех что я пробовал - 16мсек, они с хорошим таким запаздыванием реагируют на изменение положения.
Во первых всем спасибо! А теперь будем разбираться…
Что такое ФСС? Варианты которые приходят в голову фильтр сосредоточенной селекции, фильтр сложения сигнала… Гугл еще подсказывает -фонд соц. страхования… 😃
В суперсемплинге (семпл считаю 20мс) данных от пиро не вижу смысла. Уровень вч помех от пиро мизерный, давится аппаратно RC-цепочкой. Дома есть небольшой фонок 50гц от неидеального экранирования усилителя с громадным КУ. На поле думаю и ему неоткуда взяться. У меня с пиро стоит усредняющий фильт на задаваемое конфигурацией число семплов. Практически сразу останавился на 3-х, те время усреднения 60мс. Особого смысла в этом пожалуй нет, но вроде бы и не мешает, скорость отработки машинок, тем более скорость отработки управляющего воздействия самолетом (общая постоянная времени запаздывания крена для моего самолета ~600-800мс) несравнимо ниже…
Давайте еще определимся, что говорим о одном и том же… Под скоростью (да и углом) я понимаю не абсолютное значение скорости изменения выходного параметра, а скорость изменения ошибки между уставкой и текущим значением выходного параметра.
В последней реализации Д-ветви использую именно экспоненциальный фильтр, как действительно весьма эффективный и простой в реализации. У меня он выглядит так:
D[n]=(Kd*(e[n]-e[n-1])-D[n-1]/Kd)+D[n-1];
Время дифференцирования для канала крена с запасом устойчивости ~0.1сек, соответственно Kd=100ms/20ms=5
ФСС-фильтр скользящего среднего. N последних сэмплов усредняется с равными весами.
Я не беру для Д ветви уставки, а беру абсолютное изменение углов крена-тангажа. Так проще и надежнее, плюс, оглядка на уставки математически отличается от оглядки на абсолютные углы только когда меняется сама уставка, а она обычно 90% времени константа.
ФСС-фильтр скользящего среднего. N последних сэмплов усредняется с равными весами.
Ок, спасибо, буду знать. Использую сплошь и рядом (в тч. в этом проекте) но не знал что так называется.
а она обычно 90% времени константа.
Почему уставки (целевые значения) константы? Даже для спокойных режимов, типа RTH, они непрерывно меняются. Весь смысл Д-ветви ускорить и вовремя затормозить (демпфирование) выходное управляющее воздействие именно на основании скорости изменения ошибки заданного значения (например целевого крена) и текущего, а не выходного параметра. Те. например ускорение (временное увеличение управляющего воздействие) должно быть одинаково или при быстром изменении целевого крена или при быстром отклонении (порыв ветра) текущего крена. Аналогично демпфирование…
Это идеально работает на моем симуляторе с имитацией инерции. С самолетом (именно текущим) пока что-то засада, не переносимость у него на Д-составляющую по крену… Вместо демпфирования- увеличение раскачки. Боюсь что-то очевидное не разглядел. Есть идеи, жду погоду и время в поле вырваться…
Поигрался еще Д-веткой пида. Сделал по такой формулке:
k=Kd/2; //подобрал
if(k==0) k=1;
D[n]=(Kd*(e[n]-e[n-1])/k)+(D[n-1]*(k-1)/k);
Работает чудно при небольших значениях Kd (1-10).
При больших значениях (например для ПИДа “ошибка курса”->“крен” для эффективного демпфирования требуется постоянная времени порядка 0.5 -1сек)- неэффективно… С экспоненциальным фильтром полюбому для больших Kd получается или много шума или малая амплитуда и уже неправильная фаза. Более эффективно работал дифференциатор:
D[n]=e[n]-e[n-Kd]; Но такой подход требует буфер для каждого ПИД размером Kd, ну и еще там кое-какие проблемки есть…
ЗЫ Поясню народу, все это уже по сути “эстетство”. Все неплохо работает и управляется вообще без Д-ветви, чисто на ПИ-регуляторах. Просто хочется сделать еще лучше и “правильнее”.
Почему уставки (целевые значения) константы? Даже для спокойных режимов, типа RTH, они непрерывно меняются. Весь смысл Д-ветви ускорить и вовремя затормозить (демпфирование) выходное управляющее воздействие именно на основании скорости изменения ошибки заданного значения (например целевого крена) и текущего, а не выходного параметра.
Уставки константы потому, что они по сравнению с собственно креном и тангажом меняются медленно-медленно. Можно считать константами.
Д ветвь можно сделать и с уставками, и без их учета. В моем варианте, без их учета, Д работает просто как достаточно медленная гиро, что, тем не менее, давит резкие изменения углов.
Пока не могу понять, где у Вас проблема. Может, со знаком Д ошибка? 😃 У меня толпа самых разношерстных самиков летает, обычно никаких проблем.
Д по курсу тоже штука интересная. Его учитывать надо не всегда. Я остановился на плавном сведении КУ на Д в 0, когда целевой и текущий курс отличаются больше, чем на 90 градусов и ограничении как величины Д по курсу до 90 градусов, так и собственно скорости разворота модели.
При этом на всем диапазоне входных условий сохраняется устойчивость, а близко к целевому курсу включается Д и давит переруливание по курсу.
Если нужно, могу кусочки кода скинуть.
У меня для курса->крена была мысля отключать И-ветку при больших расхождениях. Типа для грубой установки курса хватит и П-ветки, и не будет накапливаться интегральная ошибка, которая в основном и вызывает перерегулирование. А для точной доводки включается И-ветка и аккуратно триммирует направление. Но пока не рискую далеко уходить от канонов ТАУ.
Если нужно, могу кусочки кода скинуть.
Конечно было бы интересно… Хотя бы в псевдокоде.
У меня для курса->крена была мысля отключать И-ветку при больших расхождениях.
И ветви я вообще везде искоренил нафиг. Очень много геморроя от них. Но, думаю, начну осторожно вводить, сначала в тангаж-высота, потом в крен-курс.