MultiWii - обсуждаем и отлаживаем Alt Hold

alexmos

Сочуствую, я вот пока не рискую на маневры 😃 Нет запчастей.
Optical Flow был включен, но он не мог влиять на высоту никак, он углы корректирует. Засветка просто приведет к отсутвию данных какое то время. Тут какая-то более серьезная проблема, прям интересно что это такое.

Вечером опять сходил погонял по двору, в общем все стабильно, летать можно и по сонар и по барометру. Серву подвеса переключил на другой BEC, вроде и помехи сонара ушли. Так что осталось смержиться с 2.0 и подкорректировать коэффициенты для пониженного цикла (30 гц должно хватить), а то сейчас с OptFlow время цикла непрлично большое, 4500.

Sir_Alex
alexmos:

Тут какая-то более серьезная проблема, прям интересно что это такое.

Попробуй просто феном погреть датчики. Как минимум аксель серьезно плывет при нагреве.

mahowik

Меня вчера осинило вдруг! 😃
А почему не отнимать длину вектора EstG вместо acc_1G, тогда и статическую ошибку искать не надо! Т.к. EstG вектор “плавно” корректируется по акселю (и уже содержит нужную нам коррекцию ошибки), в переходных процессах при ускоренни/торможении его длинна как раз acc_1G минус ошибка (дрейф акселя, неточная калибровка и т.д.), т.е.

accZ = (accADC[0] * EstG.V.X + accADC[1] * EstG.V.Y + accADC[2] * EstG.V.Z) * InvG - 1/InvG;

потом убираем пид регуль из интегратора и оставим только VEL_DAMP чтобы приводить скорость в ноль, т.е. корректировать нелинейность акселя и ошибку интегратора

vel+= accZ*accVelScale*cycleTime - vel * VEL_DAMP;

Скорость станет меньше шуметь, т.к. в ней не будет ошибки (alt - sensorAlt). И EstAlt соот-но станет менее шумной.
В конечном ПИД регуле в итоге при высоких Д не будет лишних дерганий (при переусиленни шума)

alexmos
mahowik:

Меня вчера осинило вдруг!
А почему не отнимать длину вектора EstG вместо acc_1G, тогда и статическую ошибку искать не надо! Т.к. EstG вектор “плавно” корректируется по акселю (и уже содержит нужную нам коррекцию ошибки), в переходных процессах при ускоренни/торможении его длинна как раз acc_1G минус ошибка (дрейф акселя, неточная калибровка и т.д.), т.е.

Я это тоже пробовал 😃 Не рабоатет. Вернее, работает но намного хуже поиска статичной I-части. Эта операция равнозначна дампингу ускорения в 0, что означает сначала ошибку в определении скорости и ещё большую в определении расстояния (это проявляется как выбросы на графиках скорости в минус и меньшее расстояние чем пройдено)

mahowik
alexmos:

Я это тоже пробовал Не рабоатет. Вернее, работает но намного хуже поиска статичной I-части. Эта операция равнозначна дампингу ускорения в 0, что означает сначала ошибку в определении скорости и ещё большую в определении расстояния (это проявляется как выбросы на графиках скорости в минус и меньшее расстояние чем пройдено)

но тут ведь допущение что EstG вполне статичен на переходных процессах (при высоком GYR_CMPF_FACTOR) т.е. при ускорениях и потому будет содержать именно acc_1G минус дрейф/ошибку акселя… мы ведь исходя из этого допущения используем EstG в качестве Z оси для получения проекции вектора ускорения…

т.е. по идее дампенинг будет совсем незначительним при не затяжных переходных процессах… а при затяжних тут уж весь алгоритм поплывет, т.к. нет “правильной” Z оси и соот-но проекция будет также неверной и т.д…

alexmos
mahowik:

но тут ведь допущение что EstG вполне статичен на переходных процессах (при высоком GYR_CMPF_FACTOR) т.е. при ускорениях и потому будет содержать именно acc_1G минус дрейф/ошибку акселя…

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

mahowik:

мы ведь исходя из этого допущения используем EstG в качестве Z оси для получения проекции вектора ускорения…

В этом случае есть существенная разница - мы использует только НАПРАВЛЕНИЕ вектора гиры. Его длина нам не интересна при проекции. А направление хорошо совпадает с направлением акселя при вертикальных перемещениях под любым углом. И даже если совпадает плохо - разница в Cos малого угла, что является бесконечно малой величиной.

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

mahowik:

т.е. по идее дампенинг будет совсем незначительним при не затяжных переходных процессах… а при затяжних тут уж весь алгоритм поплывет, т.к. нет “правильной” Z оси и соот-но проекция будет также неверной и т.д…

Неверное допущение. Комплементарный фильтр не зависит от амплитуды сигнала, только от разницы. Т.е. если ускорение будет 10G в течение 0.1 сек, то и ошибка будет большой. Если ускорение будет 0.1G в течение 100 сек, то ошибка будет малой, но в итоге при интегрировании ошибка в скорости в обоих случаях будет одинаковой. Поэтому неважно затяжные это или быстрые процессы.

skyrider

Плата у меня тоже Crius SE, сонар есть, если прошивка с работающим сонаром не опасна для коптера ,меня и окружающего мира, можно выложить готовый скетч для Crius SE 😃, и если можно , Алексей, скрин работающих пидов.
Если на выходные не будет дождя попробую подлетнуть.

gensek

Не компилируется, в папке лежат и MultiWii.ino и MultiWii.pde

[IMG][/IMG]

alexmos

На первом скриншоте непонятная ошибка, а на втором - прошу прощения, есть такая. Выложил по той же ссылке исправленную версию. Компилировал в IDE 0023

soliada

Аналогичная ситуация.Та же ошибка при компиляции.

alexmos:

Выложил по той же ссылке исправленную версию.

Спасибо,теперь компилируется.

У меня вопрос по GPS,какие настройки для модуля нужны МультиВи?
Если я правильно понимаю,то они отличны от настроек для Мегапирата?

skyrider

Подлетнул, видимо нужно настраивать (правда не знаю что), явно видно что пытается держать высоту, но в итоге рывками либо уходит в низ либо в верх, правда не понял сонар это или барометр т.к. включаются вместе с одного тумблера. Заметил в GUI такую штуку, если смотрим debug1 без активации баро и сонара - высоту показывает идеально, стоит щелкнуть тумблер (активация баро и сонара) - начинает шуметь. Квадрик весит примерно 1.5 кг, моторы 750кв, винты 12х4.7, пиды ALT ставил как на скрине выше, аксель по шести точкам не калибровал, куда копать?

alexmos

Сонар отключается в режиме Passthru - проверьте не включается ли у вас этот режим по тумблеру. Аксель желательно окалибровать по 6 точкам, делов 30 сек (это для парвильной работы барометра). По идее сонар не должен выключаться в режиме удержания высоты. Он отключается, если начнет терять сигнал, также при углах наклона больше 60.

soliada:

У меня вопрос по GPS,какие настройки для модуля нужны МультиВи?

по ЖПС - это не ко мне, никогда с им дела не имел.

gensek
alexmos:

На первом скриншоте непонятная ошибка, а на втором - прошу прощения, есть такая. Выложил по той же ссылке исправленную версию. Компилировал в IDE 0023

Спасибо, залил, в гуи все крутится правильно, по блютусу изменений нет с версией r15? помнится там не мог подцепится, а сейчас на r18 проверить нет возможности.

skyrider
alexmos:

Сонар отключается в режиме Passthru - проверьте не включается ли у вас этот режим по тумблеру.

шорт побьери, т.е. если я активирую Passthru сонар отключается? я думал он в таком режиме включается…
У меня на одном тумблере включение BARO и включение Passthru, получается в GUI на чекбоксах просто нужно оставить активацию BARO а Passthru не трогать вообще, при этом сонар по умолчанию будет постоянно активным?

После калибровки по этой методике ROLL почемуто стоит ровно под 45 градусов, что то делаю не так…

skyrider

Заработал сонар, почти отлично, на видео ручку газа не трогал вообще, видно как несколько раз “чихает” по высоте, а так все отлично! Браво Алексей!

Получается до этого я летал с отключенным сонаром, и рывки по высоте до этого были по барометру, как и сейчас если подняться метров на 5 и включить удержание, видимо для правильной работы калибровка по шести точкам обязательна, у меня почему то по ROLL становится криво. Алексей, последовательность калибровки не имеет значения (естественно кроме позиции №1)

soliada

Возник вопрос такого характера. А на какие пины подключать сонар на Ардуине с 2560АТмегой?

alexmos
skyrider:

После калибровки по этой методике ROLL почемуто стоит ровно под 45 градусов, что то делаю не так…

По GUI у вас по двум осям 255… а должно быть только по одной. Какая у вас схема расположения моторв? на рисунке для QUADX - т.е. оси датчика должны смотреть ровно под 90 градусов по горизонту. Сорри если по схеме это не очень понятно 😃 Порядок не имеет значения, да и точность расположения не надо выерять до 1 градуса- удерживать в руках вполне достаточно.

soliada:

Возник вопрос такого характера. А на какие пины подключать сонар на Ардуине с 2560АТмегой?

Не знаю, дело в том что мегу я в глаза не видел, и писать для нее код вслепую смысла нет. Trig можно на любую ногу вешать, а вот Echo - только там где есть свободное прерывание. Попробуйте разобраться в Sonar.pde как правильно настроить прерывания на мегу и на каком порту/ноге, а я включу в основной код…

skyrider:

видно как несколько раз “чихает” по высоте, а так все отлично

Это плохой симптом - на такой высоте как на видео сонар должен работать идеально. У меня при висении до 2-х метров никаких намеков нет на провалы. Если быстро носиться туда сюда с наклонами 45 град. - тогда да, начинает слегка подергивать по высоте.
Очень важно свободное пространство в угле 120 градусов от датчиков сонара, а также не должно быть наводок (типа проводов от ESC и моторов вблизи платы, серв на той же линии питания и т.д.), т.к. сонар имеет очень чувствителен к питанию, там же микрофонные усилители по сути.

skyrider
alexmos:

По GUI у вас по двум осям 255

Теперь только по Z 255

alexmos:

Какая у вас схема расположения моторв? на рисунке для QUADX - т.е. оси датчика должны смотреть ровно под 90 градусов по горизонту. Сорри если по схеме это не очень понятно Порядок не имеет значения

Схема расположения моторов QUAD X, пробовал менять последовательность, добился правильной калибровки в такой последовательности по Вашей схеме : 1 , 2 , 5 , 4 , 3 , 6. Не знаю почему , но в моем случае именно эта последовательность сработала, перепроверял три раза.
Если завтра позволит погода, проверю работу барометра, пропадут рывки по высоте после правильной калибровки акселя или нет.

alexmos:

чень важно свободное пространство в угле 120 градусов от датчиков сонара

С этим все в порядке.

alexmos:

а также не должно быть наводок (типа проводов от ESC и моторов вблизи платы, серв на той же линии питания и т.д.)

Попробую поменять на провода в изоляции.

alexmos:

на такой высоте как на видео сонар должен работать идеально

Может быть причиной небольших провалов то что мой квадрик более тяжелый, моторы относительно медленные 750кв, т.е он более вялый , не такой резкий, и ему нужны другие пиды ALT?

alexmos
skyrider:

Схема расположения моторов QUAD X, пробовал менять последовательность, добился правильной калибровки в такой последовательности по Вашей схеме : 1 , 2 , 5 , 4 , 3 , 6. Не знаю почему , но в моем случае именно эта последовательность сработала, перепроверял три раза.
Если завтра позволит погода, проверю работу барометра, пропадут рывки по высоте после правильной калибровки акселя или нет.

Хм, похоже баг где то в алгоритме. Последовательность не должна играть никакой роли, кроме того что Z всегда в начале. Подумаю…

skyrider:

Может быть причиной небольших провалов то что мой квадрик более тяжелый, моторы относительно медленные 750кв, т.е он более вялый , не такой резкий, и ему нужны другие пиды ALT?

Нет, по видео очень похоже на кратковременные лаги сонара. От веса конечно зависит, но просто будет чуть медленне стабилизация - а тут из стабилного состояния рывки в нестабильное. Попробуйте запустить моторы на рабочую мощность с подключением в ГУИ и гляньте что показывает сонар. Высота не должна прыгать.

Вообще с сонаром надо быть осторожнее, т.к. если он начнет выдавать неправильные данные (например от наводок решит что высота всегда равна 1 метру) - коптер может как свалиться, так и в небеса улететь. Я сделал ограничитель по барометру для крайних случаев, но не проверял его работу. Так что при испытаниях надо руку всегда держать на ручке отключения режима Alt Hold 😃

skyrider

Изменил пару параметров в config.h
#define MINTHROTTLE 1130
#define INTERNAL_I2C_PULLUPS
#define DEADBAND 20
#define MAXTHROTTLE 1900
#define THROTTLE_HOVER 1440
#define SHIFT_HOVER 1450
#define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = -Y; magADC[PITCH] = X; magADC[YAW] = Z;}
Откалибровал по шести точкам и подлетнул на метровой высоте - дергается при включении Alt Hold по высоте как припадошный каждые 2-3 секунды, что то из того что я сделал ему явно не понравилось, нужно цеплять блютус и смотреть что кажет в полете.

alexmos:

Попробуйте запустить моторы на рабочую мощность с подключением в ГУИ и гляньте что показывает сонар. Высота не должна прыгать.

Скачет примерно + - 0.1-0.3