MultiWii

Covax

Короче, будем работать.
Вернулся я на 1.7 pretor, буду всетаки ее добивать. Пока без моторов и пропов.
Мне вот что не нравится в ней:
Взлетел я виртуально на автолевеле, все нормально, все моторы практически ровно и на одном уровне работают.
Наклоняем коптер туда сюда и ставим на место (создаем типа ветренную погоду, потом безветрие). Двигатели на разных уровнях при отсутствии внешнего воздействия! Начинаем чуточку наклонять коптер в стороны уменьшая дисбаланс в моторах (так будет делать коптер в полете сам), тоесть он угомонится только через какоето время. Может я многое требую от техники, но в старых прошивках такого не было. Я даже не представляю, будет ли летать с 1.7 коптер в ветер или нет, его все время будет колбасить. У ПИлота_Саши кстати как раз такая ситуация на видео. И еще, в стаб моде коптер не сильно то реагирует на стики, быстро на автолевеле не полетаешь… Стаб мод превратился именно в Hold position какойто… А при I у автолевела 0, как правильно заметил Гена Грабовский, коптер отлично выравнивает уровни моторов.

Ха, еще момент, виртуально стартую моторы (коптер стоит на месте), довожу уровень до 1400, стики не трогаю, уровень правых моторов подростает. Тость автолевел сам по себе не работает, нужно будет аппой доводить до состояния висения. Ну какой же это автолевел тогда… Автолевел это стики бросил и он висит, а не живет своей жизнью.

Volver
Covax:

И еще, в стаб моде коптер не сильно то реагирует на стики… вот вообще сюрприз… Стаб мод превратился именно в Hold position какойто…

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

Covax

Да она не то чт слабее, както очень слабее 😃 Лудано, будем разбираться, в 1.7 много всего интересного, так что беру свои слова обратно про нерабочее состояниее прошивки, она просто другая, к ней надо привыкать и понимать принцип ее работы. Алил, спасибо за гель! действительно с ним как-то по другому.

tusik

Возникла новая прблема. Склеил вий и нунчак китайскими соплями, но почитав форум понял, что нунчак приклеил не той стороной. С трудом разединил их. Подключаю по-новому, не работает. До этого все работало. Перепаиваю провода от ардуины на место нунчака - вий работает, возвращаю обратно - нет. Собственно вопрос: разьемы на вие параллельны или нет? Можно ли подключать нунчак параллельно вию. Куда можно подключить нунчак напрямую к вию. Дорожки на плате вия проверил до переходных отверстий.

Musgravehill
tusik:

подключать нунчак параллельно вию

wbb.multiwii.com/viewtopic.php?f=8&t=145 сам не пробовал. Возможно, будет конфликт из-за одинакового адреса шины. Тогда подключать 3205-3200 и нунчак отдельно. Кстати, в случае неверной ориентации можно в коде поменять оси местами или знак сменить.

Covax:

Двигатели на разных уровнях при отсутствии внешнего воздействия

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

По-поводу itg3205 —> 3200. В покое показания были “-5”, смог победить в разделе калибровки calibratngG: “adc[pitch] = adc[pitch] - zeroADC[pitch]” сменил на: “adc[pitch] = adc[pitch]” либо “adc[pitch] = adc[pitch] - zeroADC[pitch] + 50”. С zeroADC[***] перекашивало выход почему-то. Теперь в покое всегда и Акк и Гиро = 0. Вчера полетал с 3205-3200, вполне нормально, иногда подрагивает. Но на правый ESC почему-то всегда идет более слабый сигнал. Попробую поставить новый мотор.

Covax
Musgravehill:

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

Поэтому I 0.045 у автолевела слишком большой помоему, я поставил 0.010, отлично выравниваются, буду чуть повышать уже в поле.

У меня задумка повесить включение автолевела не на тублер, а на ручку hover trottle и чтобы от ее кручения не только включался автолевел, а и менялось значение I автолевела, попробую сегодня глянуть прошивку, как такое сделать. Если кто может помочь в осуществлении идеи, присоединяйтесь!

Syberian
Covax:

в прошивках 1.7, и prebiz и pretor, фактически нерабочий автолевел

В корне не согласен! Левел работает замечтательно, достаточно I поставить в 0. У меня level D=8 сейчас, настройки рол-пич-яв стоковые. Паршивка 1.7бис, с пока еще своей доделкой “анти-прыжок”.
В выходные облетал свою треху, если можно так назвать. В стаб. режиме.
Короче, я, как всегда, подолбил его об пол и плюнул. Не летит, ага, мультивий ацтой, датчики - клоны, коптеры - г****. Потом приехал знакомый вертолетчик “и тут такое началось” (с) 😁 Прикладываю видео для сравнения.
Машинка стоит в воздухе как вкопанная, и в камеру позаглядывали, и фару повключали, и на улице в ветерок поболтались…
По впечатлениям товарища, управление по газу “непривычное”. Но рулится легче вертов и его собственной гексы на руссокопе.
Еще бы, у меня экспонента стоит 0.65 😉
2 пака 5а/ч мне выжрал, еле отбился от него 😁
На висении ток 20А, с фарой 21.7А. 13 минут висит с запасом. В очках пулять в узких помещениях проблематично из-за интерференции (гаснет изображение).

Выводы из сей басни таковой: надо учиться летать денно и нощно. Часы и великие часы налета. Жаль, некуда сбросить самолетные рефлексы.
Второй вывод: надо также выкашивать передние моторы градуса на 3, т.к. летает, подняв правую лапу 😁
Третий вывод: Мултивий это ниипически круто!111
Четвертый вывод: надо встраивать MARG-алгоритм от Сиськи (RCG Ciskje), т.к. при маневрах авиагоризонт дурит конкретно.
Пятый вывод: Здоровенные GWSовские лопаты тем хороши, что не ломаются, а тупо останавливают двигатели.

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

Раз

Два

BigDEN
SovGVD:

как бы еще через ардуинку снимать потребление тока?

я ипользую датчик ALLEGRO ACS756SCA-100B-PFF-T на 100 ампер (есть и менше)
стоил 220 р , выход по напряжению у него на аналоговый порт ардуинки и вычисляй амперы

Covax
Syberian:

В корне не согласен! Левел работает замечтательно, достаточно I поставить в 0. У меня level D=8 сейчас, настройки рол-пич-яв стоковые.

Да я уже пришел к этому выводу, спустя 30 минут после своего гневного выпада в сторону wii 😃
Олег, глянь пожалуйста идею, возможно такое осуществить?

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