MultiWii
В корне не согласен! Левел работает замечтательно, достаточно I поставить в 0. У меня level D=8 сейчас, настройки рол-пич-яв стоковые.
Да я уже пришел к этому выводу, спустя 30 минут после своего гневного выпада в сторону wii 😃
Олег, глянь пожалуйста идею, возможно такое осуществить?
Можно-то все, только нужно ли? 😃 I-ветка нужна, чтобы батарейку к одному лучу вешать и потом хвастаться, что не кренится. Управление с ней получается дифференциального типа: любое отклонение “тарелки” будет постепенно сведено к нулю. Причем, при отклоненном стике! А при возврате стика в 0 , как бы сказать, “отдача замучает”.
Я уже тут писал, что нужно в режиме level не плюсовать level PID и RC command, а суммировать Angle и RC непосредственно перед ПИДом. Т.е. ручкой задавать угол “тарелки” непосредственно.
С другой стороны, IMU организован сам по себе криво, и не стоит пока его как-то преобразовывать. Путного выйдет мало. Лучше подождать MARG.
У тебя I автолевела сейчас на нуле или в каком значении?
Ну ты подскажи все-таки как повесить I на крутилку, хотя бы мельком, если не ломает 😃
Ты езе в ветер не летал? там свои замороки, поэтому все может понадобится, не хочется в поле все время лазить в ноут и корректировать I.
Я пока сам разбираюсь:
Значение I для автолевела хранится в переменной ILEVEL8,
щас придумаю как ее обработать.
Ну, хватит выводов, смотрите видос.
дааа, однако летает! прийдется не выкидывать а настраивать, я уже перестал верить что оно летает нормально.
а моторчики то детцл, а такие пропы таскают.
Олег, какой вес аппарата на видео летает? (с учетом батарейки.)
а моторчики то детцл, а такие пропы таскают.
Ничего себе децл )) эти моторы тягают до 1.2кг, DT700, весят 78гр.
У Олега аппарат может пару кило сахара через границу с молдавией таскать только так 😃
менялось значение I автолевела
www.arduino.cc/en/Reference/map
long custommap(long x, long in_min, long in_max, long out_min, long out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
соответственно например I = custommap (то_что_получаем_от_приемника, минимум_который_можем_получить_от_приемника, максимум_который_можно_получить_от_приемника, минимум_для_I, максимум_для_I);
и еще внутрь функции custommap можно запихнуть что-то вроде:
if ((nunchukPresent == 1 || accPresent == 1) && то_что_получаем_от_приемника>пороговое_значение) accMode = 1; else accMode = 0;
будет менять I на лету и включать стабилизацию
Глеб, это все не то,
Мне не автолевел нужно включать, а подмешивать значение крутилки AUX1 в значение переменной ILEVEL8, причем до того как ILEVEL8 уйдет в расчет **** PITCH & ROLL & YAW PID **** или еще куда, пока не разобрался
Ну ты подскажи все-таки как повесить I на крутилку, хотя бы мельком, если не ломает Ты езе в ветер не летал? там свои замороки, поэтому все может понадобится, не хочется в поле все время лазить в ноут и корректировать I.
Прошу не обижаться, но мне кажется что это из той же серии, что и “не было у бабки проблем, купила козу”. 😃
Может лучше приделать LCD, чтобы было легко настраивать, там ведь в новой версии 1.претер7 есть поддержка новых дешевых LCDшек.
не автолевел нужно включать
значит без этой строчки if ((nunchukPresent == 1 || accPresent == 1) && то_что_получаем_от_приемника>пороговое_значение) accMode = 1; else accMode = 0;
а подмешивать значение крутилки AUX1 в значение переменной ILEVEL8
ну примерно тоже самое, будет что-то вроде:
defILEVEL8=ILEVEL8; - где то переопределяем, чтобы всегда было
ILEVEL8 = custommap (rcData[AUX1], 1000, 2000, минимум_для_I, максимум_для_I) + defILEVEL8; до того как оно в расчет уйдет (и хз + или нет, смотря как надо подмешивать)
и еще надо поковырять writeParams() - чтобы в память записывать новый параметр, чтобы оно вернулось после ребута ардуинки
Завистники! )) Никаких LCD, еще я буду коптер нfстраивать аппой чеpеp LCD, вот делать мне нечего! )
и еще надо поковырять writeParams() - чтобы в память записывать новый параметр, чтобы оно вернулось после ребута ардуинки
Зачем вернулось, не надо, пусть зашито будет что зашили через комп, крутилку же я не кручу все время.
Попробуем…
ILEVEL8 это тысячные от 0 до 0.255
Процедурка от Глеба очень полезная в нашем случае.
Нижеуказанное вставить перед просчетом level PID после этого:
//**** PITCH & ROLL & YAW PID ****
#define i_zero 1300 // мин. уровень крутилки для I=0 (макс пусть будет 2000)
#define ilevel_max 56 // макс уровень level I
if (rcData[YAW]>=i_zero)
ILEVEL8=custommap(rc_data,i_zero,2000,0,ilevel_max);
else ILEVEL8=0;
Ну вот, обогнали… 😦
Ага, нафлудили вон скока пока я сексом занимался с нунчаком, пойду в разрез публике- Мулти вии с нунчаком-гуано и маст дай!!! но с гирой-ласковый и предсказуемый аппарат 😃
Вкратце-протрахался ВСЮ прошлую неделю! Дергается коптер как паралитик!!Причем настройкиPID особо не сильно влияли на эту колбасню! ЧТо я тока не делал, три бубна пробил до дыр,прошивал-перепрошивал всеми прошивками, расхерачил руку до крови, на обоях теперь следы от пропеллеров, на паркете следы от валов и цанг пропеллеров, в минусе куча времени, нервов и бабла потраченного на дополнительные мозги, регули и моторы(на которые я грешил по очереди) плюсе-ТРИ коптера собранные в процессе околонаучных экспериментов которые впрочем ни один нормально не полетели до тех пор пока я не отпаял и не выкинул нах нунчак этот гребаный!!! кароче похоже что с циклом больше 3000-4000 коптер нормально не летит а чтоб добиться такого цикла на безмозглой нано/мини ардуине нужен аксель отдельный но никак не нунчак, не оно конечно летит и висит но при подпаяном нунчаке все равно присутствуют мелкие непредсказуемые подергивания и рывки(даже с отключеной стабилизацией)
Теперь я понял почему Warthox летает только с гирами без нунчаков
if (rcData[YAW]>=i_zero) ILEVEL8=custommap(rc_data,i_zero,2000,0,ilevel_max); else ILEVEL8=0;
Олег, почему rcData[YAW]?
Вот кусок кода pretor:
//**** PITCH & ROLL & YAW PID ****
for(axis=0;axis<3;axis++) {
if (accMode == 1 && axis<2 ) { //LEVEL MODE
errorAngle = rcCommand[axis]/2 - angle[axis]/2;
PTerm = (errorAngle)*PLEVEL8/50 - gyroData[axis]*dynP8[axis]/10;errorAngleI[axis] += errorAngle;
errorAngleI[axis] = constrain(errorAngleI[axis],-5000,+5000); //WindUp
ITerm = errorAngleI[axis] *ILEVEL8/2000;
Нам же надо вмешаться в Iterm, нет?
ааа тьфу11111 перепутал с AUX1 (или 2)
Вмешиваться именно в ILEVEL8
код втыкать между //**** PITCH & ROLL & YAW PID ****
и for(axis=0;axis<3;axis++)
В Гуи поубирать галочки, чтобы выделенным каналом ничего другого не включалось.
Олег, ну ты крут 😃 Буду сегодня пробывать вечером!
А у меня и нет пока ничего другого, это Алил у нас закупился сенсорами по самые небалуйся 😃
это Алил у нас закупился сенсорами по самые небалуйся
У меня только 1 плата с сенсорами ❗ 😆
(3 заказанных мною акселя от Норберта еще не дошли)
У меня уже был опыт получения безтрековой посылки через 3 месяца, т.что еще жду (то же самое относится к Вийю от дилэкстрим)
А с 3205 кто либо нормально полетел ?
Пара есть - а делать плату под них или нет - решаю .
А кто как крепит между собой нунчак и моушен плюс? вопрос к тем у кого дергается.
Сегодня наконец-то заберу регуль и запущу своего малыша))))
У мну связка нунчак+MP на прошлом коптере нормально работала… Если и эта будет работать, то буду думать что мне помогают сторонние силы))))))
А кто как крепит между собой нунчак и моушен плюс?
Я их спаял один над другим и склеил термоклеем
Если и эта будет работать, то буду думать что мне помогают сторонние силы)))))
Я вот вчера уже начал думать что мне мешаю потусторонние как раз 😃
Димка не сцать, нормально с нунчаком летать должно, позвонил бы, решили что там у тя не летает.
вопрос к остальным- все что то улучшают прошивки улучшают, а никто не выкладывает промежуточные готовые результаты
Вот решился написать. Прочитал всю тему начиная с трикоптера. Все собрал, настроил. Но мне кажется можно выжать большего. Обратите внимание на видео, небольшая болтанка, может я где-то проглядел, это излечимо?
И вот ещё! В ходе настройки и прыганья приложил аппарат об пол, немного выгнул держатель мотора или как его назвать. Решил попробовать установить все двигатели таким образом. Каракатица стала на порядок устойчивей!