MultiWii

mahowik
alexmos:

Первые результаты стабилизации по высоте (пока только теоретические)

ya vchera utrom uzhe uspel spiratit’ tvoi izmeneniya s code.google.com/p/multiwii-alexmos/…/MultiWii/ i vmerzhit’/vstavit’ ih v a3 ))
v celom neploho derzhit +/-1…2m, esli ne letat’, t.e. zavisnut’ i ne trogat’ … no pri peremeschenii skachki do 3…5m
alt PID primerno takie: p=2.5, I=0.010, D=30…45

p.s. est’ podozreniya chto s tochnost’yu baro v +/-1m luchshego resulata chem +/-1m ne dobit’sya dazhe s ochen’ horoshey matematikoy…

alexmos

О, круто, первый бета-тестер 😃 Вообще-то весь смысл доработки был как раз в том, чтобы при полетах высота держалась точно так же, как и при висениях, и не выходить за ±0.5м. И по графикам GUI - так и должно быть. Попробуй сначала получить те же результаты в GUI, что и я (без сонара), с коптером “в руках”. Т.е. скорость должны быть в районе 0 всегда и при рывках вверх четко реагировать, а при наклонах - нет. Если в GUI все так же, как у меня - попробуй включить движки, выставить газ на висение, включить BARO MODE (не отпуская из рук) и отследить, как реагирует газ на плавные или быстрые перемещения. По поводу PID рекомендации сложно давать, но думаю что P надо поднимать до 10-20, I нормально 0.010, а D можно уменьшать

mahowik:

p.s. est’ podozreniya chto s tochnost’yu baro v +/-1m luchshego resulata chem +/-1m ne dobit’sya dazhe s ochen’ horoshey matematikoy…

Это верно, точность удержания зависит целиком от барометра, но эти ±1 коптер должен отслеживать четко (и у меня в тестах было даже ±0.5 м). Если плавает больше метра, то что-то не так.

mahowik
  • posmotrel kod… est’ voprosi, potom sformuliruyu otpishus’…
    a poka est’ ideya dobavit’ nizkochastotniy filtr na sirie dannie s baro ~0.2-0.5hz (dumayu pomozhet ubrat’ osnovnoy shum) + podnyat’ ves ACC (t.e. ACC_BARO_CMPF) chtobi ne teryat’ bistrodeystvie izmereniy iz-za “medlennih” baro dannih …
alexmos:

Т.е. скорость должны быть в районе 0 всегда и при рывках вверх четко реагировать

eto proveryal pervim delom… tut ok vse

alexmos:

а при наклонах - нет

ne proveryal

alexmos:

попробуй включить движки, выставить газ на висение, включить BARO MODE (не отпуская из рук) и отследить, как реагирует газ на плавные или быстрые перемещения

soprotivlyatsya pri rivkah vniz… sbavlyaet gaz pri rivkah vverh…
ya eto tozhe delal nedelu nazad kogda proekciyu ACC vektora na Z veshal na D v pid regul’…

alexmos:

По поводу PID рекомендации сложно давать, но думаю что P надо поднимать до 10-20, I нормально 0.010, а D можно уменьшать

poprobuyu… no pri P > 4.0 nachnaet raskachku po vertikali +/-3…5m… umenshil P do 2…3 i podnyal D do 40 stalo luchshe…

alexmos:

Вообще-то весь смысл доработки был как раз в том, чтобы при полетах высота держалась точно так же, как и при висениях, и не выходить за ±0.5м.

eto pomnyu (ti vrode pisal v drugoy teme)… no poka ne vishlo…

soliada
alexmos:

Первые результаты стабилизации по высоте (пока только теоретические)

Извиняюсь,а можете написать типа инструкции куда надо вставить этот код?

native18

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

При подключении сервы в стандартный режим управления курсом, жужжания нет - стандартная работа.
Пробовал ставить аналоговые и цифровые сервы - результат одинаков.
Что надо изменить в коде, чтобы каналы движков стали работать в режиме серв?
Если непонятно, попробую объяснить иначе, очень надо.

alexmos
soliada:

Извиняюсь,а можете написать типа инструкции куда надо вставить этот код?

Тоже извиняюсь - инструкции пока нет, т.к. код ещё толком не отлажен, не буду рисковать и рекомендовать его для полетов. Так как для отладки пришлось довольно много мест модифицировать, просто так вставкой куска кода не обойдешься (да и смысла пока нет, если не будет тех результатов, для чего это затевалось). Как только облетаю, выложу и готовые исходники и инструкцию по настройке. То, что Александр с ним летает - так это на свой страх и риск 😃 У нас тут -12 до конца недели, так что пока настоящие тесты затягиваются 😦

Но все таки не удержался и попробовал в режиме висения на кухне, придерживая рукой за провод (с неотлаженным коптером 60см между винтами это довольно экстремально) - да, все как и рассчитано по теории - с барометром медленно плавает в диапазоне 1метр, с сонаром держит четко ±5см. Теперь надо добиться этих результатов при скоростном маневрировани и проверить, как сонар работает совметсно с барометром на пределе измерений сонара или в сложных для него условиях. Немного покрутил PID, лучшие результаты - P=10…20, I=0…0.010, D - 20…40.

native18:

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

Да, так и должно быть - посморите в GUI выходной сигнал на моторы - он скачет как бешенный (на коптере по карйней мере, не знаю что у вас). Для моторов это нормально, а для серв не очень - они туда-сюда дергаются. Для трикоптера видимо применен фильтр, котрый сгглаживает выходной сигнал. Нужно взять его и применить для остальных выходов. Второй варант - уменьшить P, увеличить I и попробвоать поиграть с D, чтобы “замедлить” реакции - сервы все равно так быстро не отрабоают как регулирует PID с дефолтными настройками.

www.youtube.com/watch?v=tAeQ6cnYgVo&feature=youtu.…

mahowik
alexmos:

У нас тут -12 до конца недели

tozhe mne pomeha! 😃 ya esli bolshe chem -20 togda uzhe ne idu 😉

mahowik:

est’ ideya dobavit’ nizkochastotniy filtr na sirie dannie s baro ~0.2-0.5hz (dumayu pomozhet ubrat’ osnovnoy shum) + podnyat’ ves ACC (t.e. ACC_BARO_CMPF) chtobi ne teryat’ bistrodeystvie izmereniy iz-za “medlennih” baro dannih …

chto dumaesh’?

alexmos
mahowik:

est’ ideya dobavit’ nizkochastotniy filtr na sirie dannie s baro ~0.2-0.5hz (dumayu pomozhet ubrat’ osnovnoy shum) + podnyat’ ves ACC (t.e. ACC_BARO_CMPF) chtobi ne teryat’ bistrodeystvie izmereniy iz-za “medlennih” baro dannih …

Так сейчас комплементарный фильтр и работает как НЧ-фильтр для барометра. Попробуй поднять ACC_BARO_CMPF (я тоже попробую с ним поиграть, когда будет реальная возможность для тестов, а не “с рук”). Возможно, придется перетасовать коэффициенты, чтобы ACC_BARO_CMPF не влиял на внутренний PID. Можно добавить и реальный НЧ-фильтр. Можно ещё больше ослабить PID в IMU, чтобы ACC меньше “слушался” барометра. Но все равно барометр будет плавать, только чуть медленнее.

Для меня на самом деле это не так важно - ведь на малых высотах точную привязку обеспечит сонар, а на высотах >5м колебания ±1м не так страшны.

Главное, что уже виден результат стабилизации по барометру 😃 На официальной версии коптер просто куда то уносило при включении режима 😃

mahowik

параметры покручу… отпишусь…

alexmos:

На официальной версии коптер просто куда то уносило при включении режима

тут какой то косяк с офф. версией. либо пишут что оч. хорошо держит (куча примеров на офф. форуме с рабочими пидами + я тож добивался хороших результатов порой), либо пишут вообще про разгон в +/-5м…
мой опыт таков: удавалось висеть в районе минуты +/-1м… а раз вообще как по сонару висел (+/-15…30см)… подвесил на 2м и гонял его рукой по полю и хоть бы хны висит себе… но иногда при тех же пидах начинает колбасить…

mahowik

update: Ток с поля (парковка супермаркета 12 ночи однако 😃) привалил. Отлетал три пака. Для беты оч. даже держит высоту!
ПИДы крутил П=5…25, И=0…0.01, Д=0…50
Лучшее чего удалось добиться это +/-1.5…2м в тупике без ветра и сквозняка при п=12 и=0.04 д=50. С легким ветром и в динамике (вперед на скорости 15-20км/ч потом резко назад…) подбрасывает вверх до 5м…

некоторые выводы: при изменении П, поведение контроллера высоты заметно меняется, а вот влияние Д почти не видно, загонял его в ноль и получал почти теже результаты. Думаю его можно смело увеличивать в 4…6 раз в пид регуле…

Covax

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

#RC_TRIMMING_ROLLPITCH_P
//#RC_TRIMMING_ROLLPITCH_I
//#RC_TRIMMING_ROLLPITCH_D
и т.д.

mahowik
alexmos:

как сонар работает совметсно с барометром на пределе измерений сонара или в сложных для него условиях

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

#define MAX_SONAR_RANGE 400
#define BARO_TO_SONAR MAX_SONAR_RANGE+150 // Due to low baro accuracy
#define SONAR_TO_BARO_FADE (MAX_SONAR_RANGE/3) // 33% of Max sonar range
#define SONAR_TO_BARO_FADE_FROM (MAX_SONAR_RANGE - SONAR_TO_BARO_FADE) //4m-33% = 2.67m start value to fading from sonar to baro

int32_t  currAlt;
  if(SONAR){
    //sonarTempDistance = (sonarTempDistance - (sonarTempDistance >> 3)) + sonarDistance;
    //sonarDistance = sonarTempDistance >> 3;

    if((BaroAlt - BaroAltOffset) < BARO_TO_SONAR){
      float scale = (sonarDistance - SONAR_TO_BARO_FADE_FROM) / SONAR_TO_BARO_FADE;
      scale = constrain(scale, 0, 1);
      currAlt = ((float)sonarDistance * (1.0 - scale)) + ((float)(BaroAlt - BaroAltOffset) * scale);
    }
    else{
      currAlt = (BaroAlt - BaroAltOffset);
    }
  }
  else{
    // no sonar altitude
    currAlt = (BaroAlt - BaroAltOffset);
  }
Covax:

настройку пидов на крутилку в мультивие

по идее не сложно… тут даже это было в теме месяцев так 6-8 назад… некий неизвестный Сайбериан писал неизвестному Сергею Коваксу с кусками кода в комменте… ))
про неизвестных шучу конечно! 😉 но кажется точно было в теме это… посмотрю отпишусь… а пока пора спать… чрез 6ч на работу ((

alexmos
mahowik:

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

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

mahowik:

С легким ветром и в динамике (вперед на скорости 15-20км/ч потом резко назад…) подбрасывает вверх до 5м…

Мне кажется тут поможет только дебаггинг алгоритма - подключать bluetoth, брать ноут и гонять. Один гоняет, другой сморит в GUI как ведет себя определитель высоты. За ту часть, что в PID контроллере, я практически уверен - там сложно ошибиться.

D-составляюшая у меня проявляется хорошо - если она в 0, то резкие рывки вниз отрабатываются с задержкой, если она 50 - то мгновенно. Ты точно Alt PID крутишь? Velocity PID не используется у меня.

mahowik:

тут какой то косяк с офф. версией. либо пишут что оч. хорошо держит (куча примеров на офф. форуме с рабочими пидами + я тож добивался хороших результатов порой), либо пишут вообще про разгон в +/-5м…

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

SovGVD

мне послышалось или 20-80кг, 150км и 20к$ о_0
национальная разработка как всегда =)))

mahowik
alexmos:

Мне кажется тут поможет только дебаггинг алгоритма - подключать bluetoth, брать ноут и гонять. Один гоняет, другой сморит в GUI как ведет себя определитель высоты.

это дааа, напарника порой очень не хватает…

alexmos:

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

а вот тут может быть косяк… в оф. версии там ПИ-ПД регуль, где ПИ на медленных данных высоты, а ПД на быстрых данных скорости и это должно работать. хороший пример - стаб. мод с ПИ-ПД регулем, где ПИ тоже на относительно медленных данных углов из ИМУ, а ПД на быстрых данных угловых скоростей с гиро… это я к тому что рано наверное ты отказался от ПИ-ПД… и я писал также об этом АлексуВПариже приводя данную аналогию в защиту ПИ-ПД, который тоже выкосил ПД регуль и теперь альт холд вообще не пашет (проверял на последней дев.), хотя он сейчас тоже его мучает… прям как в истории открытий! новое знание приходит примерно в одно и тоже время группе людей, а открытие уходит в свет от самого быстрого 😃

alexmos:

Ты точно Alt PID крутишь? Velocity PID не используется у меня.

обижжжжаете профессор! 😉

з.ы. забыл написать. вчера на тестах использовал ACC_BARO_CMPF=500.0f… меньше шума в гуи и вроде без ущерба быстродействию…
и кстать после прочтения статьи на хабре многие моменты в алгоритме прояснились, но не совсем ясно как bias можно складывать с ускорением если это не соразмерные величины… вот тут у меня в голове не хватает уровня абстракции, чтобы это понять… и если не трудно поясни плз.

omegapraim
Dimm168pin:

простите за оффтоп, не мог не поделиться)

Единственный аппарат в Украине, и в России такого нет)))))) Во дед загоняется та, а))) а нас тут вообще не существует))))))

mahowik
omegapraim:

Единственный аппарат в Украине, и в России такого нет)))))) Во дед загоняется та, а))) а нас тут вообще не существует))))))

nu dik kluchevaya fraza tam bila cho apparat stoit 20k, po kotoroy voennim ego vtuhali skore vsego 😉
potomu on edinstvenniy i nepovtorimiy i ni gde takogo net! vsezh logichno! 😃

alexmos
mahowik:

а вот тут может быть косяк… в оф. версии там ПИ-ПД регуль, где ПИ на медленных данных высоты, а ПД на быстрых данных скорости и это должно работать

попробую объяснить почему я откзалася от раздельных PI и PD. D в высоте - это производная ошибки, но данные о высоте у нас неточные и D от этих даных будет ещё хуже. Но производная ошибки - это и есть скорость (dErr = d(Hhold - H) = dHhold - dH = -dH), которую наш алгоритм худо-бедно выдает. То есть я просто обозвал P-составляющую скорости D-составляющей высоты, не изменив логики оригинальной версии, только PID высоты теперь стал классическим PID. А VelocityPID остался только D - производная скорости, что по сути является ускорением. А так ли нужен этот компонент? Посмотри на график ускорения при любом линейном перемещении - это выброс вверх и равнозначный выброс вниз. Т.е. компенсация а короткий перод времени даст +100 а потом -100 - такое моторы даже не успеют отработать, а есть ещё инерция коптера. Так что смысла от D-скорости ноль.

mahowik:

но не совсем ясно как bias можно складывать с ускорением если это не соразмерные величины

Конечно, размерности не совпадают, ведь все интегрирования добавляют время в размерность - но из-за того, что время цикла у нас меняетя мало, мы просто эти 3-4 мс закладываем в коэффициенты. Если быть очень дотошным, можно делить/умножать на время цикла, но в данном случае bias - !третий! интеграл и в нем время цикла отлично усредняется. А при вычислении скорости и высоты я учитываю время цикла в теукщей итерации.