MultiWii

ZamuykAtel

Ура заработало,порезал дорожки на Вимоушене подпаялся как на фото и понеслась:),подключил регули,моторы.Стартанул,покрутил винтами,остальное завтра.

mahowik

Я тут решил разобраться с ПИД параметрами, настройкой, реализациями и т.д. Надоело “слепым котенком” параметры тягать…

Кто нить в реализацию ПИД-регуля втрыркал?! У них там походу крейзи-микс полный 😃

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

Бред первый: на левел-“П” составляющую накладывается значение гиры помноженное на акро-“П”. Далеко от классики ПИД регулей однако! Учитывая, что показания гиры - это угловая скорость, то для стаб мода это еще сошло бы за “Д” параметр (принимая отклонение стика в квант времени постоянным), т.е. дифференциал изменения угла (или угловая скорость по сути).

На заметку по настройке: акро-“П” влияет на стаб мод.

Бред второй: за “Д” они принимают дифференциал угловой скорости - т.е. угловое ускорение, как для акро так и для стаб.мода., а должен быть на крайняк дифференциал изменения угла - т.е. угловая скорость… Вывел графики ПИД-ов в ГУИ, занулил “П” и “И”, так и есть “Д” у них - это угловое ускорение… В итоге по теории это может привести лишь к лишним осциляциям, т.к. это добавит компенсацию/всплеск не только в нужную полярность, а также и в противоположную…

На заметку по настройке: акро-“Д” влияет на стаб мод.

//**** PITCH & ROLL & YAW PID ****
  for(axis=0;axis<3;axis++) {
    if (accMode == 1 && axis<2 ) { //LEVEL MODE
      errorAngle = rcCommand[axis] - angle[axis];                                 //500+180 = 680: 16 bits is ok here
      PTerm      = errorAngle*(P8[PIDLEVEL]/10)/10 ;                              //680*20 = 13600: 16 bits is ok here

      errorAngleI[axis] += errorAngle;                                            //16 bits is ok here
      errorAngleI[axis]  = constrain(errorAngleI[axis],-10000,+10000); //WindUp   //16 bits is ok here
      ITerm              = (int32_t)errorAngleI[axis]*I8[PIDLEVEL]/4000;          //32 bits is needed for calculation:10000*I8 could exceed 32768   16 bits is ok for result
    } else { //ACRO MODE or YAW axis
      error = (int32_t)rcCommand[axis]*10*8/P8[axis] - gyroData[axis];            //32 bits is needed for calculation: 500*10*8 = 40000   16 bits is ok for result if P>2
      PTerm = rcCommand[axis];

      errorGyroI[axis] += error;                                                  //16 bits is ok here
      errorGyroI[axis]  = constrain(errorGyroI[axis],-16000,+16000); //WindUp     //16 bits is ok here
      if (abs(gyroData[axis])>640) errorGyroI[axis] = 0;
      ITerm = (int32_t)errorGyroI[axis]*I8[axis]/1000/8;                          //32 bits is needed for calculation: 16000*I8  16 bits is ok for result
    }
    PTerm         -= (int32_t)gyroData[axis]*dynP8[axis]/10/8;                    //32 bits is needed for calculation            16 bits is ok for result

    delta          = gyroData[axis] - lastGyro[axis];                             //16 bits is ok here, because the dif between 2 consecutive gyro reads is limited
    DTerm          = (delta1[axis]+delta2[axis]+delta+1)*dynD8[axis]/3/8;         //16 bits is ok here
    delta2[axis]   = delta1[axis];
    delta1[axis]   = delta;
    lastGyro[axis] = gyroData[axis];
    axisPID[axis] =  PTerm + ITerm - DTerm;
  }

Кроче я не называл бы вишный регулятор ПИД-регулятором, а скорее просто ВИИ-регулятор 😃

Возможно на практике это и имеет смысл, но в теории бред полный. Кто нить пытался разбираться?
Есть большое желание переписать ПИД-регуль, потому скорее всего буду писать в вишную ветку с идеей наведения порядку и выделения отдельных параметров для стаб. мода…

Материалы которы помогли понять магию ПИД:
ПИД регулирование (ПИД регулятор) на практических примерах или, - PID Not for PhD - Alex Demyanenko - либо ПИД-регуль на примере сливного бачка! 😃
pidcontrol.narod.ru
www.rcgroups.com/forums/showthread.php?t=1375728
www.rcgroups.com/forums/showpost.php?p=17215161&po…

Covax

Ох Саш, опять тебя забанят, теперь за раскрытие страшных тайн 😃)

AlcoNaft43
Volver:

Новая плата от Пана Jakuba, все в одном за 104 евро. sexycopter.myshopify.com/col...roducts/mwii01 Можно настраивать без компьютера (пиды можно настроить с помошью потенциометров)

кому это нужно за эти деньги, коптерконтрол теже деньги стоит…

Covax

кому это нужно за эти деньги, коптерконтрол теже деньги стоит…

А причем тут деньги, хотя цена завышена раза в полтора? Тут важно как много народу занимается проектом, насколько он популярен, как часто обновляется прошивка и растет качество софта, а то что там скорость обработки выше, так и выше немца скорость обработки, что ж теперь кому нужен немец за эти деньги? ))) в коптере важен софт, а не железо на котором от танцует.

mahowik
ziss_dm:

Так-что все по науке… Только сечас пираты идею стянут… 😉

посмотрел кстать в ардукоптере (пират версию), там как раз таки ПИД-регуль классик 😃
и по отзывам у него стаб. мод - это стаб мод, т.е. без опыта пилотирования можно поднять и полетать имея лишь гиру и аксель 😃

и всеж вопрос: как дифференциал скорости (ускорение) может добавить стабилизации? это не вписывается ни в один из параметров ПИД регулятора если учесть что исходные параметры (требуемое и измеренное значение) это углы…

AlcoNaft43
Covax:

А причем тут деньги, хотя цена завышена раза в полтора? Тут важно как много народу занимается проектом, насколько он популярен, как часто обновляется прошивка и растет качество софта, а то что там скорость обработки выше, так и выше немца скорость обработки, что ж теперь кому нужен немец за эти деньги? ))) в коптере важен софт, а не железо на котором от танцует.

Я летал и видел как летает (или скорей не летает) мультвии и сколько Андрей с ним возится. Немец по сравнению с ним летает на все деньги которые стоит и намного больше. По моему вы тут из г-на конфетку тут делаете. Я только один смысл вижу - скиллы растут 😃 И ваще АРМ наше все 😃

Edward_tlt
AlcoNaft43:

По моему вы тут из г-на конфетку тут делаете.

Если датчики подключены правильно и на экране всё отображается правильно, то вот какая идея… Можно же использовать вии вместо пирометров, например копилота или АП Тимофея? Т.е. мысль следующая, ШИМ - сглаживающий LC-фитр и получаем пропорциональное углам наклона платы напряжение на выходе годное для мозгов копилота или ап. Правда реализацию этой идеи наверное не потяну, программер из меня… Оффтоп конечно, но не знаю как тему в Самодельной электронике назвать и надо ли…

mahowik
Covax:

Ох Саш, опять тебя забанят, теперь за раскрытие страшных тайн )

я так завуалирую, что они не поймут было ли это раскрытием! 😃

Covax

Если мы тут конфетку делаем, то вы то кули тут делаете тогда?)) попкорн жуете?) Что за Андрей такой по которому можно судить о конфетки мы делаем или тортолетки, не в обиду этому Андрею конечно же) Мультивий летает на 200% от своей цены, я начал с него и лично не грамма не жалею об этом. Ардуина это обвязанная атмега на которой практически все известные полетные контроллеры сделаны, так что не надо ляля про конфетки. Разовьется опенпайлот - отлично, обрастет всеми вкусняшками хотябы ардукоптера - очень хорошо, если найдется чем загрузить его м ощности так вообще супер. Но все решают сенсоры и софт, а не процессор.

Edward_tlt

То Сергей Covax я может конечно не удачно цитату выдернул, прошу меня извинить, сам вообщем то собрал Мультивий, осталось чуток с механикой доразбираться… Просто вот идею ещё одного применения высказал. Бредовая?

Covax

Эдуард, про пирометры ничего не могу сказать не сталкивался…
А, весь мой спич был Сергею Алконафту конечно же)

mahowik
Edward_tlt:

я может конечно не удачно цитату выдернул, прошу меня извинить

я так понял что Сергей писал AlcoNaft43-у по поводу конфеток и незвестного Андрея 😃

ziss_dm

Hi mahovik,

	// write out angles back to servo out - this will be converted to PWM by RC_Channel
	g.rc_1.servo_out 	= g.pid_stabilize_roll.get_pi(error,  	delta_ms_fast_loop, 1.0);		// 2500 * .7 = 1750

	// We adjust the output by the rate of rotation:
	// Rate control through bias corrected gyro rates
	// omega is the raw gyro reading
	g.rc_1.servo_out	-= degrees(omega.x) * 100.0 * g.pid_stabilize_roll.kD();

Вторая часть ничего не напоминает? 😉
В WMC, основной контроллер работает всегда, в level mode ему на вход, вместо стиков подаеться выход Level PI контроллера (ну и I зануляеться, за ненадобностью). (Хотя согласен, с первого взгляда - WTF). Т.е. получаеться PI-PD конотроллер что тоже по науке. 😉

mahowik

выпилил и подрубил 6331 аксель по аналогу… заметил странный эффект которого вроде как раньше небыло…
ща при переходе с USB на батарею уплывает калибровка на 10-20 единиц и приходится перекалибровывать…
при питании от USB - 4.65в, при питании от аккума - стаб дает ровно 5в… Получается АЦП ардуины чувствителен к питалову?
или я всеж припалил ардуину свою? как-то случайно на аналоговые входы подал 5в вместо сигналов с приемыша…

tusik

У меня не уплывала. АЦП вроде не должен чувствовать питание.

Alex_from_Israel
mahowik:

выпилил и подрубил 6331 аксель по аналогу… заметил странный эффект которого вроде как раньше небыло…
ща при переходе с USB на батарею уплывает калибровка на 10-20 единиц и приходится перекалибровывать…
при питании от USB - 4.65в, при питании от аккума - стаб дает ровно 5в… Получается АЦП ардуины чувствителен к питалову?
или я всеж припалил ардуину свою? как-то случайно на аналоговые входы подал 5в вместо сигналов с приемыша…

У меня тоже 4.65 с USB. Похоже из за падения напряжения на диоде. Причем и на 2560 и 1280 примерно одинаково. С аккума 5 ровно. Замерял, когда присобачивал к датчикам самопальный левел конвертер. После установки конвертера пропали дикие пляски на магнетометре. Хотя не уверен, что он (магнетометр) вообще работает. Магнитом возле него крутил, ноль эмоций.