MultiWii

Syberian

Можно-то все, только нужно ли? 😃 I-ветка нужна, чтобы батарейку к одному лучу вешать и потом хвастаться, что не кренится. Управление с ней получается дифференциального типа: любое отклонение “тарелки” будет постепенно сведено к нулю. Причем, при отклоненном стике! А при возврате стика в 0 , как бы сказать, “отдача замучает”.
Я уже тут писал, что нужно в режиме level не плюсовать level PID и RC command, а суммировать Angle и RC непосредственно перед ПИДом. Т.е. ручкой задавать угол “тарелки” непосредственно.
С другой стороны, IMU организован сам по себе криво, и не стоит пока его как-то преобразовывать. Путного выйдет мало. Лучше подождать MARG.

Covax

У тебя I автолевела сейчас на нуле или в каком значении?
Ну ты подскажи все-таки как повесить I на крутилку, хотя бы мельком, если не ломает 😃
Ты езе в ветер не летал? там свои замороки, поэтому все может понадобится, не хочется в поле все время лазить в ноут и корректировать I.

Я пока сам разбираюсь:
Значение I для автолевела хранится в переменной ILEVEL8,
щас придумаю как ее обработать.

Саша_пилот
Syberian:

Ну, хватит выводов, смотрите видос.

дааа, однако летает! прийдется не выкидывать а настраивать, я уже перестал верить что оно летает нормально.

а моторчики то детцл, а такие пропы таскают.

Олег, какой вес аппарата на видео летает? (с учетом батарейки.)

Covax
Саша_пилот:

а моторчики то детцл, а такие пропы таскают.

Ничего себе децл )) эти моторы тягают до 1.2кг, DT700, весят 78гр.
У Олега аппарат может пару кило сахара через границу с молдавией таскать только так 😃

SovGVD
Covax:

менялось значение 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 на лету и включать стабилизацию

Covax

Глеб, это все не то,
Мне не автолевел нужно включать, а подмешивать значение крутилки AUX1 в значение переменной ILEVEL8, причем до того как ILEVEL8 уйдет в расчет **** PITCH & ROLL & YAW PID **** или еще куда, пока не разобрался

Volver
Covax:

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

Прошу не обижаться, но мне кажется что это из той же серии, что и “не было у бабки проблем, купила козу”. 😃
Может лучше приделать LCD, чтобы было легко настраивать, там ведь в новой версии 1.претер7 есть поддержка новых дешевых LCDшек.

SovGVD
Covax:

не автолевел нужно включать

значит без этой строчки if ((nunchukPresent == 1 || accPresent == 1) && то_что_получаем_от_приемника>пороговое_значение) accMode = 1; else accMode = 0;

Covax:

а подмешивать значение крутилки AUX1 в значение переменной ILEVEL8

ну примерно тоже самое, будет что-то вроде:
defILEVEL8=ILEVEL8; - где то переопределяем, чтобы всегда было
ILEVEL8 = custommap (rcData[AUX1], 1000, 2000, минимум_для_I, максимум_для_I) + defILEVEL8; до того как оно в расчет уйдет (и хз + или нет, смотря как надо подмешивать)
и еще надо поковырять writeParams() - чтобы в память записывать новый параметр, чтобы оно вернулось после ребута ардуинки

Covax

Завистники! )) Никаких LCD, еще я буду коптер нfстраивать аппой чеpеp LCD, вот делать мне нечего! )

SovGVD:

и еще надо поковырять writeParams() - чтобы в память записывать новый параметр, чтобы оно вернулось после ребута ардуинки

Зачем вернулось, не надо, пусть зашито будет что зашили через комп, крутилку же я не кручу все время.

Syberian

Попробуем…
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;

Ну вот, обогнали… 😦

Piranha

Ага, нафлудили вон скока пока я сексом занимался с нунчаком, пойду в разрез публике- Мулти вии с нунчаком-гуано и маст дай!!! но с гирой-ласковый и предсказуемый аппарат 😃
Вкратце-протрахался ВСЮ прошлую неделю! Дергается коптер как паралитик!!Причем настройкиPID особо не сильно влияли на эту колбасню! ЧТо я тока не делал, три бубна пробил до дыр,прошивал-перепрошивал всеми прошивками, расхерачил руку до крови, на обоях теперь следы от пропеллеров, на паркете следы от валов и цанг пропеллеров, в минусе куча времени, нервов и бабла потраченного на дополнительные мозги, регули и моторы(на которые я грешил по очереди) плюсе-ТРИ коптера собранные в процессе околонаучных экспериментов которые впрочем ни один нормально не полетели до тех пор пока я не отпаял и не выкинул нах нунчак этот гребаный!!! кароче похоже что с циклом больше 3000-4000 коптер нормально не летит а чтоб добиться такого цикла на безмозглой нано/мини ардуине нужен аксель отдельный но никак не нунчак, не оно конечно летит и висит но при подпаяном нунчаке все равно присутствуют мелкие непредсказуемые подергивания и рывки(даже с отключеной стабилизацией)

Теперь я понял почему Warthox летает только с гирами без нунчаков

Covax
Syberian:

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, нет?

Syberian

ааа тьфу11111 перепутал с AUX1 (или 2)
Вмешиваться именно в ILEVEL8
код втыкать между //**** PITCH & ROLL & YAW PID ****
и for(axis=0;axis<3;axis++)

В Гуи поубирать галочки, чтобы выделенным каналом ничего другого не включалось.

Covax

Олег, ну ты крут 😃 Буду сегодня пробывать вечером!
А у меня и нет пока ничего другого, это Алил у нас закупился сенсорами по самые небалуйся 😃

Volver
Covax:

это Алил у нас закупился сенсорами по самые небалуйся

У меня только 1 плата с сенсорами 😆

(3 заказанных мною акселя от Норберта еще не дошли)
У меня уже был опыт получения безтрековой посылки через 3 месяца, т.что еще жду (то же самое относится к Вийю от дилэкстрим)

V8Max

А кто как крепит между собой нунчак и моушен плюс? вопрос к тем у кого дергается.
Сегодня наконец-то заберу регуль и запущу своего малыша))))
У мну связка нунчак+MP на прошлом коптере нормально работала… Если и эта будет работать, то буду думать что мне помогают сторонние силы))))))

Piranha
V8Max:

А кто как крепит между собой нунчак и моушен плюс?

Я их спаял один над другим и склеил термоклеем

V8Max:

Если и эта будет работать, то буду думать что мне помогают сторонние силы)))))

Я вот вчера уже начал думать что мне мешаю потусторонние как раз 😃

funtik26

Димка не сцать, нормально с нунчаком летать должно, позвонил бы, решили что там у тя не летает.
вопрос к остальным- все что то улучшают прошивки улучшают, а никто не выкладывает промежуточные готовые результаты

Dollar

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

И вот ещё! В ходе настройки и прыганья приложил аппарат об пол, немного выгнул держатель мотора или как его назвать. Решил попробовать установить все двигатели таким образом. Каракатица стала на порядок устойчивей!

killmouse

Вот такую “Маму” развел себе, кому надо пользуйтесь.
Размеры 59х59мм
В архиве небольшой ридмик.
Сделана под Arduino Nano V3.0 + Wii + BMA-020, в принципе ставить можно что угодно, i2C пины есть, остальное дело фантазии.
Пойду “фаршировать” 😇

Board.rar