Создание собственной системы стабилизации
Плюс простота назы в полетниках в том числе стала залогом ее упеха, а гора настроек явно не способствует широкой популярности. Да и время сейчас такое стало - для большинства новичков зачастую проще купить что-то летающее из коробки - выбор сейчас огромен на любой кошелек.
Вот, нужно сделать функционал назы за малые деньги, + управление подвесом. Чтоб исчерпывающая инструкция для выполнения первого полета с базовым функционалом (удержание, возврат домой) занимала менее половины листа А4.
На мой взгляд со стороны более менее продвинутого пользователя все мега удобно.
Для любителя рукоделия ))) Для пользователя нужно просто выбрать тип носителя и 3-4 цифири настроек, не более!
Папарации кстати яркий тому пример, что без толкового мультиплатформенного гуя проект так и не стал оссобо популярным к сожалению…
У опенпилотов гуй прекрасен, у арду весьма гемороен. кого из них больше? 😉
Для чего реально нужен ГУЙ, так это для полета по точкам, и/или настройки автопосадки для самоля.
Кстати, какого типа ИНС в папарации? EKF, UKF, комплиментарники или другое что?
Есть там и калмановкие решения, но я летаю на комплиментарниках. Руки пока не дошли потестировать другие алгоритмы.
Вот, нужно сделать функционал назы за малые деньги, + управление подвесом. Чтоб исчерпывающая инструкция для выполнения первого полета с базовым функционалом (удержание, возврат домой) занимала менее половины листа А4.
Так это уже целый комплекс - полетник+прошивка. Но именно это был путь назы, и она весьма преуспела. Но в принципе я здесь абсолютно согласен, собственно к чему то похожему я пришел и сам:
Так я себе представляю удобный полетник - все в одном, микроконтроллер, сенсоры, осд на верхней плате; регули, импульсные беки на 5В и 10В, лц-фильтр - на нижней. С одной стороны входы/выходы осд с переключателем на 2 канала, шим на подвес; с другой входы для приемника и телеметрии РУ. Плюс естественно вход GPS и компаса, дополнительный уарт и набортный стандартный ардушный модуль телеметрии для настройки с гуи. Сейчас облетываю на своем новом кваде, минимум проводов, очень удобно. Под это толковую прошивку аля наза с джентльменским набором настроек - так я вижу себе оптимальный полетник для “собери сам” на сегодня.
Так это уже целый комплекс - полетник+прошивка.
дык я именно об этом, все готовое, чтоб моделист без опыта мог прикрутить и не изучая ТАУ полететь используя весь базовый функционал. И еще минимум предполетной подготовки, автодиагностика и автокалибровка. Если по каким то причинам не готов - просигналил лампочками и в лог на флешку
Под это толковую прошивку аля наза с джентльменским набором настроек - так я вижу себе оптимальный полетник для “собери сам” на сегодня.
А для совсем “конченных” пользователей за их деньги джедаи уже всё изобрели.
Так я себе представляю удобный полетник - все в одном,
Это самоделка на фото ?
Это самоделка на фото ?
Нет, распаяны платы не в китае, если вы об этом 😃
Нет, распаяны платы не в китае, если вы об этом
Я имел ввиду - это Ваша собственная разработка ?
Так я себе представляю удобный полетник
Просто, в процессе длительных проб и ошибок, я тоже пришел приблизительно к такому же функционалу и компоновке )))
Да и то это дело желания сесть и сделать - портируется там все на раз.
я сделал, но так и не попробовал…
Я имел ввиду - это Ваша собственная разработка ?
Понял. Разработка моя.
я сделал, но так и не попробовал…
А чего не хватило?
ума - шучу, новый год наступил, а сейчас другие задачи…
оставалось xml микшер под трёху написать или это уже из гуя можно?
а ещё ld сделать свой - точно…
под ф4бы - там, да, с пол пинка можно, но я не искал лёгких путей)))
всем привет. Кто может просветить по поводу ПИДов. Вот две схемы ПИДов танагажа и крена.
Первая - паралелльная, довольно странная, это схема автоквада. Причем автор хотел сделать, не то, что получилось? Ошибка? Обратите на то, что из сигнала задания в звене дифференциальной состяавляющей вычитается СНОВА показание сенсора. Наверное надо вычитать ЗАДАНИЕ? Так как коментарий противоположен, выделил жирным.
Вторая - моя текущая. Она последовательная. Я вычитаю 80 процентов задания, по-моему так правильнее.
В схемах намеренно не показывал лимиты, чтобы не загромождать.
Но к чему это я все. На форуме автоквада написано, что на заре проекта, было несколько схем (последовательная и паралелльная), в итоге Билл выбрал паралелльную, так как она оказалось лучше. forum.autoquad.org/viewtopic.php?f=31&t=4792&p=363…
Но вот смотрю я на нее и с первого взгляда, что-то нифига не лучше, вместо того, чтобы использовать напрямую угловую скорость с гиры в ПИД идет дифференциал угла. У кого какие мысли?
Код:
float pidUpdate(pidStruct_t *pid, float setpoint, float position) {
float error;
float p = *pid->pGain;
float i = *pid->iGain;
float d = (pid->dGain) ? *pid->dGain : 0.0f;
float f = (pid->fGain) ? *pid->fGain : 1.0f;
if (pid->pTrim)
p += (*pid->pTrim * p * 0.002f);
if (pid->iTrim)
i += (*pid->iTrim * i * 0.002f);
if (pid->dTrim)
d += (*pid->dTrim * d * 0.002f);
if (pid->fTrim)
f += (*pid->fTrim * f * 0.002f);
error = setpoint - position;
// calculate the proportional term
pid->pTerm_1 = p * error;
if (pid->pTerm_1 > *pid->pMax) {
pid->pTerm_1 = *pid->pMax;
}
else if (pid->pTerm_1 < -*pid->pMax) {
pid->pTerm_1 = -*pid->pMax;
}
// calculate the integral state with appropriate limiting
pid->iState += error;
pid->iTerm_1 = i * pid->iState;
if (pid->iTerm_1 > *pid->iMax) {
pid->iTerm_1 = *pid->iMax;
pid->iState = pid->iTerm_1 / i;
}
else if (pid->iTerm_1 < -*pid->iMax) {
pid->iTerm_1 = -*pid->iMax;
pid->iState = pid->iTerm_1 / i;
}
// derivative
if (pid->dGain) {
// uncomment this line if you want the D term to ignore set point changes
error = -position;
pid->dTerm_1 = (d * f) * (error - pid->dState);
pid->dState += f * (error - pid->dState);
if (pid->dTerm_1 > *pid->dMax) {
pid->dTerm_1 = *pid->dMax;
}
else if (pid->dTerm_1 < -*pid->dMax) {
pid->dTerm_1 = -*pid->dMax;
}
}
else {
pid->dTerm_1 = 0.0f;
}
pid->pv_1 = position;
pid->sp_1 = setpoint;
pid->co_1 = pid->pTerm_1 + pid->iTerm_1 + pid->dTerm_1;
if (pid->co_1 > *pid->oMax) {
pid->co_1 = *pid->oMax;
}
else if (pid->co_1 < -*pid->oMax) {
pid->co_1 = -*pid->oMax;
}
return pid->co_1;
}
Кто может просветить по поводу ПИДов.
Не совсем понял, у тебя на схемах где вход от ДУС?
справа RATE - это данные с ДУСА
Код плохо смотриться, исправь с [CODE]
Мне твой вариант больше нравится, но я бы сделал не много по другому.
Дифф составляющую я бы вообще отдельной параллельной веткой сделал от скорости и отвязал от задатчиков по скорости и тем более углу. Тогда вот эта ветка с весом 0.8 уберется. Задача дифф ветки "успокоить переходные процессы регулирования угла.
Тогда вот эта ветка с весом 0.8 уберется.
Я понял идею. Но мне именно был интересен вариант с тем, чтобы на резкое изменение задания коптер тоже резко реагировал, поэтому 20 процентов сигнала задания я подмешиваю в дифференциальную составляющую.
Мне твой вариант больше нравится
Вот Билл по-другому решил. Единственное что мне пока понравилось в паралелльной схеме это то, что коэффициенты контура угловой скорости независимы от коэффициентов контура угла, то есть по идее, на разных коптерах перенастройку делать легче или вообще не надо. Или все таки не легче и надо?
Илья, у тебя отсутвует интегральная часть на Angle. Если действует постоянная ошиба на rate, коптер никогда не займет заданного положения по углу. В схеме автоквада она есть. Но схема автоквада все равно очень странная, возможно, ее можно преобразовать к классической двухкаскадной, но лучше уже сразу от классической и идти, как у тебя.
Спасибо за интересное замечание, я об этом не задумывался. Хотя такой ситуации быть не должно, у меня на ПИД поступает скорость с ДУСа+биас (который калман считает, то есть все время обновляется), поэтому скорость поступает без смещения. Но действительно можно добавить еще интегральное звено по углу.
чтобы на резкое изменение задания коптер тоже резко реагировал, поэтому 20 процентов сигнала задания я подмешиваю в дифференциальную составляющую.
На мой взгляд это пустой расход энергии, если регули позволят, а если не позволят, то они это вообще пропустят. ДИФФ-звено это демпфер от раскачки и больше ничего.
Илья, у тебя отсутвует интегральная часть на Angle. Если действует постоянная ошиба на rate, коптер никогда не займет заданного положения по углу.
Алексей, есть у него интеграл, просто он через два коэффициента TLT_ANG_P*RTE_ANG_I.
Но действительно можно добавить еще интегральное звено по углу.
Ничего не надо, будет медленная раскачка, двойной интеграл вносит большую задержку - очень тяжело настраивать. А в данном случае и не нужно.
На мой взгляд это пустой расход энергии, если регули позволят, а если не позволят, то они это вообще пропустят. ДИФФ-звено это демпфер от раскачки и больше ничего.
Тут позволю не согласиться. Дифф-компонента ускоряет реакцию контроллера на изменение цели. Должна быть возможность контролировать вес цели в Дифф-компоненте, на некоторых сетапах это способно значительно ускорить реацию на команду.
Ничего не надо, будет медленная раскачка, двойной интеграл вносит большую задержку - очень тяжело настраивать. А в данном случае и не нужно.
Согласен, особенно если дрейф гироскопа рассчитан и учтен фильтром.
На мой взгляд это пустой расход энергии, если регули позволят, а если не позволят, то они это вообще пропустят. ДИФФ-звено это демпфер от раскачки и больше ничего
Не соглашусь, ничего не пропустят, дифф часть через ФНЧ проходит, поэтому там не будет скачка, а вполне растянутый горбик, нормально регули отыграют. Это не только демпфер, но и ускоритель для быстрого отработки задания. К тому же в зависимости от того, как резко должен коптер реагировать на изменение задания отвечает этот самый коэффициент, который у меня равен 0,8. Сделать меньше - будет резче, сделать больше - коптер будет вести себя как вы хотите.
лексей, есть у него интеграл, просто он через два коэффициента TLT_ANG_P*RTE_ANG_I.
Интеграл то есть, но как Алексей сказал, если угловая скорость смещена, то есть ненулевая, при нулевой фактической скорости, то коптер никогда в горизонт не встанет, поэтому он предложил добавить еще интегральное звено в угловой контур.
Ничего не надо, будет медленная раскачка, двойной интеграл вносит большую задержку - очень тяжело настраивать. А в данном случае и не нужно.
Вот тут да, есть такой момент, вроде как из ТАУ вспоминаю, что запас устойчивости снижается. Но зато астатизм системы повышается.
Но все равно фиг с ним с этим интегралом, главное подавать несмещенные угловые скорости, тогда все нормально будет, а у меня так и есть.
Не соглашусь, ничего не пропустят, дифф часть через ФНЧ проходит, поэтому там не будет скачка, а вполне растянутый горбик, нормально регули отыграют. Это не только демпфер, но и ускоритель для быстрого отработки задания. К тому же в зависимости от того, как резко должен коптер реагировать на изменение задания отвечает этот самый коэффициент, который у меня равен 0,8. Сделать меньше - будет резче, сделать больше - коптер будет вести себя как вы хотите.
Делать-не делать, тут дело вкуса 😃 По мне (ещё раз повторюсь) смысл этого ДИФФ-звена - компенсация (демпфер) колебаний в следящей системе, вызванный фазовым сдвигом из-за задержки в цепи среда-обработка-реакция (угловая скорость-датчик-контроллер-ВМГ-угловая скорость). Быстродействия хватает и без него.
если угловая скорость смещена, то есть ненулевая, при нулевой фактической скорости, то коптер никогда в горизонт не встанет, поэтому он предложил добавить еще интегральное звено в угловой контур.
Для того чтоб два интегральных звена работали последовательно надо иметь отрицательную обратную связь от средней точки (между ними), т.е. по угловой скорости. Но это и так делается, только в интеграторе (прогнозе) ФК.
у меня на ПИД поступает скорость с ДУСа+биас (который калман считает, то есть все время обновляется), поэтому скорость поступает без смещения.
Зачем ещё одно звено?
Но все равно фиг с ним с этим интегралом, главное подавать несмещенные угловые скорости, тогда все нормально будет, а у меня так и есть.
вроде как из ТАУ вспоминаю
Коллега…
поэтому 20 процентов сигнала задания я подмешиваю в дифференциальную составляющую.
Мне ТАУ вспомнить в два раза сложнее )), но попробую тоже высказаться на этот счет - классический ПИД самодостаточен, все желаемые характеристики типа “скорости реакции” и т.п. достигаются тупо коэффициентами, а всякого рода “подмешивания” это скорей самообман… (ИМХО), т.е. у нас есть классическая “уставка” и “данные сенсора”, ладно, если подмешивать “нечто - третье”, а так - ходьба по кругу…
(возможно мой тезис можно было бы математически расписать, но уже слабо…)))